{
  "aboutHtml": "<p>Seedance 1.5 Pro สร้างวิดีโอจากข้อความหรือภาพ และสร้างเสียงไปพร้อมกับภาพได้ ตัวเลือกตรงตามชื่อคือ doubao-seedance-1-5-pro-251215 ตัวควบคุมเสียงแยกโปรไฟล์นี้จาก Seedance 1.0 ที่ไม่มีเสียง: generate_audio=true ขอเสียงที่สัมพันธ์กับภาพ ส่วน false ขอวิดีโอไม่มีเสียง ใช้คำบรรยายฉากสำหรับแนวคิดใหม่ หรือใช้ภาพกำหนดตัวแบบและองค์ประกอบภาพเปิด</p><p>บรรยายการกระทำที่เห็นและเสียงเป็นส่วนของฉากเดียวกัน ระบุตัวแบบ สถานที่ การเคลื่อนไหว และกล้อง แล้วอธิบายเสียงพูด เอฟเฟกต์เสียง หรือดนตรีประกอบที่ต้องการ ฉากบุคคลอาจแสดงคนลืมตาขณะกล้องค่อย ๆ ถอยออก โดยมีเสียงลมรอบตัว สำหรับฉากผลิตภัณฑ์ ให้เชื่อมเสียงเข้ากับเหตุการณ์ที่เห็น เช่น ฝาเปิดหรือวัตถุสัมผัสพื้นผิว แทนการเพิ่มรายการเอฟเฟกต์ที่ไม่เกี่ยวกัน</p><p>โมเดลสร้างเสียงพูด เอฟเฟกต์เสียง และดนตรีประกอบจากพรอมป์ต์และเนื้อหาภาพได้ คู่มือแนะนำให้ใส่บทพูดไว้ในเครื่องหมายอัญประกาศคู่ ให้บทพูดสั้นพอสำหรับการกระทำและช่วงหยุดที่ร้องขอ และแยกผู้พูดเมื่อมีตัวละครมากกว่าหนึ่งคน ตรวจถ้อยคำจริง การระบุว่าเสียงเป็นของใคร และความสัมพันธ์กับภาพ คำสั่งเสียงใช้กำกับการแสดงที่สร้างขึ้น ไม่ใช่อินพุตเสียงอ้างอิงที่อัปโหลดแยกในคำขอที่เอกสารของโปรไฟล์นี้ระบุ</p><p>ภาพเป็นวิดีโอใช้รายการ image_url ควบคู่กับข้อความ ส่ง URL ภาพที่เข้าถึงได้หรือ Base64 data URL ในรูปแบบ JPEG, PNG, WEBP, BMP, TIFF หรือ GIF ข้อจำกัดภาพตามเอกสารคือเล็กกว่า 30 MB ทั้งสองด้านมากกว่า 300 และน้อยกว่า 6000 พิกเซล และอัตราส่วนความกว้างต่อความสูงมากกว่า 0.4 และน้อยกว่า 2.5 เตรียมการครอปและตัวแบบที่ต้องการให้ชัดเจน แล้วบรรยายการเคลื่อนไหวจากองค์ประกอบภาพนั้น ตัวอย่างภาพใช้อัตราส่วน adaptive เพื่อให้สอดคล้องกับภาพอ้างอิง</p><p>คู่มือความยาวเฉพาะโปรไฟล์ระบุจำนวนวินาทีเต็มตั้งแต่สี่ถึงสิบสอง หรือ -1 เพื่อให้โมเดลเลือกความยาวภายในช่วงนั้น ค่าเริ่มต้นคือห้าวินาที Seedance 1.5 Pro มีค่าเริ่มต้น 720p และตารางโปรไฟล์ที่เก็บไว้ระบุ 480p กับ 720p คู่มือการใช้งานเฉพาะนี้ไม่ได้เสนอ 1080p สำหรับ 1.5 Pro ตัวเลือกอัตราส่วนคงที่ ได้แก่ 16:9, 4:3, 1:1, 3:4, 9:16 และ 21:9 โดย adaptive เป็นค่าเริ่มต้นของ 1.5 ตามเอกสาร ตรวจความยาวและสัดส่วนคลิปจริง แทนการถือว่าค่าที่ร้องขอเป็นชิ้นงานที่ได้รับแล้ว</p><p>คำขอมีระดับการประมวลผลสองแบบ service_tier=default เลือกการประมวลผลออนไลน์ ส่วน flex เลือกแบบออฟไลน์สำหรับงานที่รอได้นานกว่า ไม่สามารถเปลี่ยนระดับหลังส่งงาน เลือกตามความต้องการด้านเวลาของขั้นตอนงาน และเก็บค่าที่เลือกไว้ในบันทึกคำขอ โหมดเสียงกับระดับการประมวลผลเป็นคนละตัวเลือก: คลิปไม่มีเสียงไม่ได้เป็นงานออฟไลน์โดยอัตโนมัติ และการเปิดเสียงไม่ได้เลือกระดับการประมวลผลให้</p><p>ให้คำสั่งซีด ลายน้ำ และกล้องสอดคล้องกับฉาก คำสั่งพารามิเตอร์ที่ฝังในข้อความมีลำดับความสำคัญสูงกว่าพารามิเตอร์เสริมที่แยกไว้ ตัวควบคุมตรึงกล้องไม่รองรับกรณีใช้ภาพอ้างอิง และในกรณีที่ใช้ได้ก็ไม่รับประกันว่าจะล็อกภาพนิ่ง สำหรับงานเคลื่อนไหวที่ใช้ภาพนำ ให้บรรยายการเคลื่อนไหวที่ต้องการโดยตรง แทนการสมมติว่าตัวควบคุมกล้องทำให้ไม่ต้องอธิบายช็อต</p><p>ปริมาณการใช้งานวัดเป็นโทเคนวิดีโอ: ความกว้างผลลัพธ์ × ความสูงผลลัพธ์ × อัตราเฟรม × ความยาวผลลัพธ์ / 1024 งานที่เสร็จแล้วรายงานปริมาณนี้ใน usage.completion_tokens เก็บปริมาณที่รายงานไว้พร้อมคลิปสำเร็จและการตั้งค่าที่ร้องขอ การเปิดหรือปิดเสียง และการประมวลผลออนไลน์หรือ flex ยังคงเป็นหมวดแยกกันในการคิดค่าบริการตามการใช้งาน</p><p>เมื่อส่งคำขอจะได้รหัสงานแบบอะซิงโครนัส ติดตามงานจนเสร็จแล้วบันทึกวิดีโอที่ content.video_url ให้มา ระยะเวลาเก็บไฟล์ที่สร้างตามเอกสารคือเจ็ดวัน ตัวควบคุมหมดอายุเริ่มนับจากเวลาสร้าง มีค่าเริ่มต้น 172800 วินาทีและรับค่าตั้งแต่ 3600 ถึง 259200 วินาที งานที่ยังไม่เสร็จจะมีสถานะ expired หลังครบช่วงเวลาที่ตั้งไว้ เก็บคลิปสุดท้าย ภาพต้นฉบับ และบรีฟภาพพร้อมเสียงตรงตามที่ใช้ไว้ด้วยกัน แล้วตรวจผลลัพธ์ทั้งหมดในด้านการกระทำ อัตลักษณ์ ความต่อเนื่องของกล้อง และความตรงกันของเสียงกับภาพ</p>",
  "aboutText": "Seedance 1.5 Pro สร้างวิดีโอจากข้อความหรือภาพ และสร้างเสียงไปพร้อมกับภาพได้ ตัวเลือกตรงตามชื่อคือ doubao-seedance-1-5-pro-251215 ตัวควบคุมเสียงแยกโปรไฟล์นี้จาก Seedance 1.0 ที่ไม่มีเสียง: generate_audio=true ขอเสียงที่สัมพันธ์กับภาพ ส่วน false ขอวิดีโอไม่มีเสียง ใช้คำบรรยายฉากสำหรับแนวคิดใหม่ หรือใช้ภาพกำหนดตัวแบบและองค์ประกอบภาพเปิด\n\nบรรยายการกระทำที่เห็นและเสียงเป็นส่วนของฉากเดียวกัน ระบุตัวแบบ สถานที่ การเคลื่อนไหว และกล้อง แล้วอธิบายเสียงพูด เอฟเฟกต์เสียง หรือดนตรีประกอบที่ต้องการ ฉากบุคคลอาจแสดงคนลืมตาขณะกล้องค่อย ๆ ถอยออก โดยมีเสียงลมรอบตัว สำหรับฉากผลิตภัณฑ์ ให้เชื่อมเสียงเข้ากับเหตุการณ์ที่เห็น เช่น ฝาเปิดหรือวัตถุสัมผัสพื้นผิว แทนการเพิ่มรายการเอฟเฟกต์ที่ไม่เกี่ยวกัน\n\nโมเดลสร้างเสียงพูด เอฟเฟกต์เสียง และดนตรีประกอบจากพรอมป์ต์และเนื้อหาภาพได้ คู่มือแนะนำให้ใส่บทพูดไว้ในเครื่องหมายอัญประกาศคู่ ให้บทพูดสั้นพอสำหรับการกระทำและช่วงหยุดที่ร้องขอ และแยกผู้พูดเมื่อมีตัวละครมากกว่าหนึ่งคน ตรวจถ้อยคำจริง การระบุว่าเสียงเป็นของใคร และความสัมพันธ์กับภาพ คำสั่งเสียงใช้กำกับการแสดงที่สร้างขึ้น ไม่ใช่อินพุตเสียงอ้างอิงที่อัปโหลดแยกในคำขอที่เอกสารของโปรไฟล์นี้ระบุ\n\nภาพเป็นวิดีโอใช้รายการ image_url ควบคู่กับข้อความ ส่ง URL ภาพที่เข้าถึงได้หรือ Base64 data URL ในรูปแบบ JPEG, PNG, WEBP, BMP, TIFF หรือ GIF ข้อจำกัดภาพตามเอกสารคือเล็กกว่า 30 MB ทั้งสองด้านมากกว่า 300 และน้อยกว่า 6000 พิกเซล และอัตราส่วนความกว้างต่อความสูงมากกว่า 0.4 และน้อยกว่า 2.5 เตรียมการครอปและตัวแบบที่ต้องการให้ชัดเจน แล้วบรรยายการเคลื่อนไหวจากองค์ประกอบภาพนั้น ตัวอย่างภาพใช้อัตราส่วน adaptive เพื่อให้สอดคล้องกับภาพอ้างอิง\n\nคู่มือความยาวเฉพาะโปรไฟล์ระบุจำนวนวินาทีเต็มตั้งแต่สี่ถึงสิบสอง หรือ -1 เพื่อให้โมเดลเลือกความยาวภายในช่วงนั้น ค่าเริ่มต้นคือห้าวินาที Seedance 1.5 Pro มีค่าเริ่มต้น 720p และตารางโปรไฟล์ที่เก็บไว้ระบุ 480p กับ 720p คู่มือการใช้งานเฉพาะนี้ไม่ได้เสนอ 1080p สำหรับ 1.5 Pro ตัวเลือกอัตราส่วนคงที่ ได้แก่ 16:9, 4:3, 1:1, 3:4, 9:16 และ 21:9 โดย adaptive เป็นค่าเริ่มต้นของ 1.5 ตามเอกสาร ตรวจความยาวและสัดส่วนคลิปจริง แทนการถือว่าค่าที่ร้องขอเป็นชิ้นงานที่ได้รับแล้ว\n\nคำขอมีระดับการประมวลผลสองแบบ service_tier=default เลือกการประมวลผลออนไลน์ ส่วน flex เลือกแบบออฟไลน์สำหรับงานที่รอได้นานกว่า ไม่สามารถเปลี่ยนระดับหลังส่งงาน เลือกตามความต้องการด้านเวลาของขั้นตอนงาน และเก็บค่าที่เลือกไว้ในบันทึกคำขอ โหมดเสียงกับระดับการประมวลผลเป็นคนละตัวเลือก: คลิปไม่มีเสียงไม่ได้เป็นงานออฟไลน์โดยอัตโนมัติ และการเปิดเสียงไม่ได้เลือกระดับการประมวลผลให้\n\nให้คำสั่งซีด ลายน้ำ และกล้องสอดคล้องกับฉาก คำสั่งพารามิเตอร์ที่ฝังในข้อความมีลำดับความสำคัญสูงกว่าพารามิเตอร์เสริมที่แยกไว้ ตัวควบคุมตรึงกล้องไม่รองรับกรณีใช้ภาพอ้างอิง และในกรณีที่ใช้ได้ก็ไม่รับประกันว่าจะล็อกภาพนิ่ง สำหรับงานเคลื่อนไหวที่ใช้ภาพนำ ให้บรรยายการเคลื่อนไหวที่ต้องการโดยตรง แทนการสมมติว่าตัวควบคุมกล้องทำให้ไม่ต้องอธิบายช็อต\n\nปริมาณการใช้งานวัดเป็นโทเคนวิดีโอ: ความกว้างผลลัพธ์ × ความสูงผลลัพธ์ × อัตราเฟรม × ความยาวผลลัพธ์ / 1024 งานที่เสร็จแล้วรายงานปริมาณนี้ใน usage.completion_tokens เก็บปริมาณที่รายงานไว้พร้อมคลิปสำเร็จและการตั้งค่าที่ร้องขอ การเปิดหรือปิดเสียง และการประมวลผลออนไลน์หรือ flex ยังคงเป็นหมวดแยกกันในการคิดค่าบริการตามการใช้งาน\n\nเมื่อส่งคำขอจะได้รหัสงานแบบอะซิงโครนัส ติดตามงานจนเสร็จแล้วบันทึกวิดีโอที่ content.video_url ให้มา ระยะเวลาเก็บไฟล์ที่สร้างตามเอกสารคือเจ็ดวัน ตัวควบคุมหมดอายุเริ่มนับจากเวลาสร้าง มีค่าเริ่มต้น 172800 วินาทีและรับค่าตั้งแต่ 3600 ถึง 259200 วินาที งานที่ยังไม่เสร็จจะมีสถานะ expired หลังครบช่วงเวลาที่ตั้งไว้ เก็บคลิปสุดท้าย ภาพต้นฉบับ และบรีฟภาพพร้อมเสียงตรงตามที่ใช้ไว้ด้วยกัน แล้วตรวจผลลัพธ์ทั้งหมดในด้านการกระทำ อัตลักษณ์ ความต่อเนื่องของกล้อง และความตรงกันของเสียงกับภาพ",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "c2be33f73c561acd88842b4a3f2294745f7f6f39a184ad183c2d35583b6ebc6e",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "th",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">ByteDance: Seedance 1.5 Pro</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"ปิด\">×</button></div><div class=\"idline\"><span>ByteDance /</span><code>doubao-seedance-1-5-pro-251215</code><button type=\"button\" id=\"copy-id\">คัดลอก ID</button></div><nav class=\"card-jump-nav\" aria-label=\"ส่วนต่าง ๆ ของการ์ดโมเดล\"><button type=\"button\" data-card-jump=\"overview\">เริ่มต้น</button><button type=\"button\" data-card-jump=\"methods\">อินพุตและเมธอด</button><button type=\"button\" data-card-jump=\"pricing\">ราคา</button><button type=\"button\" data-card-jump=\"examples\">ตัวอย่าง</button><button type=\"button\" data-card-jump=\"results\">ผลลัพธ์</button><button type=\"button\" data-card-jump=\"aliases\">ชื่ออื่น</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"เมธอด API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|videos|/v1/videos|doubao-seedance-1-5-pro-251215\">วิดีโอ</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">เริ่มต้น</h3><p class=\"mdesc-full\">Seedance 1.5 Pro สร้างวิดีโอจากข้อความหรือภาพ และสร้างเสียงพูด เอฟเฟกต์เสียง และดนตรีประกอบที่สัมพันธ์กับภาพได้ เปิดหรือปิดเสียงได้ โดยโปรไฟล์ตามเอกสารมีฉากยาว 4–12 วินาที การจัดเฟรมแบบ adaptive และการประมวลผลแบบออนไลน์หรือ flex</p><dl class=\"card-io\" data-card-io><div><dt>อินพุตที่รองรับ</dt><dd>ข้อความ · รูปภาพ</dd></div><div><dt>ผลลัพธ์</dt><dd>วิดีโอ</dd></div></dl><details class=\"card-about\"><summary>เกี่ยวกับโมเดล</summary><p class=\"note-s\" data-model-method-boundary>คำอธิบายนี้ครอบคลุมความสามารถของโมเดล อินพุต เอาต์พุต และตัวเลือกที่ใช้ได้ใน Ailoot แสดงด้านล่างตามเมธอดที่เลือก</p><div class=\"mabout\" id=\"m-about\"><p>Seedance 1.5 Pro สร้างวิดีโอจากข้อความหรือภาพ และสร้างเสียงไปพร้อมกับภาพได้ ตัวเลือกตรงตามชื่อคือ doubao-seedance-1-5-pro-251215 ตัวควบคุมเสียงแยกโปรไฟล์นี้จาก Seedance 1.0 ที่ไม่มีเสียง: generate_audio=true ขอเสียงที่สัมพันธ์กับภาพ ส่วน false ขอวิดีโอไม่มีเสียง ใช้คำบรรยายฉากสำหรับแนวคิดใหม่ หรือใช้ภาพกำหนดตัวแบบและองค์ประกอบภาพเปิด</p><p>บรรยายการกระทำที่เห็นและเสียงเป็นส่วนของฉากเดียวกัน ระบุตัวแบบ สถานที่ การเคลื่อนไหว และกล้อง แล้วอธิบายเสียงพูด เอฟเฟกต์เสียง หรือดนตรีประกอบที่ต้องการ ฉากบุคคลอาจแสดงคนลืมตาขณะกล้องค่อย ๆ ถอยออก โดยมีเสียงลมรอบตัว สำหรับฉากผลิตภัณฑ์ ให้เชื่อมเสียงเข้ากับเหตุการณ์ที่เห็น เช่น ฝาเปิดหรือวัตถุสัมผัสพื้นผิว แทนการเพิ่มรายการเอฟเฟกต์ที่ไม่เกี่ยวกัน</p><p>โมเดลสร้างเสียงพูด เอฟเฟกต์เสียง และดนตรีประกอบจากพรอมป์ต์และเนื้อหาภาพได้ คู่มือแนะนำให้ใส่บทพูดไว้ในเครื่องหมายอัญประกาศคู่ ให้บทพูดสั้นพอสำหรับการกระทำและช่วงหยุดที่ร้องขอ และแยกผู้พูดเมื่อมีตัวละครมากกว่าหนึ่งคน ตรวจถ้อยคำจริง การระบุว่าเสียงเป็นของใคร และความสัมพันธ์กับภาพ คำสั่งเสียงใช้กำกับการแสดงที่สร้างขึ้น ไม่ใช่อินพุตเสียงอ้างอิงที่อัปโหลดแยกในคำขอที่เอกสารของโปรไฟล์นี้ระบุ</p><p>ภาพเป็นวิดีโอใช้รายการ image_url ควบคู่กับข้อความ ส่ง URL ภาพที่เข้าถึงได้หรือ Base64 data URL ในรูปแบบ JPEG, PNG, WEBP, BMP, TIFF หรือ GIF ข้อจำกัดภาพตามเอกสารคือเล็กกว่า 30 MB ทั้งสองด้านมากกว่า 300 และน้อยกว่า 6000 พิกเซล และอัตราส่วนความกว้างต่อความสูงมากกว่า 0.4 และน้อยกว่า 2.5 เตรียมการครอปและตัวแบบที่ต้องการให้ชัดเจน แล้วบรรยายการเคลื่อนไหวจากองค์ประกอบภาพนั้น ตัวอย่างภาพใช้อัตราส่วน adaptive เพื่อให้สอดคล้องกับภาพอ้างอิง</p><p>คู่มือความยาวเฉพาะโปรไฟล์ระบุจำนวนวินาทีเต็มตั้งแต่สี่ถึงสิบสอง หรือ -1 เพื่อให้โมเดลเลือกความยาวภายในช่วงนั้น ค่าเริ่มต้นคือห้าวินาที Seedance 1.5 Pro มีค่าเริ่มต้น 720p และตารางโปรไฟล์ที่เก็บไว้ระบุ 480p กับ 720p คู่มือการใช้งานเฉพาะนี้ไม่ได้เสนอ 1080p สำหรับ 1.5 Pro ตัวเลือกอัตราส่วนคงที่ ได้แก่ 16:9, 4:3, 1:1, 3:4, 9:16 และ 21:9 โดย adaptive เป็นค่าเริ่มต้นของ 1.5 ตามเอกสาร ตรวจความยาวและสัดส่วนคลิปจริง แทนการถือว่าค่าที่ร้องขอเป็นชิ้นงานที่ได้รับแล้ว</p><p>คำขอมีระดับการประมวลผลสองแบบ service_tier=default เลือกการประมวลผลออนไลน์ ส่วน flex เลือกแบบออฟไลน์สำหรับงานที่รอได้นานกว่า ไม่สามารถเปลี่ยนระดับหลังส่งงาน เลือกตามความต้องการด้านเวลาของขั้นตอนงาน และเก็บค่าที่เลือกไว้ในบันทึกคำขอ โหมดเสียงกับระดับการประมวลผลเป็นคนละตัวเลือก: คลิปไม่มีเสียงไม่ได้เป็นงานออฟไลน์โดยอัตโนมัติ และการเปิดเสียงไม่ได้เลือกระดับการประมวลผลให้</p><p>ให้คำสั่งซีด ลายน้ำ และกล้องสอดคล้องกับฉาก คำสั่งพารามิเตอร์ที่ฝังในข้อความมีลำดับความสำคัญสูงกว่าพารามิเตอร์เสริมที่แยกไว้ ตัวควบคุมตรึงกล้องไม่รองรับกรณีใช้ภาพอ้างอิง และในกรณีที่ใช้ได้ก็ไม่รับประกันว่าจะล็อกภาพนิ่ง สำหรับงานเคลื่อนไหวที่ใช้ภาพนำ ให้บรรยายการเคลื่อนไหวที่ต้องการโดยตรง แทนการสมมติว่าตัวควบคุมกล้องทำให้ไม่ต้องอธิบายช็อต</p><p>ปริมาณการใช้งานวัดเป็นโทเคนวิดีโอ: ความกว้างผลลัพธ์ × ความสูงผลลัพธ์ × อัตราเฟรม × ความยาวผลลัพธ์ / 1024 งานที่เสร็จแล้วรายงานปริมาณนี้ใน usage.completion_tokens เก็บปริมาณที่รายงานไว้พร้อมคลิปสำเร็จและการตั้งค่าที่ร้องขอ การเปิดหรือปิดเสียง และการประมวลผลออนไลน์หรือ flex ยังคงเป็นหมวดแยกกันในการคิดค่าบริการตามการใช้งาน</p><p>เมื่อส่งคำขอจะได้รหัสงานแบบอะซิงโครนัส ติดตามงานจนเสร็จแล้วบันทึกวิดีโอที่ content.video_url ให้มา ระยะเวลาเก็บไฟล์ที่สร้างตามเอกสารคือเจ็ดวัน ตัวควบคุมหมดอายุเริ่มนับจากเวลาสร้าง มีค่าเริ่มต้น 172800 วินาทีและรับค่าตั้งแต่ 3600 ถึง 259200 วินาที งานที่ยังไม่เสร็จจะมีสถานะ expired หลังครบช่วงเวลาที่ตั้งไว้ เก็บคลิปสุดท้าย ภาพต้นฉบับ และบรีฟภาพพร้อมเสียงตรงตามที่ใช้ไว้ด้วยกัน แล้วตรวจผลลัพธ์ทั้งหมดในด้านการกระทำ อัตลักษณ์ ความต่อเนื่องของกล้อง และความตรงกันของเสียงกับภาพ</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">ใช้งานได้ใน Ailoot · อินพุตและเมธอด</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · วิดีโอ</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>ขาเข้า</dt><dd><code>text</code>, <code>image</code></dd></div><div><dt>ขาออก</dt><dd><code>video</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>ฟิลด์</th><th>ประเภท</th><th>ข้อกำหนด</th><th>ค่าและข้อจำกัด</th><th>ค่าเริ่มต้น</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>จำเป็น</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>doubao-seedance-1-5-pro-251215</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">content</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>array</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>จำเป็น</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>เงื่อนไข: ออบเจ็กต์ข้อความ/สื่อในรูปแบบดั้งเดิม อาร์เรย์ชั้นนอกต้องไม่ว่าง ตัวสร้างทั่วไปของ Ailoot นี้ไม่ตรวจสอบชนิดของโหนดที่ซ้อนอยู่</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">duration</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>integer</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>ไม่บังคับ</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>เงื่อนไข: สคีมาหลักของ 1.x ระบุ 2–12 คำอธิบายที่ใช้ร่วมกันในภายหลังระบุ 1.5 เป็น 4–12 หรือ -1 ตัวอย่างใช้ 5 ซึ่งมีระบุสอดคล้องกันในเอกสารทั้งสองส่วน</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"known\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>5</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">resolution</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>ไม่บังคับ</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>480p, 720p</div><div>เงื่อนไข: Seedance 1.5 Pro รองรับ 480p และ 720p ไม่รองรับ 1080p ความละเอียดเริ่มต้นตามเอกสารคือ 720p</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"known\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>720p</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">ratio</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>ไม่บังคับ</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive</div><div>เงื่อนไข: อัตราส่วนเริ่มต้นของ Seedance 1.5 Pro ตามเอกสารคือ adaptive ตัวเลือกอัตราส่วนคงที่ยังคงเดิม</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"known\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>adaptive</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">service_tier</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>ไม่บังคับ</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>default, flex</div><div>เงื่อนไข: default=online, flex=offline เลือกก่อนสร้าง</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"known\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>default</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">seed</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>integer</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>จำเป็น</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>ขั้นต่ำ: -1</div><div>สูงสุด: 4,294,967,295</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"known\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>-1</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">camerafixed</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>boolean</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>จำเป็น</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>เงื่อนไข: Ailoot กำหนดให้ต้องระบุ เอกสารระบุว่าไม่รองรับการควบคุมกล้องด้วยภาพอ้างอิง และไม่รับประกันผล</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"known\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>false</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">watermark</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>boolean</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>จำเป็น</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"known\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>false</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">execution_expires_after</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>integer</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>จำเป็น</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>ขั้นต่ำ: 3,600</div><div>สูงสุด: 259,200</div><div>หน่วย: วินาที</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"known\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>172,800</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">generate_audio</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>boolean</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>ไม่บังคับ</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>เงื่อนไข: เสียงที่ซิงโครไนซ์และฝังอยู่ในวิดีโอที่สร้าง เฉพาะ 1.5</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"known\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>true</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>ชุดผสมของสื่ออินพุต</summary><p class=\"note-s\"><b></b></p><p class=\"note-s\"><b></b></p></details><details class=\"note-s\" data-method-contract><summary>พารามิเตอร์และวงจรการทำงานของเมธอด</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>พารามิเตอร์</th><th>ข้อกำหนด</th></tr></thead><tbody><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>content_type</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>application/json</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>required</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>camerafixed, content, execution_expires_after, model, seed, watermark</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>optional</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>duration, resolution, ratio, service_tier, generate_audio</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>material_types</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>text, image</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>additional_properties</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>true</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>validation_scope</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>Ailoot ตรวจสอบชนิดของฟิลด์ที่จำเป็นและ model/อาร์เรย์ content ที่ไม่ว่าง ฟิลด์อื่นของคำขอจะถูกคงไว้สำหรับโมเดลที่เลือก</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>image_constraints</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>{&quot;formats&quot;:[&quot;jpeg&quot;,&quot;png&quot;,&quot;webp&quot;,&quot;bmp&quot;,&quot;tiff&quot;,&quot;gif&quot;],&quot;aspect_ratio_exclusive&quot;:[0.4,2.5],&quot;dimensions_px_exclusive&quot;:[300,6000],&quot;file_size_mb_exclusive&quot;:30,&quot;mb_bytes_definition&quot;:null}</td></tr></tbody></table></div><p>ชื่ออื่นของเมธอด: <code>/v1/videos/generations</code></p><p>วงจรการทำงาน: <code>submit_once_poll_original</code></p><p class=\"note-s\"><code>GET /v1/videos/{request_id}</code></p><p class=\"note-s\"><code>GET /v1/videos/generations/{request_id}</code></p><p class=\"note-s\"><code>GET /v1/videos/{request_id}/content</code></p><p class=\"note-s\"><code>GET /v1/videos/generations/{request_id}/content</code></p><p class=\"note-s\">สร้างเพียงครั้งเดียวและเก็บ id/polling_url สาธารณะที่ส่งกลับ</p><p class=\"note-s\">ตรวจสอบงานเดิมเป็นระยะ ดาวน์โหลด content.video_url จริงที่เป็นของคุณหลังสถานะ succeeded</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">ราคา</h3><div class=\"card-result-process\" data-billing-basis><h5>วิธีคำนวณค่าบริการสุดท้าย</h5><p class=\"note-s\">อัตราที่แสดงใช้ประมาณการค่าใช้จ่ายก่อนการสร้างผลลัพธ์ ยอดเรียกเก็บสุดท้ายคำนวณจากค่าใช้จ่ายที่บันทึกไว้สำหรับการสร้างผลลัพธ์ครั้งเดิม ระยะเวลาของผลลัพธ์ที่วัดได้และปริมาณที่คาดการณ์ไว้ไม่ใช่ปริมาณสุดท้ายที่ใช้คิดค่าบริการ</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>ข้อมูลอัตราราคาไม่ได้เพิ่มตัวเลือกคำขอ พารามิเตอร์ที่รองรับระบุไว้สำหรับเมธอดที่เลือก</p><dl data-price-conditions><dt>โหมดรวดเร็ว</dt><dd>ไม่ได้ระบุ <span class=\"note-s\">เมื่อเลือกโหมดรวดเร็ว</span></dd><dt>โหมดยืดหยุ่น</dt><dd>ไม่ได้ระบุ <span class=\"note-s\">เมื่อเลือกโหมด flex</span></dd><dt>ระดับการใช้เหตุผลสูงสุด</dt><dd>ไม่ได้ระบุ <span class=\"note-s\">เมื่อใช้การปรับตามค่าเริ่มต้น (default) สำหรับระดับการใช้เหตุผลสูงสุด</span></dd></dl></div><div data-declared-tariff-pricing><h4>อัตราประมาณการเพื่อเปรียบเทียบ</h4><h4>ราคาตามการตั้งค่า</h4><p class=\"note-s\">เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>การตั้งค่า</th><th>ตารางอัตราค่าบริการ</th><th>ปริมาณคาดการณ์</th><th>สร้างเสียง</th><th>ระดับบริการ</th><th>หน่วยคิดค่าบริการ</th><th>ค่าบริการ</th></tr></thead><tbody><tr><th data-cell-label=\"การตั้งค่า\" scope=\"row\"><span class=\"card-cell-label\">การตั้งค่า</span>อัตราค่าบริการโทเคนพื้นฐาน</th><td data-cell-label=\"ตารางอัตราค่าบริการ\"><span class=\"card-cell-label\">ตารางอัตราค่าบริการ</span>อัตราพื้นฐาน</td><td data-cell-label=\"ปริมาณคาดการณ์\"><span class=\"card-cell-label\">ปริมาณคาดการณ์</span>—</td><td data-cell-label=\"สร้างเสียง\"><span class=\"card-cell-label\">สร้างเสียง</span>—</td><td data-cell-label=\"ระดับบริการ\"><span class=\"card-cell-label\">ระดับบริการ</span>—</td><td data-cell-label=\"หน่วยคิดค่าบริการ\"><span class=\"card-cell-label\">หน่วยคิดค่าบริการ</span>—</td><td data-cell-label=\"ค่าบริการ\"><span class=\"card-cell-label\">ค่าบริการ</span><div><span>ขาเข้า · โทเค็นอินพุต · ประมาณการเพื่อเปรียบเทียบเท่านั้น</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาออก · โทเค็นเอาต์พุต · ประมาณการเพื่อเปรียบเทียบเท่านั้น</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การอ่านแคช · ประมาณการเพื่อเปรียบเทียบเท่านั้น</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การเขียนแคช · ประมาณการเพื่อเปรียบเทียบเท่านั้น</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การเขียนแคช, 1 ชั่วโมง · ประมาณการเพื่อเปรียบเทียบเท่านั้น</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div></td></tr><tr><th data-cell-label=\"การตั้งค่า\" scope=\"row\"><span class=\"card-cell-label\">การตั้งค่า</span>ระดับบริการประมวลผลแบบออฟไลน์ (flex). ผลลัพธ์มีเสียงที่ซิงก์กับภาพ.</th><td data-cell-label=\"ตารางอัตราค่าบริการ\"><span class=\"card-cell-label\">ตารางอัตราค่าบริการ</span>—</td><td data-cell-label=\"ปริมาณคาดการณ์\"><span class=\"card-cell-label\">ปริมาณคาดการณ์</span>—</td><td data-cell-label=\"สร้างเสียง\"><span class=\"card-cell-label\">สร้างเสียง</span>มีเสียง</td><td data-cell-label=\"ระดับบริการ\"><span class=\"card-cell-label\">ระดับบริการ</span>flex</td><td data-cell-label=\"หน่วยคิดค่าบริการ\"><span class=\"card-cell-label\">หน่วยคิดค่าบริการ</span>ต่อ 1K โทเค็นวิดีโอ</td><td data-cell-label=\"ค่าบริการ\"><span class=\"card-cell-label\">ค่าบริการ</span><div><span>ขาออก · ประมาณการเพื่อเปรียบเทียบเท่านั้น</span> <b>$0.0024</b> <span class=\"price-unit\">ต่อ 1K โทเค็นวิดีโอ</span></div></td></tr><tr><th data-cell-label=\"การตั้งค่า\" scope=\"row\"><span class=\"card-cell-label\">การตั้งค่า</span>ระดับบริการประมวลผลแบบออฟไลน์ (flex). ผลลัพธ์ไม่มีเสียงที่ซิงก์กับภาพ.</th><td data-cell-label=\"ตารางอัตราค่าบริการ\"><span class=\"card-cell-label\">ตารางอัตราค่าบริการ</span>—</td><td data-cell-label=\"ปริมาณคาดการณ์\"><span class=\"card-cell-label\">ปริมาณคาดการณ์</span>—</td><td data-cell-label=\"สร้างเสียง\"><span class=\"card-cell-label\">สร้างเสียง</span>ไม่มีเสียง</td><td data-cell-label=\"ระดับบริการ\"><span class=\"card-cell-label\">ระดับบริการ</span>flex</td><td data-cell-label=\"หน่วยคิดค่าบริการ\"><span class=\"card-cell-label\">หน่วยคิดค่าบริการ</span>ต่อ 1K โทเค็นวิดีโอ</td><td data-cell-label=\"ค่าบริการ\"><span class=\"card-cell-label\">ค่าบริการ</span><div><span>ขาออก · ประมาณการเพื่อเปรียบเทียบเท่านั้น</span> <b>$0.0012</b> <span class=\"price-unit\">ต่อ 1K โทเค็นวิดีโอ</span></div></td></tr><tr><th data-cell-label=\"การตั้งค่า\" scope=\"row\"><span class=\"card-cell-label\">การตั้งค่า</span>ระดับบริการประมวลผลแบบออนไลน์ (default). ผลลัพธ์มีเสียงที่ซิงก์กับภาพ.</th><td data-cell-label=\"ตารางอัตราค่าบริการ\"><span class=\"card-cell-label\">ตารางอัตราค่าบริการ</span>—</td><td data-cell-label=\"ปริมาณคาดการณ์\"><span class=\"card-cell-label\">ปริมาณคาดการณ์</span>—</td><td data-cell-label=\"สร้างเสียง\"><span class=\"card-cell-label\">สร้างเสียง</span>มีเสียง</td><td data-cell-label=\"ระดับบริการ\"><span class=\"card-cell-label\">ระดับบริการ</span>default</td><td data-cell-label=\"หน่วยคิดค่าบริการ\"><span class=\"card-cell-label\">หน่วยคิดค่าบริการ</span>ต่อ 1K โทเค็นวิดีโอ</td><td data-cell-label=\"ค่าบริการ\"><span class=\"card-cell-label\">ค่าบริการ</span><div><span>ขาออก · ประมาณการเพื่อเปรียบเทียบเท่านั้น</span> <b>$0.0048</b> <span class=\"price-unit\">ต่อ 1K โทเค็นวิดีโอ</span></div></td></tr><tr><th data-cell-label=\"การตั้งค่า\" scope=\"row\"><span class=\"card-cell-label\">การตั้งค่า</span>ระดับบริการประมวลผลแบบออนไลน์ (default). ผลลัพธ์ไม่มีเสียงที่ซิงก์กับภาพ.</th><td data-cell-label=\"ตารางอัตราค่าบริการ\"><span class=\"card-cell-label\">ตารางอัตราค่าบริการ</span>—</td><td data-cell-label=\"ปริมาณคาดการณ์\"><span class=\"card-cell-label\">ปริมาณคาดการณ์</span>—</td><td data-cell-label=\"สร้างเสียง\"><span class=\"card-cell-label\">สร้างเสียง</span>ไม่มีเสียง</td><td data-cell-label=\"ระดับบริการ\"><span class=\"card-cell-label\">ระดับบริการ</span>default</td><td data-cell-label=\"หน่วยคิดค่าบริการ\"><span class=\"card-cell-label\">หน่วยคิดค่าบริการ</span>ต่อ 1K โทเค็นวิดีโอ</td><td data-cell-label=\"ค่าบริการ\"><span class=\"card-cell-label\">ค่าบริการ</span><div><span>ขาออก · ประมาณการเพื่อเปรียบเทียบเท่านั้น</span> <b>$0.0024</b> <span class=\"price-unit\">ต่อ 1K โทเค็นวิดีโอ</span></div></td></tr><tr><th data-cell-label=\"การตั้งค่า\" scope=\"row\"><span class=\"card-cell-label\">การตั้งค่า</span>ต้นทุนการสร้างโดยประมาณ</th><td data-cell-label=\"ตารางอัตราค่าบริการ\"><span class=\"card-cell-label\">ตารางอัตราค่าบริการ</span>—</td><td data-cell-label=\"ปริมาณคาดการณ์\"><span class=\"card-cell-label\">ปริมาณคาดการณ์</span>ค่าประมาณสำหรับการสร้างหนึ่งครั้ง</td><td data-cell-label=\"สร้างเสียง\"><span class=\"card-cell-label\">สร้างเสียง</span>—</td><td data-cell-label=\"ระดับบริการ\"><span class=\"card-cell-label\">ระดับบริการ</span>—</td><td data-cell-label=\"หน่วยคิดค่าบริการ\"><span class=\"card-cell-label\">หน่วยคิดค่าบริการ</span>—</td><td data-cell-label=\"ค่าบริการ\"><span class=\"card-cell-label\">ค่าบริการ</span><div><span>ขาออก · ค่าใช้จ่ายในการสร้างโดยประมาณ · ประมาณการเพื่อเปรียบเทียบเท่านั้น</span> <b>$0.1152</b> <span class=\"price-unit\">ประมาณการก่อนสร้าง</span></div><p class=\"note-s\">ค่าประมาณนี้ไม่ใช่ค่าใช้จ่ายเพิ่มเติมหรืออัตราคงที่สำหรับการสร้างผลลัพธ์ที่เสร็จสมบูรณ์แล้ว</p></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย <a href=\"/docs/th/billing/reserve/\">วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">ตัวอย่างคำขอ</h3><h4>Ailoot Ultra · วิดีโอ</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"ตัวเลือกโค้ด\"><button class=\"cg-tab\" id=\"model-code-2778-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2778-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · สร้างวิดีโอ</button><button class=\"cg-tab\" id=\"model-code-2778-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2778-panel-1\" aria-selected=\"false\" tabindex=\"-1\">curl · อ่านข้อมูลงานต้นฉบับ</button><button class=\"cg-tab\" id=\"model-code-2778-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2778-panel-2\" aria-selected=\"false\" tabindex=\"-1\">curl · ดาวน์โหลดวิดีโอที่เป็นของคุณ</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"คัดลอกโค้ด\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-2778-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2778-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\ncat &gt; request.json &lt;&lt;&#39;JSON_REQUEST&#39;\n{&quot;model&quot;:&quot;doubao-seedance-1-5-pro-251215&quot;,&quot;content&quot;:[{&quot;type&quot;:&quot;text&quot;,&quot;text&quot;:&quot;女孩抱着狐狸，女孩睁开眼，温柔地看向镜头，狐狸友善地抱着，镜头缓缓拉出，女孩的头发被风吹动&quot;}],&quot;resolution&quot;:&quot;480p&quot;,&quot;ratio&quot;:&quot;1:1&quot;,&quot;duration&quot;:5,&quot;service_tier&quot;:&quot;default&quot;,&quot;seed&quot;:-1,&quot;camerafixed&quot;:false,&quot;watermark&quot;:false,&quot;execution_expires_after&quot;:172800,&quot;generate_audio&quot;:false}\nJSON_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2778-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2778-tab-1\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_POLL&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote,urljoin,urlsplit\nr=json.loads(Path(&quot;result.json&quot;).read_text())\ni=r.get(&quot;id&quot;)\nif not isinstance(i,str) or not i.startswith(&quot;native302_&quot;):raise SystemExit(&quot;Keep original response/headers/id; do not resubmit creation.&quot;)\nu=urljoin(&quot;https://api.ailoot.ai&quot;,r.get(&quot;polling_url&quot;) or &quot;/v1/videos/&quot;+quote(i,safe=&quot;&quot;))\np=urlsplit(u)\nif p.scheme!=&quot;https&quot; or p.netloc!=&quot;api.ailoot.ai&quot; or not p.path.startswith(&quot;/v1/videos/&quot;):raise SystemExit(&quot;Use actual Ailoot lookup path.&quot;)\nPath(&quot;poll-url.txt&quot;).write_text(u)\nPY_POLL\ncurl --fail-with-body --silent --show-error &quot;$(cat poll-url.txt)&quot; -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -D status-headers.txt -o status.json\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2778-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-2778-tab-2\" hidden><pre data-lang=\"bash\"><code>set -eu\npython3 - &lt;&lt;&#39;PY_ASSETS&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nr=json.loads(Path(&quot;status.json&quot;).read_text())\nif r.get(&quot;status&quot;)!=&quot;succeeded&quot;:raise SystemExit(&quot;Poll same original job until an owned result is returned.&quot;)\nu=r.get(&quot;content&quot;,{}).get(&quot;video_url&quot;)\nurls=[u] if isinstance(u,str) else u\nif not isinstance(urls,list) or not urls:raise SystemExit(&quot;No completed video URL.&quot;)\nfor u in urls:\n    if not isinstance(u,str):raise SystemExit(&quot;Invalid returned URL.&quot;)\n    p=urlsplit(u)\n    if p.scheme!=&quot;https&quot; or p.netloc!=&quot;api.ailoot.ai&quot; or not p.path.startswith(&quot;/v1/media/assets/&quot;) or not p.path.endswith(&quot;/content&quot;) or not p.query:raise SystemExit(&quot;Wait for actual Ailoot-owned signed result.&quot;)\nPath(&quot;asset-urls.txt&quot;).write_text(&quot;\\n&quot;.join(urls)+&quot;\\n&quot;)\nPY_ASSETS\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error &quot;$asset_url&quot; -o &quot;video-${index}.bin&quot;\n  index=$((index + 1))\ndone &lt; asset-urls.txt\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">รับและบันทึกผลลัพธ์</h3><h4>Ailoot Ultra · วิดีโอ</h4><p class=\"note-s\">JSON ดั้งเดิมพร้อม id/polling_url สาธารณะ หลังเผยแพร่ content.video_url มี URL ที่ลงลายเซ็นและเป็นของ Ailoot ก่อนเผยแพร่ URL ผลลัพธ์ที่เลือกจะถูกทำให้ว่าง</p><ul class=\"card-result-paths\"><li><code>GET /v1/videos/{request_id}</code></li><li><code>GET /v1/videos/generations/{request_id}</code></li><li><code>GET /v1/videos/{request_id}/content</code></li><li><code>GET /v1/videos/generations/{request_id}/content</code></li></ul><div class=\"card-result-process\" data-all-results><h5>เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด</h5><p class=\"note-s\">บันทึกวิดีโอที่สร้างเสร็จหรือไฟล์ที่ส่งกลับมาทุกไฟล์ และดึงไฟล์สื่อจากทุก URL ที่ส่งกลับมาจริง</p><p class=\"note-s\">เก็บ URL จริงทุกรายการใน content.video_url โดย index ต้องระบุผลลัพธ์จริงที่ส่งกลับ</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ</h5><p class=\"note-s\">เก็บการตอบกลับ/ส่วนหัว/id เดิมและตรวจสอบการดำเนินการนั้นเป็นระยะ ห้ามส่งคำขอสร้างที่ยังไม่ทราบผลซ้ำ</p></div><details class=\"card-about\" data-output-fields><summary>ฟิลด์การตอบกลับ</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>ฟิลด์</th><th>ประเภท</th></tr></thead><tbody><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">id</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>string</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">provider_task_id</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>string</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">polling_url</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>string</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">status</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>string when supplied</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">content.video_url</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>string|string[]</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>object when supplied</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>ข้อผิดพลาดและขั้นตอนถัดไป</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>การตอบกลับ</th><th>เงื่อนไข</th><th>ขั้นตอนถัดไป</th></tr></thead><tbody><tr><th data-cell-label=\"การตอบกลับ\" scope=\"row\"><span class=\"card-cell-label\">การตอบกลับ</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"เงื่อนไข\"><span class=\"card-cell-label\">เงื่อนไข</span>JSON/โมเดล/ชนิดฟิลด์ที่จำเป็น หรือดัชนีเนื้อหาไม่ถูกต้อง</td><td data-cell-label=\"ขั้นตอนถัดไป\"><span class=\"card-cell-label\">ขั้นตอนถัดไป</span></td></tr><tr><th data-cell-label=\"การตอบกลับ\" scope=\"row\"><span class=\"card-cell-label\">การตอบกลับ</span>401 · <code>authentication_error</code></th><td data-cell-label=\"เงื่อนไข\"><span class=\"card-cell-label\">เงื่อนไข</span>คีย์ API ของ Ailoot ไม่ถูกต้อง</td><td data-cell-label=\"ขั้นตอนถัดไป\"><span class=\"card-cell-label\">ขั้นตอนถัดไป</span></td></tr><tr><th data-cell-label=\"การตอบกลับ\" scope=\"row\"><span class=\"card-cell-label\">การตอบกลับ</span>404 · <code>not_found_error</code></th><td data-cell-label=\"เงื่อนไข\"><span class=\"card-cell-label\">เงื่อนไข</span>ไม่พบงาน/ผลลัพธ์ หรือไม่ได้เป็นของผู้ใช้/คีย์ API/กลุ่มเดียวกัน</td><td data-cell-label=\"ขั้นตอนถัดไป\"><span class=\"card-cell-label\">ขั้นตอนถัดไป</span></td></tr><tr><th data-cell-label=\"การตอบกลับ\" scope=\"row\"><span class=\"card-cell-label\">การตอบกลับ</span>502 · <code>result_pending_check</code></th><td data-cell-label=\"เงื่อนไข\"><span class=\"card-cell-label\">เงื่อนไข</span>การส่งคำขอ/สถานะเดิมไม่สมบูรณ์ เก็บ ID เดิม ห้ามส่งซ้ำ</td><td data-cell-label=\"ขั้นตอนถัดไป\"><span class=\"card-cell-label\">ขั้นตอนถัดไป</span></td></tr><tr><th data-cell-label=\"การตอบกลับ\" scope=\"row\"><span class=\"card-cell-label\">การตอบกลับ</span>503 · <code>result_pending_check</code></th><td data-cell-label=\"เงื่อนไข\"><span class=\"card-cell-label\">เงื่อนไข</span>กำลังตรวจสอบสื่อ/เส้นทาง/การชำระบัญชีเดิม ให้ดำเนินการเดิมต่อ</td><td data-cell-label=\"ขั้นตอนถัดไป\"><span class=\"card-cell-label\">ขั้นตอนถัดไป</span></td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">ชื่ออื่น</h3><h4>ชื่ออื่นของโมเดล</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=doubao-seedance-1-5-pro-251215&amp;route=Ultra&amp;caller=doubao-seedance-1-5-pro-251215&amp;fmt=videos\"><code>doubao-seedance-1-5-pro-251215</code></a></span></p><h4>ชื่อพาธเมธอดอื่น</h4><p class=\"note-s\"><code>/v1/videos/generations</code></p><h4>ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล</h4><p class=\"note-s\"><a href=\"#m=doubao-seedance-1-5-pro-251215&amp;route=Ultra&amp;caller=doubao-seedance-1-5-pro-251215&amp;fmt=videos\"><code>doubao-seedance-1-5-pro-251215</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "doubao-seedance-1-5-pro-251215",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "doubao-seedance-1-5-pro-251215",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|doubao-seedance-1-5-pro-251215",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "อัตราที่แสดงใช้ประมาณการค่าใช้จ่ายก่อนการสร้างผลลัพธ์ ยอดเรียกเก็บสุดท้ายคำนวณจากค่าใช้จ่ายที่บันทึกไว้สำหรับการสร้างผลลัพธ์ครั้งเดิม ระยะเวลาของผลลัพธ์ที่วัดได้และปริมาณที่คาดการณ์ไว้ไม่ใช่ปริมาณสุดท้ายที่ใช้คิดค่าบริการ",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "errors": [
              {
                "condition": "JSON/โมเดล/ชนิดฟิลด์ที่จำเป็น หรือดัชนีเนื้อหาไม่ถูกต้อง",
                "http_status": 400,
                "type": "invalid_request_error"
              },
              {
                "condition": "คีย์ API ของ Ailoot ไม่ถูกต้อง",
                "http_status": 401,
                "type": "authentication_error"
              },
              {
                "condition": "ไม่พบงาน/ผลลัพธ์ หรือไม่ได้เป็นของผู้ใช้/คีย์ API/กลุ่มเดียวกัน",
                "http_status": 404,
                "type": "not_found_error"
              },
              {
                "condition": "การส่งคำขอ/สถานะเดิมไม่สมบูรณ์ เก็บ ID เดิม ห้ามส่งซ้ำ",
                "http_status": 502,
                "type": "result_pending_check"
              },
              {
                "condition": "กำลังตรวจสอบสื่อ/เส้นทาง/การชำระบัญชีเดิม ให้ดำเนินการเดิมต่อ",
                "http_status": 503,
                "type": "result_pending_check"
              }
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "completed_states": [
                "succeeded"
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                }
              ],
              "content_pending": "Original status JSON until publication.",
              "content_ready": {
                "http_status": 303,
                "location": "actual signed Ailoot-owned asset URL"
              },
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "failed_states": [
                "failed",
                "expired"
              ],
              "id_source": "Actual returned id or X-Ailoot-Task-Id; provider_task_id is separate. Use returned polling_url.",
              "mode": "submit_once_poll_original",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "pending_states": [
                "queued",
                "running"
              ],
              "signed_asset_lifetime_seconds": 86400,
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 200,
              "unknown": "เก็บการตอบกลับ/ส่วนหัว/id เดิมและตรวจสอบการดำเนินการนั้นเป็นระยะ ห้ามส่งคำขอสร้างที่ยังไม่ทราบผลซ้ำ",
              "unknown_no_replay": true
            },
            "material_combinations": [
              [
                "text"
              ],
              [
                "text",
                "image"
              ]
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video"
            ],
            "outputs": {
              "additional_media_boundary": "Only content.video_url is selected for ownership. No owned last-frame/callback result flow is established.",
              "all_results": "เก็บ URL จริงทุกรายการใน content.video_url โดย index ต้องระบุผลลัพธ์จริงที่ส่งกลับ",
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "status",
                  "type": "string when supplied"
                },
                {
                  "description": null,
                  "name": "content.video_url",
                  "type": "string|string[]"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object when supplied"
                }
              ],
              "format": null,
              "maximum_outputs": null,
              "ownership": "Configured video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
              "result": "JSON ดั้งเดิมพร้อม id/polling_url สาธารณะ หลังเผยแพร่ content.video_url มี URL ที่ลงลายเซ็นและเป็นของ Ailoot ก่อนเผยแพร่ URL ผลลัพธ์ที่เลือกจะถูกทำให้ว่าง"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "doubao-seedance-1-5-pro-251215"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "ออบเจ็กต์ข้อความ/สื่อในรูปแบบดั้งเดิม อาร์เรย์ชั้นนอกต้องไม่ว่าง ตัวสร้างทั่วไปของ Ailoot นี้ไม่ตรวจสอบชนิดของโหนดที่ซ้อนอยู่",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minItems": 1,
                "name": "content",
                "required": true,
                "type": "array"
              },
              {
                "availability": "source_interface",
                "conditions": "สคีมาหลักของ 1.x ระบุ 2–12 คำอธิบายที่ใช้ร่วมกันในภายหลังระบุ 1.5 เป็น 4–12 หรือ -1 ตัวอย่างใช้ 5 ซึ่งมีระบุสอดคล้องกันในเอกสารทั้งสองส่วน",
                "default": 5,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "duration",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "conditions": "Seedance 1.5 Pro รองรับ 480p และ 720p ไม่รองรับ 1080p ความละเอียดเริ่มต้นตามเอกสารคือ 720p",
                "default": "720p",
                "default_known": true,
                "enum": [
                  "480p",
                  "720p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "อัตราส่วนเริ่มต้นของ Seedance 1.5 Pro ตามเอกสารคือ adaptive ตัวเลือกอัตราส่วนคงที่ยังคงเดิม",
                "default": "adaptive",
                "default_known": true,
                "enum": [
                  "16:9",
                  "4:3",
                  "1:1",
                  "3:4",
                  "9:16",
                  "21:9",
                  "adaptive"
                ],
                "enum_known": true,
                "name": "ratio",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "default=online, flex=offline เลือกก่อนสร้าง",
                "default": "default",
                "default_known": true,
                "enum": [
                  "default",
                  "flex"
                ],
                "enum_known": true,
                "name": "service_tier",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": -1,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "maximum": 4294967295,
                "minimum": -1,
                "name": "seed",
                "required": true,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "conditions": "Ailoot กำหนดให้ต้องระบุ เอกสารระบุว่าไม่รองรับการควบคุมกล้องด้วยภาพอ้างอิง และไม่รับประกันผล",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "camerafixed",
                "required": true,
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "watermark",
                "required": true,
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "default": 172800,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "maximum": 259200,
                "minimum": 3600,
                "name": "execution_expires_after",
                "required": true,
                "type": "integer",
                "unit": "วินาที"
              },
              {
                "availability": "source_interface",
                "conditions": "เสียงที่ซิงโครไนซ์และฝังอยู่ในวิดีโอที่สร้าง เฉพาะ 1.5",
                "default": true,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "generate_audio",
                "required": false,
                "type": "boolean"
              }
            ],
            "profile_binding": "Exact model ID and documented Ailoot video interface.",
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "camerafixed": {
                  "type": "boolean"
                },
                "content": {
                  "items": {
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "duration": {
                  "type": "integer"
                },
                "execution_expires_after": {
                  "maximum": 259200,
                  "minimum": 3600,
                  "type": "integer"
                },
                "generate_audio": {
                  "type": "boolean"
                },
                "model": {
                  "const": "doubao-seedance-1-5-pro-251215",
                  "type": "string"
                },
                "ratio": {
                  "default": "adaptive",
                  "enum": [
                    "16:9",
                    "4:3",
                    "1:1",
                    "3:4",
                    "9:16",
                    "21:9",
                    "adaptive"
                  ],
                  "type": "string"
                },
                "resolution": {
                  "default": "720p",
                  "enum": [
                    "480p",
                    "720p"
                  ],
                  "type": "string"
                },
                "seed": {
                  "maximum": 4294967295,
                  "minimum": -1,
                  "type": "integer"
                },
                "service_tier": {
                  "enum": [
                    "default",
                    "flex"
                  ],
                  "type": "string"
                },
                "watermark": {
                  "type": "boolean"
                }
              },
              "required": [
                "camerafixed",
                "content",
                "execution_expires_after",
                "model",
                "seed",
                "watermark"
              ],
              "type": "object"
            },
            "source_ambiguities": [
              "1.5 bounds conflict: primary 1.x 2–12 versus later model-specific 4–12 or -1. No resolved bound for this persisted1.x path.",
              "Primary content.items.required says type+text even for its image example without text; preserve intended example branches and outer-array validation boundary."
            ],
            "unsupported": [
              "Separate cancel/delete for this generic method",
              "Separate edit/extension endpoint for this method"
            ]
          },
          "hints": [
            "สร้างเพียงครั้งเดียวและเก็บ id/polling_url สาธารณะที่ส่งกลับ",
            "ตรวจสอบงานเดิมเป็นระยะ ดาวน์โหลด content.video_url จริงที่เป็นของคุณหลังสถานะ succeeded"
          ],
          "input": {
            "additional_properties": true,
            "content_type": "application/json",
            "image_constraints": {
              "aspect_ratio_exclusive": [
                0.4,
                2.5
              ],
              "dimensions_px_exclusive": [
                300,
                6000
              ],
              "file_size_mb_exclusive": 30,
              "formats": [
                "jpeg",
                "png",
                "webp",
                "bmp",
                "tiff",
                "gif"
              ],
              "mb_bytes_definition": null
            },
            "material_types": [
              "text",
              "image"
            ],
            "optional": [
              "duration",
              "resolution",
              "ratio",
              "service_tier",
              "generate_audio"
            ],
            "required": [
              "camerafixed",
              "content",
              "execution_expires_after",
              "model",
              "seed",
              "watermark"
            ],
            "validation_scope": "Ailoot ตรวจสอบชนิดของฟิลด์ที่จำเป็นและ model/อาร์เรย์ content ที่ไม่ว่าง ฟิลด์อื่นของคำขอจะถูกคงไว้สำหรับโมเดลที่เลือก"
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "completed_states": [
              "succeeded"
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              }
            ],
            "content_pending": "Original status JSON until publication.",
            "content_ready": {
              "http_status": 303,
              "location": "actual signed Ailoot-owned asset URL"
            },
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "failed_states": [
              "failed",
              "expired"
            ],
            "id_source": "Actual returned id or X-Ailoot-Task-Id; provider_task_id is separate. Use returned polling_url.",
            "mode": "submit_once_poll_original",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "pending_states": [
              "queued",
              "running"
            ],
            "signed_asset_lifetime_seconds": 86400,
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 200,
            "unknown": "Preserve original response/headers/id and poll that operation; never resubmit unknown creation.",
            "unknown_no_replay": true
          },
          "manufacturer_capability": {
            "documented_material_types": [
              "text",
              "image"
            ]
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations"
          ],
          "operation_modes": [
            "text_to_video",
            "image_to_video"
          ],
          "output": {
            "additional_media_boundary": "Only content.video_url is selected for ownership. No owned last-frame/callback result flow is established.",
            "all_results": "Retain every actual URL in content.video_url; index must identify a real returned output.",
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "description": null,
                "name": "id",
                "type": "string"
              },
              {
                "description": null,
                "name": "provider_task_id",
                "type": "string"
              },
              {
                "description": null,
                "name": "polling_url",
                "type": "string"
              },
              {
                "description": null,
                "name": "status",
                "type": "string when supplied"
              },
              {
                "description": null,
                "name": "content.video_url",
                "type": "string|string[]"
              },
              {
                "description": null,
                "name": "usage",
                "type": "object when supplied"
              }
            ],
            "format": null,
            "maximum_outputs": null,
            "ownership": "Configured video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
            "result": "Native JSON with public id/polling_url. After publication content.video_url contains Ailoot-owned signed URL(s); before publication selected output URLs are blanked."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "generate_audio": true,
              "quoted_unit": "per 1,000 video tokens",
              "service_tier": "flex"
            },
            "label": "ระดับบริการประมวลผลแบบออฟไลน์ (flex). ผลลัพธ์มีเสียงที่ซิงก์กับภาพ.",
            "units": [
              {
                "amount": "0.0024000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_flex_with_audio",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.0000024",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "generate_audio": false,
              "quoted_unit": "per 1,000 video tokens",
              "service_tier": "flex"
            },
            "label": "ระดับบริการประมวลผลแบบออฟไลน์ (flex). ผลลัพธ์ไม่มีเสียงที่ซิงก์กับภาพ.",
            "units": [
              {
                "amount": "0.0012000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_flex_without_audio",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.0000012",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "generate_audio": true,
              "quoted_unit": "per 1,000 video tokens",
              "service_tier": "default"
            },
            "label": "ระดับบริการประมวลผลแบบออนไลน์ (default). ผลลัพธ์มีเสียงที่ซิงก์กับภาพ.",
            "units": [
              {
                "amount": "0.0048000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_online_with_audio",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.0000048",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "generate_audio": false,
              "quoted_unit": "per 1,000 video tokens",
              "service_tier": "default"
            },
            "label": "ระดับบริการประมวลผลแบบออนไลน์ (default). ผลลัพธ์ไม่มีเสียงที่ซิงก์กับภาพ.",
            "units": [
              {
                "amount": "0.0024000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_online_without_audio",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.0000024",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "basis": "ค่าประมาณนี้ไม่ใช่ค่าใช้จ่ายเพิ่มเติมหรืออัตราคงที่สำหรับการสร้างผลลัพธ์ที่เสร็จสมบูรณ์แล้ว",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "ต้นทุนการสร้างโดยประมาณ",
            "units": [
              {
                "amount": "0.1152",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1152",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncat > request.json <<'JSON_REQUEST'\n{\"model\":\"doubao-seedance-1-5-pro-251215\",\"content\":[{\"type\":\"text\",\"text\":\"女孩抱着狐狸，女孩睁开眼，温柔地看向镜头，狐狸友善地抱着，镜头缓缓拉出，女孩的头发被风吹动\"}],\"resolution\":\"480p\",\"ratio\":\"1:1\",\"duration\":5,\"service_tier\":\"default\",\"seed\":-1,\"camerafixed\":false,\"watermark\":false,\"execution_expires_after\":172800,\"generate_audio\":false}\nJSON_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_POLL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote,urljoin,urlsplit\nr=json.loads(Path(\"result.json\").read_text())\ni=r.get(\"id\")\nif not isinstance(i,str) or not i.startswith(\"native302_\"):raise SystemExit(\"Keep original response/headers/id; do not resubmit creation.\")\nu=urljoin(\"https://api.ailoot.ai\",r.get(\"polling_url\") or \"/v1/videos/\"+quote(i,safe=\"\"))\np=urlsplit(u)\nif p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/videos/\"):raise SystemExit(\"Use actual Ailoot lookup path.\")\nPath(\"poll-url.txt\").write_text(u)\nPY_POLL\ncurl --fail-with-body --silent --show-error \"$(cat poll-url.txt)\" -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\n",
            "label": "curl · read original task",
            "language": "bash"
          },
          {
            "code": "set -eu\npython3 - <<'PY_ASSETS'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nr=json.loads(Path(\"status.json\").read_text())\nif r.get(\"status\")!=\"succeeded\":raise SystemExit(\"Poll same original job until an owned result is returned.\")\nu=r.get(\"content\",{}).get(\"video_url\")\nurls=[u] if isinstance(u,str) else u\nif not isinstance(urls,list) or not urls:raise SystemExit(\"No completed video URL.\")\nfor u in urls:\n    if not isinstance(u,str):raise SystemExit(\"Invalid returned URL.\")\n    p=urlsplit(u)\n    if p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/media/assets/\") or not p.path.endswith(\"/content\") or not p.query:raise SystemExit(\"Wait for actual Ailoot-owned signed result.\")\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_ASSETS\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" -o \"video-${index}.bin\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "curl · download owned video",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Create once and retain returned public id/polling_url.",
          "Poll the original job; download actual owned content.video_url after succeeded."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image"
        ],
        "label": "วิดีโอ",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/videos/generations"
        ],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "generate_audio": true,
              "quoted_unit": "per 1,000 video tokens",
              "service_tier": "flex"
            },
            "label": "Offline service tier (flex). Output with synchronized audio.",
            "units": [
              {
                "amount": "0.0024000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_flex_with_audio",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.0000024",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "generate_audio": false,
              "quoted_unit": "per 1,000 video tokens",
              "service_tier": "flex"
            },
            "label": "Offline service tier (flex). Output without synchronized audio.",
            "units": [
              {
                "amount": "0.0012000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_flex_without_audio",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.0000012",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "generate_audio": true,
              "quoted_unit": "per 1,000 video tokens",
              "service_tier": "default"
            },
            "label": "Online service tier (default). Output with synchronized audio.",
            "units": [
              {
                "amount": "0.0048000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_online_with_audio",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.0000048",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "generate_audio": false,
              "quoted_unit": "per 1,000 video tokens",
              "service_tier": "default"
            },
            "label": "Online service tier (default). Output without synchronized audio.",
            "units": [
              {
                "amount": "0.0024000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_online_without_audio",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.0000024",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.1152",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1152",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "doubao-seedance-1-5-pro-251215",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}",
          "GET /v1/videos/generations/{request_id}",
          "GET /v1/videos/{request_id}/content",
          "GET /v1/videos/generations/{request_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.0024000",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_output_token_flex_with_audio",
            "label": "per 1,000 video tokens",
            "native_amount_usd_per_unit": "0.0000024",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_output_token"
          },
          {
            "amount": "0.0012000",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_output_token_flex_without_audio",
            "label": "per 1,000 video tokens",
            "native_amount_usd_per_unit": "0.0000012",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_output_token"
          },
          {
            "amount": "0.0048000",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_output_token_online_with_audio",
            "label": "per 1,000 video tokens",
            "native_amount_usd_per_unit": "0.0000048",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_output_token"
          },
          {
            "amount": "0.0024000",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_output_token_online_without_audio",
            "label": "per 1,000 video tokens",
            "native_amount_usd_per_unit": "0.0000024",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_output_token"
          },
          {
            "amount": "0.1152",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.1152",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    }
  ],
  "model_id": "doubao-seedance-1-5-pro-251215",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "b1862a419fb745310fda63fe6105c3add4e3572ff85ccc36b73194e4fafa92b3",
    "input_html_sha256": "c01c2cffee33e161f0dc023d715576159d23cf7fd20efa482f914419c0246df6",
    "private_audit_sha256": "ffbd4f73ee217ad545f1c9408668c1a664ae0cec9f73c90ef9b947b0d0291882",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/th/doubao-seedance-1-5-pro-251215/",
    "description": "Seedance 1.5 Pro สร้างวิดีโอจากข้อความหรือภาพ และสร้างเสียงพูด เอฟเฟกต์เสียง และดนตรีประกอบที่สัมพันธ์กับภาพได้ เปิดหรือปิดเสียงได้ โดยโปรไฟล์ตามเอกสารมีฉากยาว 4–12 วินาที การจัดเฟรมแบบ adaptive และการประมวลผลแบบออนไลน์หรือ flex",
    "locale": "th",
    "md_url": "https://ailoot.ai/models/th/doubao-seedance-1-5-pro-251215/index.md",
    "title": "ByteDance: Seedance 1.5 Pro — Ailoot",
    "url": "https://ailoot.ai/models/th/doubao-seedance-1-5-pro-251215/"
  },
  "rawModel": {
    "about": "Seedance 1.5 Pro สร้างวิดีโอจากข้อความหรือภาพ และสร้างเสียงไปพร้อมกับภาพได้ ตัวเลือกตรงตามชื่อคือ doubao-seedance-1-5-pro-251215 ตัวควบคุมเสียงแยกโปรไฟล์นี้จาก Seedance 1.0 ที่ไม่มีเสียง: generate_audio=true ขอเสียงที่สัมพันธ์กับภาพ ส่วน false ขอวิดีโอไม่มีเสียง ใช้คำบรรยายฉากสำหรับแนวคิดใหม่ หรือใช้ภาพกำหนดตัวแบบและองค์ประกอบภาพเปิด\n\nบรรยายการกระทำที่เห็นและเสียงเป็นส่วนของฉากเดียวกัน ระบุตัวแบบ สถานที่ การเคลื่อนไหว และกล้อง แล้วอธิบายเสียงพูด เอฟเฟกต์เสียง หรือดนตรีประกอบที่ต้องการ ฉากบุคคลอาจแสดงคนลืมตาขณะกล้องค่อย ๆ ถอยออก โดยมีเสียงลมรอบตัว สำหรับฉากผลิตภัณฑ์ ให้เชื่อมเสียงเข้ากับเหตุการณ์ที่เห็น เช่น ฝาเปิดหรือวัตถุสัมผัสพื้นผิว แทนการเพิ่มรายการเอฟเฟกต์ที่ไม่เกี่ยวกัน\n\nโมเดลสร้างเสียงพูด เอฟเฟกต์เสียง และดนตรีประกอบจากพรอมป์ต์และเนื้อหาภาพได้ คู่มือแนะนำให้ใส่บทพูดไว้ในเครื่องหมายอัญประกาศคู่ ให้บทพูดสั้นพอสำหรับการกระทำและช่วงหยุดที่ร้องขอ และแยกผู้พูดเมื่อมีตัวละครมากกว่าหนึ่งคน ตรวจถ้อยคำจริง การระบุว่าเสียงเป็นของใคร และความสัมพันธ์กับภาพ คำสั่งเสียงใช้กำกับการแสดงที่สร้างขึ้น ไม่ใช่อินพุตเสียงอ้างอิงที่อัปโหลดแยกในคำขอที่เอกสารของโปรไฟล์นี้ระบุ\n\nภาพเป็นวิดีโอใช้รายการ image_url ควบคู่กับข้อความ ส่ง URL ภาพที่เข้าถึงได้หรือ Base64 data URL ในรูปแบบ JPEG, PNG, WEBP, BMP, TIFF หรือ GIF ข้อจำกัดภาพตามเอกสารคือเล็กกว่า 30 MB ทั้งสองด้านมากกว่า 300 และน้อยกว่า 6000 พิกเซล และอัตราส่วนความกว้างต่อความสูงมากกว่า 0.4 และน้อยกว่า 2.5 เตรียมการครอปและตัวแบบที่ต้องการให้ชัดเจน แล้วบรรยายการเคลื่อนไหวจากองค์ประกอบภาพนั้น ตัวอย่างภาพใช้อัตราส่วน adaptive เพื่อให้สอดคล้องกับภาพอ้างอิง\n\nคู่มือความยาวเฉพาะโปรไฟล์ระบุจำนวนวินาทีเต็มตั้งแต่สี่ถึงสิบสอง หรือ -1 เพื่อให้โมเดลเลือกความยาวภายในช่วงนั้น ค่าเริ่มต้นคือห้าวินาที Seedance 1.5 Pro มีค่าเริ่มต้น 720p และตารางโปรไฟล์ที่เก็บไว้ระบุ 480p กับ 720p คู่มือการใช้งานเฉพาะนี้ไม่ได้เสนอ 1080p สำหรับ 1.5 Pro ตัวเลือกอัตราส่วนคงที่ ได้แก่ 16:9, 4:3, 1:1, 3:4, 9:16 และ 21:9 โดย adaptive เป็นค่าเริ่มต้นของ 1.5 ตามเอกสาร ตรวจความยาวและสัดส่วนคลิปจริง แทนการถือว่าค่าที่ร้องขอเป็นชิ้นงานที่ได้รับแล้ว\n\nคำขอมีระดับการประมวลผลสองแบบ service_tier=default เลือกการประมวลผลออนไลน์ ส่วน flex เลือกแบบออฟไลน์สำหรับงานที่รอได้นานกว่า ไม่สามารถเปลี่ยนระดับหลังส่งงาน เลือกตามความต้องการด้านเวลาของขั้นตอนงาน และเก็บค่าที่เลือกไว้ในบันทึกคำขอ โหมดเสียงกับระดับการประมวลผลเป็นคนละตัวเลือก: คลิปไม่มีเสียงไม่ได้เป็นงานออฟไลน์โดยอัตโนมัติ และการเปิดเสียงไม่ได้เลือกระดับการประมวลผลให้\n\nให้คำสั่งซีด ลายน้ำ และกล้องสอดคล้องกับฉาก คำสั่งพารามิเตอร์ที่ฝังในข้อความมีลำดับความสำคัญสูงกว่าพารามิเตอร์เสริมที่แยกไว้ ตัวควบคุมตรึงกล้องไม่รองรับกรณีใช้ภาพอ้างอิง และในกรณีที่ใช้ได้ก็ไม่รับประกันว่าจะล็อกภาพนิ่ง สำหรับงานเคลื่อนไหวที่ใช้ภาพนำ ให้บรรยายการเคลื่อนไหวที่ต้องการโดยตรง แทนการสมมติว่าตัวควบคุมกล้องทำให้ไม่ต้องอธิบายช็อต\n\nปริมาณการใช้งานวัดเป็นโทเคนวิดีโอ: ความกว้างผลลัพธ์ × ความสูงผลลัพธ์ × อัตราเฟรม × ความยาวผลลัพธ์ / 1024 งานที่เสร็จแล้วรายงานปริมาณนี้ใน usage.completion_tokens เก็บปริมาณที่รายงานไว้พร้อมคลิปสำเร็จและการตั้งค่าที่ร้องขอ การเปิดหรือปิดเสียง และการประมวลผลออนไลน์หรือ flex ยังคงเป็นหมวดแยกกันในการคิดค่าบริการตามการใช้งาน\n\nเมื่อส่งคำขอจะได้รหัสงานแบบอะซิงโครนัส ติดตามงานจนเสร็จแล้วบันทึกวิดีโอที่ content.video_url ให้มา ระยะเวลาเก็บไฟล์ที่สร้างตามเอกสารคือเจ็ดวัน ตัวควบคุมหมดอายุเริ่มนับจากเวลาสร้าง มีค่าเริ่มต้น 172800 วินาทีและรับค่าตั้งแต่ 3600 ถึง 259200 วินาที งานที่ยังไม่เสร็จจะมีสถานะ expired หลังครบช่วงเวลาที่ตั้งไว้ เก็บคลิปสุดท้าย ภาพต้นฉบับ และบรีฟภาพพร้อมเสียงตรงตามที่ใช้ไว้ด้วยกัน แล้วตรวจผลลัพธ์ทั้งหมดในด้านการกระทำ อัตลักษณ์ ความต่อเนื่องของกล้อง และความตรงกันของเสียงกับภาพ",
    "alias_of": null,
    "aliases": [],
    "author": "ByteDance",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "image"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.1152",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.1152",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ],
        "summary": "ดูราคาตามการกำหนดค่าแบบครบถ้วนในรายละเอียด"
      }
    ],
    "ctx": null,
    "display_name": "ByteDance: Seedance 1.5 Pro",
    "formats": [
      "videos"
    ],
    "id": "doubao-seedance-1-5-pro-251215",
    "input": [
      "text",
      "image"
    ],
    "kind": "video",
    "locale": "en",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "อัตราที่แสดงใช้ประมาณการค่าใช้จ่ายก่อนการสร้างผลลัพธ์ ยอดเรียกเก็บสุดท้ายคำนวณจากค่าใช้จ่ายที่บันทึกไว้สำหรับการสร้างผลลัพธ์ครั้งเดิม ระยะเวลาของผลลัพธ์ที่วัดได้และปริมาณที่คาดการณ์ไว้ไม่ใช่ปริมาณสุดท้ายที่ใช้คิดค่าบริการ",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "errors": [
              {
                "condition": "JSON/โมเดล/ชนิดฟิลด์ที่จำเป็น หรือดัชนีเนื้อหาไม่ถูกต้อง",
                "http_status": 400,
                "type": "invalid_request_error"
              },
              {
                "condition": "คีย์ API ของ Ailoot ไม่ถูกต้อง",
                "http_status": 401,
                "type": "authentication_error"
              },
              {
                "condition": "ไม่พบงาน/ผลลัพธ์ หรือไม่ได้เป็นของผู้ใช้/คีย์ API/กลุ่มเดียวกัน",
                "http_status": 404,
                "type": "not_found_error"
              },
              {
                "condition": "การส่งคำขอ/สถานะเดิมไม่สมบูรณ์ เก็บ ID เดิม ห้ามส่งซ้ำ",
                "http_status": 502,
                "type": "result_pending_check"
              },
              {
                "condition": "กำลังตรวจสอบสื่อ/เส้นทาง/การชำระบัญชีเดิม ให้ดำเนินการเดิมต่อ",
                "http_status": 503,
                "type": "result_pending_check"
              }
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "completed_states": [
                "succeeded"
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}/content",
                  "query": {
                    "index": "actual output index; default 0"
                  }
                }
              ],
              "content_pending": "Original status JSON until publication.",
              "content_ready": {
                "http_status": 303,
                "location": "actual signed Ailoot-owned asset URL"
              },
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "failed_states": [
                "failed",
                "expired"
              ],
              "id_source": "Actual returned id or X-Ailoot-Task-Id; provider_task_id is separate. Use returned polling_url.",
              "mode": "submit_once_poll_original",
              "owned_result": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              },
              "pending_states": [
                "queued",
                "running"
              ],
              "signed_asset_lifetime_seconds": 86400,
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}"
                },
                {
                  "http": "GET",
                  "path": "/v1/videos/generations/{request_id}"
                }
              ],
              "submit_status": 200,
              "unknown": "เก็บการตอบกลับ/ส่วนหัว/id เดิมและตรวจสอบการดำเนินการนั้นเป็นระยะ ห้ามส่งคำขอสร้างที่ยังไม่ทราบผลซ้ำ",
              "unknown_no_replay": true
            },
            "material_combinations": [
              [
                "text"
              ],
              [
                "text",
                "image"
              ]
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video"
            ],
            "outputs": {
              "additional_media_boundary": "Only content.video_url is selected for ownership. No owned last-frame/callback result flow is established.",
              "all_results": "เก็บ URL จริงทุกรายการใน content.video_url โดย index ต้องระบุผลลัพธ์จริงที่ส่งกลับ",
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "provider_task_id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "polling_url",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "status",
                  "type": "string when supplied"
                },
                {
                  "description": null,
                  "name": "content.video_url",
                  "type": "string|string[]"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object when supplied"
                }
              ],
              "format": null,
              "maximum_outputs": null,
              "ownership": "Configured video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
              "result": "JSON ดั้งเดิมพร้อม id/polling_url สาธารณะ หลังเผยแพร่ content.video_url มี URL ที่ลงลายเซ็นและเป็นของ Ailoot ก่อนเผยแพร่ URL ผลลัพธ์ที่เลือกจะถูกทำให้ว่าง"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "doubao-seedance-1-5-pro-251215"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "ออบเจ็กต์ข้อความ/สื่อในรูปแบบดั้งเดิม อาร์เรย์ชั้นนอกต้องไม่ว่าง ตัวสร้างทั่วไปของ Ailoot นี้ไม่ตรวจสอบชนิดของโหนดที่ซ้อนอยู่",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minItems": 1,
                "name": "content",
                "required": true,
                "type": "array"
              },
              {
                "availability": "source_interface",
                "conditions": "สคีมาหลักของ 1.x ระบุ 2–12 คำอธิบายที่ใช้ร่วมกันในภายหลังระบุ 1.5 เป็น 4–12 หรือ -1 ตัวอย่างใช้ 5 ซึ่งมีระบุสอดคล้องกันในเอกสารทั้งสองส่วน",
                "default": 5,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "duration",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "conditions": "Seedance 1.5 Pro รองรับ 480p และ 720p ไม่รองรับ 1080p ความละเอียดเริ่มต้นตามเอกสารคือ 720p",
                "default": "720p",
                "default_known": true,
                "enum": [
                  "480p",
                  "720p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "อัตราส่วนเริ่มต้นของ Seedance 1.5 Pro ตามเอกสารคือ adaptive ตัวเลือกอัตราส่วนคงที่ยังคงเดิม",
                "default": "adaptive",
                "default_known": true,
                "enum": [
                  "16:9",
                  "4:3",
                  "1:1",
                  "3:4",
                  "9:16",
                  "21:9",
                  "adaptive"
                ],
                "enum_known": true,
                "name": "ratio",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "default=online, flex=offline เลือกก่อนสร้าง",
                "default": "default",
                "default_known": true,
                "enum": [
                  "default",
                  "flex"
                ],
                "enum_known": true,
                "name": "service_tier",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": -1,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "maximum": 4294967295,
                "minimum": -1,
                "name": "seed",
                "required": true,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "conditions": "Ailoot กำหนดให้ต้องระบุ เอกสารระบุว่าไม่รองรับการควบคุมกล้องด้วยภาพอ้างอิง และไม่รับประกันผล",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "camerafixed",
                "required": true,
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "watermark",
                "required": true,
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "default": 172800,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "maximum": 259200,
                "minimum": 3600,
                "name": "execution_expires_after",
                "required": true,
                "type": "integer",
                "unit": "วินาที"
              },
              {
                "availability": "source_interface",
                "conditions": "เสียงที่ซิงโครไนซ์และฝังอยู่ในวิดีโอที่สร้าง เฉพาะ 1.5",
                "default": true,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "generate_audio",
                "required": false,
                "type": "boolean"
              }
            ],
            "profile_binding": "Exact model ID and documented Ailoot video interface.",
            "request_schema": {
              "additionalProperties": true,
              "properties": {
                "camerafixed": {
                  "type": "boolean"
                },
                "content": {
                  "items": {
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "duration": {
                  "type": "integer"
                },
                "execution_expires_after": {
                  "maximum": 259200,
                  "minimum": 3600,
                  "type": "integer"
                },
                "generate_audio": {
                  "type": "boolean"
                },
                "model": {
                  "const": "doubao-seedance-1-5-pro-251215",
                  "type": "string"
                },
                "ratio": {
                  "default": "adaptive",
                  "enum": [
                    "16:9",
                    "4:3",
                    "1:1",
                    "3:4",
                    "9:16",
                    "21:9",
                    "adaptive"
                  ],
                  "type": "string"
                },
                "resolution": {
                  "default": "720p",
                  "enum": [
                    "480p",
                    "720p"
                  ],
                  "type": "string"
                },
                "seed": {
                  "maximum": 4294967295,
                  "minimum": -1,
                  "type": "integer"
                },
                "service_tier": {
                  "enum": [
                    "default",
                    "flex"
                  ],
                  "type": "string"
                },
                "watermark": {
                  "type": "boolean"
                }
              },
              "required": [
                "camerafixed",
                "content",
                "execution_expires_after",
                "model",
                "seed",
                "watermark"
              ],
              "type": "object"
            },
            "source_ambiguities": [
              "1.5 bounds conflict: primary 1.x 2–12 versus later model-specific 4–12 or -1. No resolved bound for this persisted1.x path.",
              "Primary content.items.required says type+text even for its image example without text; preserve intended example branches and outer-array validation boundary."
            ],
            "unsupported": [
              "Separate cancel/delete for this generic method",
              "Separate edit/extension endpoint for this method"
            ]
          },
          "hints": [
            "สร้างเพียงครั้งเดียวและเก็บ id/polling_url สาธารณะที่ส่งกลับ",
            "ตรวจสอบงานเดิมเป็นระยะ ดาวน์โหลด content.video_url จริงที่เป็นของคุณหลังสถานะ succeeded"
          ],
          "input": {
            "additional_properties": true,
            "content_type": "application/json",
            "image_constraints": {
              "aspect_ratio_exclusive": [
                0.4,
                2.5
              ],
              "dimensions_px_exclusive": [
                300,
                6000
              ],
              "file_size_mb_exclusive": 30,
              "formats": [
                "jpeg",
                "png",
                "webp",
                "bmp",
                "tiff",
                "gif"
              ],
              "mb_bytes_definition": null
            },
            "material_types": [
              "text",
              "image"
            ],
            "optional": [
              "duration",
              "resolution",
              "ratio",
              "service_tier",
              "generate_audio"
            ],
            "required": [
              "camerafixed",
              "content",
              "execution_expires_after",
              "model",
              "seed",
              "watermark"
            ],
            "validation_scope": "Ailoot ตรวจสอบชนิดของฟิลด์ที่จำเป็นและ model/อาร์เรย์ content ที่ไม่ว่าง ฟิลด์อื่นของคำขอจะถูกคงไว้สำหรับโมเดลที่เลือก"
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "completed_states": [
              "succeeded"
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}/content",
                "query": {
                  "index": "actual output index; default 0"
                }
              }
            ],
            "content_pending": "Original status JSON until publication.",
            "content_ready": {
              "http_status": 303,
              "location": "actual signed Ailoot-owned asset URL"
            },
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "failed_states": [
              "failed",
              "expired"
            ],
            "id_source": "Actual returned id or X-Ailoot-Task-Id; provider_task_id is separate. Use returned polling_url.",
            "mode": "submit_once_poll_original",
            "owned_result": {
              "http": "GET",
              "path": "/v1/media/assets/{asset_id}"
            },
            "pending_states": [
              "queued",
              "running"
            ],
            "signed_asset_lifetime_seconds": 86400,
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}"
              },
              {
                "http": "GET",
                "path": "/v1/videos/generations/{request_id}"
              }
            ],
            "submit_status": 200,
            "unknown": "Preserve original response/headers/id and poll that operation; never resubmit unknown creation.",
            "unknown_no_replay": true
          },
          "manufacturer_capability": {
            "documented_material_types": [
              "text",
              "image"
            ]
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [
            "/v1/videos/generations"
          ],
          "operation_modes": [
            "text_to_video",
            "image_to_video"
          ],
          "output": {
            "additional_media_boundary": "Only content.video_url is selected for ownership. No owned last-frame/callback result flow is established.",
            "all_results": "Retain every actual URL in content.video_url; index must identify a real returned output.",
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "description": null,
                "name": "id",
                "type": "string"
              },
              {
                "description": null,
                "name": "provider_task_id",
                "type": "string"
              },
              {
                "description": null,
                "name": "polling_url",
                "type": "string"
              },
              {
                "description": null,
                "name": "status",
                "type": "string when supplied"
              },
              {
                "description": null,
                "name": "content.video_url",
                "type": "string|string[]"
              },
              {
                "description": null,
                "name": "usage",
                "type": "object when supplied"
              }
            ],
            "format": null,
            "maximum_outputs": null,
            "ownership": "Configured video outputs are copied, reopened and SHA256/length/positive-duration checked before publication.",
            "result": "Native JSON with public id/polling_url. After publication content.video_url contains Ailoot-owned signed URL(s); before publication selected output URLs are blanked."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "generate_audio": true,
              "quoted_unit": "per 1,000 video tokens",
              "service_tier": "flex"
            },
            "label": "ระดับบริการประมวลผลแบบออฟไลน์ (flex). ผลลัพธ์มีเสียงที่ซิงก์กับภาพ.",
            "units": [
              {
                "amount": "0.0024000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_flex_with_audio",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.0000024",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "generate_audio": false,
              "quoted_unit": "per 1,000 video tokens",
              "service_tier": "flex"
            },
            "label": "ระดับบริการประมวลผลแบบออฟไลน์ (flex). ผลลัพธ์ไม่มีเสียงที่ซิงก์กับภาพ.",
            "units": [
              {
                "amount": "0.0012000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_flex_without_audio",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.0000012",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "generate_audio": true,
              "quoted_unit": "per 1,000 video tokens",
              "service_tier": "default"
            },
            "label": "ระดับบริการประมวลผลแบบออนไลน์ (default). ผลลัพธ์มีเสียงที่ซิงก์กับภาพ.",
            "units": [
              {
                "amount": "0.0048000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_online_with_audio",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.0000048",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "generate_audio": false,
              "quoted_unit": "per 1,000 video tokens",
              "service_tier": "default"
            },
            "label": "ระดับบริการประมวลผลแบบออนไลน์ (default). ผลลัพธ์ไม่มีเสียงที่ซิงก์กับภาพ.",
            "units": [
              {
                "amount": "0.0024000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_online_without_audio",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.0000024",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "basis": "ค่าประมาณนี้ไม่ใช่ค่าใช้จ่ายเพิ่มเติมหรืออัตราคงที่สำหรับการสร้างผลลัพธ์ที่เสร็จสมบูรณ์แล้ว",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "ต้นทุนการสร้างโดยประมาณ",
            "units": [
              {
                "amount": "0.1152",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1152",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\ncat > request.json <<'JSON_REQUEST'\n{\"model\":\"doubao-seedance-1-5-pro-251215\",\"content\":[{\"type\":\"text\",\"text\":\"女孩抱着狐狸，女孩睁开眼，温柔地看向镜头，狐狸友善地抱着，镜头缓缓拉出，女孩的头发被风吹动\"}],\"resolution\":\"480p\",\"ratio\":\"1:1\",\"duration\":5,\"service_tier\":\"default\",\"seed\":-1,\"camerafixed\":false,\"watermark\":false,\"execution_expires_after\":172800,\"generate_audio\":false}\nJSON_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_POLL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote,urljoin,urlsplit\nr=json.loads(Path(\"result.json\").read_text())\ni=r.get(\"id\")\nif not isinstance(i,str) or not i.startswith(\"native302_\"):raise SystemExit(\"Keep original response/headers/id; do not resubmit creation.\")\nu=urljoin(\"https://api.ailoot.ai\",r.get(\"polling_url\") or \"/v1/videos/\"+quote(i,safe=\"\"))\np=urlsplit(u)\nif p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/videos/\"):raise SystemExit(\"Use actual Ailoot lookup path.\")\nPath(\"poll-url.txt\").write_text(u)\nPY_POLL\ncurl --fail-with-body --silent --show-error \"$(cat poll-url.txt)\" -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\n",
            "label": "curl · read original task",
            "language": "bash"
          },
          {
            "code": "set -eu\npython3 - <<'PY_ASSETS'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import urlsplit\nr=json.loads(Path(\"status.json\").read_text())\nif r.get(\"status\")!=\"succeeded\":raise SystemExit(\"Poll same original job until an owned result is returned.\")\nu=r.get(\"content\",{}).get(\"video_url\")\nurls=[u] if isinstance(u,str) else u\nif not isinstance(urls,list) or not urls:raise SystemExit(\"No completed video URL.\")\nfor u in urls:\n    if not isinstance(u,str):raise SystemExit(\"Invalid returned URL.\")\n    p=urlsplit(u)\n    if p.scheme!=\"https\" or p.netloc!=\"api.ailoot.ai\" or not p.path.startswith(\"/v1/media/assets/\") or not p.path.endswith(\"/content\") or not p.query:raise SystemExit(\"Wait for actual Ailoot-owned signed result.\")\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_ASSETS\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" -o \"video-${index}.bin\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "curl · download owned video",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Create once and retain returned public id/polling_url.",
          "Poll the original job; download actual owned content.video_url after succeeded."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image"
        ],
        "label": "วิดีโอ",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [
          "/v1/videos/generations"
        ],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "generate_audio": true,
              "quoted_unit": "per 1,000 video tokens",
              "service_tier": "flex"
            },
            "label": "Offline service tier (flex). Output with synchronized audio.",
            "units": [
              {
                "amount": "0.0024000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_flex_with_audio",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.0000024",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "generate_audio": false,
              "quoted_unit": "per 1,000 video tokens",
              "service_tier": "flex"
            },
            "label": "Offline service tier (flex). Output without synchronized audio.",
            "units": [
              {
                "amount": "0.0012000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_flex_without_audio",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.0000012",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "generate_audio": true,
              "quoted_unit": "per 1,000 video tokens",
              "service_tier": "default"
            },
            "label": "Online service tier (default). Output with synchronized audio.",
            "units": [
              {
                "amount": "0.0048000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_online_with_audio",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.0000048",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "generate_audio": false,
              "quoted_unit": "per 1,000 video tokens",
              "service_tier": "default"
            },
            "label": "Online service tier (default). Output without synchronized audio.",
            "units": [
              {
                "amount": "0.0024000",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_output_token_online_without_audio",
                "label": "per 1,000 video tokens",
                "native_amount_usd_per_unit": "0.0000024",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_output_token"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.1152",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.1152",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "doubao-seedance-1-5-pro-251215",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}",
          "GET /v1/videos/generations/{request_id}",
          "GET /v1/videos/{request_id}/content",
          "GET /v1/videos/generations/{request_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.0024000",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_output_token_flex_with_audio",
            "label": "per 1,000 video tokens",
            "native_amount_usd_per_unit": "0.0000024",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_output_token"
          },
          {
            "amount": "0.0012000",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_output_token_flex_without_audio",
            "label": "per 1,000 video tokens",
            "native_amount_usd_per_unit": "0.0000012",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_output_token"
          },
          {
            "amount": "0.0048000",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_output_token_online_with_audio",
            "label": "per 1,000 video tokens",
            "native_amount_usd_per_unit": "0.0000048",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_output_token"
          },
          {
            "amount": "0.0024000",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_output_token_online_without_audio",
            "label": "per 1,000 video tokens",
            "native_amount_usd_per_unit": "0.0000024",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_output_token"
          },
          {
            "amount": "0.1152",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.1152",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "doubao-seedance-1-5-pro-251215",
        "request_model_id": "doubao-seedance-1-5-pro-251215",
        "route_label": "Ultra"
      }
    ],
    "name": "ByteDance: Seedance 1.5 Pro",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.1152,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.1152,
      "varies": false
    },
    "short": "Seedance 1.5 Pro สร้างวิดีโอจากข้อความหรือภาพ และสร้างเสียงพูด เอฟเฟกต์เสียง และดนตรีประกอบที่สัมพันธ์กับภาพได้ เปิดหรือปิดเสียงได้ โดยโปรไฟล์ตามเอกสารมีฉากยาว 4–12 วินาที การจัดเฟรมแบบ adaptive และการประมวลผลแบบออนไลน์หรือ flex"
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Seedance 1.5 Pro สร้างวิดีโอจากข้อความหรือภาพ และสร้างเสียงพูด เอฟเฟกต์เสียง และดนตรีประกอบที่สัมพันธ์กับภาพได้ เปิดหรือปิดเสียงได้ โดยโปรไฟล์ตามเอกสารมีฉากยาว 4–12 วินาที การจัดเฟรมแบบ adaptive และการประมวลผลแบบออนไลน์หรือ flex",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "a38210ce1576ba4d36eb42cb75a4f87fb6db1783e4564bfa827de7ea38955f0c",
    "renderer_sha256": "890edb706fafafdd4f598bb324acf65fada58918b0911b97eb80e68be2ef65d9"
  },
  "sourceRevision": "75122b5752256def0d890a3225cab75adb3f057ab70a6e081bf15838b50971ce"
}
