{
  "aboutHtml": "<p>FLUX Video Edit [fast] เป็นเวิร์กโฟลว์ของ Black Forest Labs ที่ใช้พรอมป์ต์แก้วิดีโอเดิม รับคลิปต้นฉบับหนึ่งคลิปกับคำอธิบายการแก้ แล้วคืน MP4 ที่แก้แล้ว ต้นฉบับกำหนดโครงช็อตเริ่มต้น ทั้งความยาว กรอบภาพ การเคลื่อนกล้อง และจังหวะ ใช้พรอมป์ต์ระบุสิ่งที่จะต่างออกไป แทนบรรยายฉากใหม่ทั้งหมดจนไม่ชัดว่าจะเปลี่ยนอะไร</p><h4>ระบุการเปลี่ยนและตำแหน่ง</h4><p>การแก้ที่ระบุรวมการลบ เพิ่ม หรือแทนวัตถุและตัวละคร สร้างสถานที่ใหม่ เปลี่ยนสไตล์ ข้อความที่มองเห็น บทสนทนา หรือเสียง เริ่มจากเป้าหมายและการกระทำ เช่น ลบกระเป๋าบนเก้าอี้โดยคงคนนั่งและห้อง หรือเปลี่ยนแก้วธรรมดาเป็นแก้วเคลือบสีน้ำเงินโดยไม่เปลี่ยนการเคลื่อนไหวของมือ หากมีวัตถุคล้ายกันหลายชิ้น ให้แยกเป้าหมายด้วยตำแหน่ง รูปลักษณ์ หรือบทบาท</p><p>สำหรับการเพิ่ม ระบุตำแหน่ง ขนาด และการกระทำที่เกี่ยวข้อง โคมไฟแดงสูงข้างโซฟาเฉพาะเจาะจงกว่าโคมเพิ่มเติมที่ไม่บอกว่าอยู่ไหน สำหรับการแทนที่ ระบุว่าอะไรเปลี่ยนเป็นอะไร และการเคลื่อนไหวหรือการสัมผัสที่ต้องคงไว้ คู่มือแนะนำคำสั่งสั้นที่สุดที่ระบุการเปลี่ยนครบ แล้วเพิ่มรายละเอียดตามจำเป็น รักษาคุณสมบัติต้นฉบับโดยตั้งใจ แทนขอปรับปรุงทั่วไปที่ประเมินขอบเขตไม่ได้</p><h4>สถานที่ สไตล์ และแอนิเมชันร่าง</h4><p>การเปลี่ยนสถานที่สร้างสภาพแวดล้อมที่เห็นใหม่โดยคงการกระทำได้ ผู้ผลิตสาธิตเปลี่ยนพื้นผิวปีนเป็นโครงสร้างอื่นพร้อมระบุจุดสัมผัสใหม่ เพื่อให้มือและเท้าตัวละครยังสัมพันธ์กับพื้นผิวอย่างมีความหมาย ในฉากใช้งานจริง ให้บรรยายสถานที่ที่เปลี่ยนและเรขาคณิตที่การเคลื่อนไหวเดิมอาศัย พื้นหลังใหม่ประเมินง่ายเมื่อการกระทำเดิมมีความสัมพันธ์ชัดเจน</p><p>คู่มือยังสาธิตแปลงแอนิเมชันร่างเป็นภาพสมบูรณ์ ระบุว่าวัตถุบล็อกเอาต์ใดกลายเป็นรถหรืออุปกรณ์ที่ต้องการ แล้วรักษาเส้นทาง ความเร็ว และความสัมพันธ์กับกล้อง สำหรับเปลี่ยนสไตล์ให้บอกวัสดุ พื้นผิว แสง และแสงสะท้อน รวมแนวสุนทรียะ ฉากคล้ายดินเหนียวกับฉากเหมือนภาพถ่ายต้องใช้ลักษณะภาพต่างกันแม้ทำการกระทำเดียวกัน</p><p>การแก้ถัดไปใช้ผลครั้งแรกเป็นต้นฉบับใหม่ได้ เก็บต้นฉบับและแต่ละขั้นที่เลือก พร้อมให้รอบถัดไปมีจุดประสงค์เดียวชัดเจน ตัวอย่างที่ระบุพัฒนาจากพรีวิวร่างสู่สถานที่สมบูรณ์ แล้วปรับแสงอีกแบบ หลังแต่ละรอบเทียบกับแหล่งก่อนหน้าและตรวจว่าสิ่งที่ตั้งใจรักษายังอยู่</p><h4>บทสนทนาต้องพอดีกับเวลาเดิม</h4><p>เวิร์กโฟลว์คงเสียงต้นฉบับ เว้นแต่คำสั่งขอเปลี่ยนบทสนทนาหรือเสียง ต้นฉบับเงียบให้ผลเงียบ จึงไม่มีคำพูดเดิมให้แก้ สำหรับการแก้บทสนทนา ให้ใส่ประโยคใหม่ในเครื่องหมายคำพูด ระบุผู้พูด และทำให้ถ้อยคำพอดีกับช่วงพูดเดิม คู่มือรายงานว่าประโยคแทนที่ยาวกว่าถูกตัดเมื่อเกินเวลา การเขียนคำเพิ่มไม่ทำให้เวลาพูดในช็อตเพิ่ม</p><p>ตรวจประโยคที่ได้ยินร่วมกับการแสดงที่เห็น เก็บข้อความเดิมกับประโยคแทนที่ เพื่อระบุคำหาย จังหวะผิด หรือการเปลี่ยนเสียงที่ไม่ต้องการ ผลที่ใช้ได้คือช่วงพูดที่แก้ในฉาก ไม่ใช่ถือว่าข้อความตรงเพียงเพราะเรนเดอร์เสร็จ</p><h4>ขีดจำกัดต้นฉบับและเอาต์พุตที่สืบทอด</h4><p>โปรไฟล์ผู้ผลิตต้องมีวิดีโอกับพรอมป์ต์แก้ไข คำสั่งยาวหนึ่งถึง 4,096 อักขระหลังตัดช่องว่างหัวท้าย คลิปส่งด้วย URL หรือ MP4 ที่เข้ารหัส ความยาวสูงสุดสิบห้าวินาที และอินพุตไม่เกินห้าสิบ MiB แต่ละด้านอย่างน้อย 160 พิกเซล คลิปหลังปรับมาตรฐานต้องมีอย่างน้อยสิบเจ็ดเฟรมที่ 24 fps หรือประมาณเจ็ดในสิบวินาที ต้นฉบับยาวเกินจะถูกปฏิเสธแทนตัดเงียบ ๆ ส่วนเล็กเกินอาจล้มเหลวระหว่างประมวลผล</p><p>โฟลว์ที่ระบุประมวลผล 24 fps ตามความยาวและอัตราส่วนต้นฉบับ อินพุตสูงกว่าโปรไฟล์ 720p ถูกย่อ ผู้ผลิตยกตัวอย่าง 1920×1088 คืนเป็น 1248×704 ความยาว ความละเอียด และอัตราส่วนไม่ใช่ค่าตั้งเอาต์พุตอิสระในโปรไฟล์นี้ สูตร sampling จัดการภายใน และสัญญาคำขอที่ระบุไม่รับฟิลด์อย่าง mode, version, seed หรือ generate_audio</p><p>การใช้วิดีโอเพียงเป็นแรงบันดาลใจด้านการเคลื่อนไหวหรือสไตล์เพื่อช็อตใหม่เป็นคนละเวิร์กโฟลว์ ตัวแก้นี้ไม่รับภาพอ้างอิง เสียงอย่างเดียว มาสก์ หรือคำขอต่อคลิป เตรียมวิดีโอจริงที่จะเปลี่ยนและคงระยะเวลาที่เลือกก่อนเขียนคำสั่ง หลังประมวลผลแบบอะซิงโครนัส ผู้ผลิตคืน MP4 ที่แก้ผ่านลิงก์ลงนามชั่วคราว ใช้ได้ประมาณหนึ่งชั่วโมง บันทึกผลและเทียบวัตถุที่เปลี่ยน เฟรมรอบข้าง จังหวะ และเสียงกับต้นฉบับก่อนใช้ในงานตัดต่อยาว</p>",
  "aboutText": "FLUX Video Edit [fast] เป็นเวิร์กโฟลว์ของ Black Forest Labs ที่ใช้พรอมป์ต์แก้วิดีโอเดิม รับคลิปต้นฉบับหนึ่งคลิปกับคำอธิบายการแก้ แล้วคืน MP4 ที่แก้แล้ว ต้นฉบับกำหนดโครงช็อตเริ่มต้น ทั้งความยาว กรอบภาพ การเคลื่อนกล้อง และจังหวะ ใช้พรอมป์ต์ระบุสิ่งที่จะต่างออกไป แทนบรรยายฉากใหม่ทั้งหมดจนไม่ชัดว่าจะเปลี่ยนอะไร\n\n### ระบุการเปลี่ยนและตำแหน่ง\n\nการแก้ที่ระบุรวมการลบ เพิ่ม หรือแทนวัตถุและตัวละคร สร้างสถานที่ใหม่ เปลี่ยนสไตล์ ข้อความที่มองเห็น บทสนทนา หรือเสียง เริ่มจากเป้าหมายและการกระทำ เช่น ลบกระเป๋าบนเก้าอี้โดยคงคนนั่งและห้อง หรือเปลี่ยนแก้วธรรมดาเป็นแก้วเคลือบสีน้ำเงินโดยไม่เปลี่ยนการเคลื่อนไหวของมือ หากมีวัตถุคล้ายกันหลายชิ้น ให้แยกเป้าหมายด้วยตำแหน่ง รูปลักษณ์ หรือบทบาท\n\nสำหรับการเพิ่ม ระบุตำแหน่ง ขนาด และการกระทำที่เกี่ยวข้อง โคมไฟแดงสูงข้างโซฟาเฉพาะเจาะจงกว่าโคมเพิ่มเติมที่ไม่บอกว่าอยู่ไหน สำหรับการแทนที่ ระบุว่าอะไรเปลี่ยนเป็นอะไร และการเคลื่อนไหวหรือการสัมผัสที่ต้องคงไว้ คู่มือแนะนำคำสั่งสั้นที่สุดที่ระบุการเปลี่ยนครบ แล้วเพิ่มรายละเอียดตามจำเป็น รักษาคุณสมบัติต้นฉบับโดยตั้งใจ แทนขอปรับปรุงทั่วไปที่ประเมินขอบเขตไม่ได้\n\n### สถานที่ สไตล์ และแอนิเมชันร่าง\n\nการเปลี่ยนสถานที่สร้างสภาพแวดล้อมที่เห็นใหม่โดยคงการกระทำได้ ผู้ผลิตสาธิตเปลี่ยนพื้นผิวปีนเป็นโครงสร้างอื่นพร้อมระบุจุดสัมผัสใหม่ เพื่อให้มือและเท้าตัวละครยังสัมพันธ์กับพื้นผิวอย่างมีความหมาย ในฉากใช้งานจริง ให้บรรยายสถานที่ที่เปลี่ยนและเรขาคณิตที่การเคลื่อนไหวเดิมอาศัย พื้นหลังใหม่ประเมินง่ายเมื่อการกระทำเดิมมีความสัมพันธ์ชัดเจน\n\nคู่มือยังสาธิตแปลงแอนิเมชันร่างเป็นภาพสมบูรณ์ ระบุว่าวัตถุบล็อกเอาต์ใดกลายเป็นรถหรืออุปกรณ์ที่ต้องการ แล้วรักษาเส้นทาง ความเร็ว และความสัมพันธ์กับกล้อง สำหรับเปลี่ยนสไตล์ให้บอกวัสดุ พื้นผิว แสง และแสงสะท้อน รวมแนวสุนทรียะ ฉากคล้ายดินเหนียวกับฉากเหมือนภาพถ่ายต้องใช้ลักษณะภาพต่างกันแม้ทำการกระทำเดียวกัน\n\nการแก้ถัดไปใช้ผลครั้งแรกเป็นต้นฉบับใหม่ได้ เก็บต้นฉบับและแต่ละขั้นที่เลือก พร้อมให้รอบถัดไปมีจุดประสงค์เดียวชัดเจน ตัวอย่างที่ระบุพัฒนาจากพรีวิวร่างสู่สถานที่สมบูรณ์ แล้วปรับแสงอีกแบบ หลังแต่ละรอบเทียบกับแหล่งก่อนหน้าและตรวจว่าสิ่งที่ตั้งใจรักษายังอยู่\n\n### บทสนทนาต้องพอดีกับเวลาเดิม\n\nเวิร์กโฟลว์คงเสียงต้นฉบับ เว้นแต่คำสั่งขอเปลี่ยนบทสนทนาหรือเสียง ต้นฉบับเงียบให้ผลเงียบ จึงไม่มีคำพูดเดิมให้แก้ สำหรับการแก้บทสนทนา ให้ใส่ประโยคใหม่ในเครื่องหมายคำพูด ระบุผู้พูด และทำให้ถ้อยคำพอดีกับช่วงพูดเดิม คู่มือรายงานว่าประโยคแทนที่ยาวกว่าถูกตัดเมื่อเกินเวลา การเขียนคำเพิ่มไม่ทำให้เวลาพูดในช็อตเพิ่ม\n\nตรวจประโยคที่ได้ยินร่วมกับการแสดงที่เห็น เก็บข้อความเดิมกับประโยคแทนที่ เพื่อระบุคำหาย จังหวะผิด หรือการเปลี่ยนเสียงที่ไม่ต้องการ ผลที่ใช้ได้คือช่วงพูดที่แก้ในฉาก ไม่ใช่ถือว่าข้อความตรงเพียงเพราะเรนเดอร์เสร็จ\n\n### ขีดจำกัดต้นฉบับและเอาต์พุตที่สืบทอด\n\nโปรไฟล์ผู้ผลิตต้องมีวิดีโอกับพรอมป์ต์แก้ไข คำสั่งยาวหนึ่งถึง 4,096 อักขระหลังตัดช่องว่างหัวท้าย คลิปส่งด้วย URL หรือ MP4 ที่เข้ารหัส ความยาวสูงสุดสิบห้าวินาที และอินพุตไม่เกินห้าสิบ MiB แต่ละด้านอย่างน้อย 160 พิกเซล คลิปหลังปรับมาตรฐานต้องมีอย่างน้อยสิบเจ็ดเฟรมที่ 24 fps หรือประมาณเจ็ดในสิบวินาที ต้นฉบับยาวเกินจะถูกปฏิเสธแทนตัดเงียบ ๆ ส่วนเล็กเกินอาจล้มเหลวระหว่างประมวลผล\n\nโฟลว์ที่ระบุประมวลผล 24 fps ตามความยาวและอัตราส่วนต้นฉบับ อินพุตสูงกว่าโปรไฟล์ 720p ถูกย่อ ผู้ผลิตยกตัวอย่าง 1920×1088 คืนเป็น 1248×704 ความยาว ความละเอียด และอัตราส่วนไม่ใช่ค่าตั้งเอาต์พุตอิสระในโปรไฟล์นี้ สูตร sampling จัดการภายใน และสัญญาคำขอที่ระบุไม่รับฟิลด์อย่าง mode, version, seed หรือ generate_audio\n\nการใช้วิดีโอเพียงเป็นแรงบันดาลใจด้านการเคลื่อนไหวหรือสไตล์เพื่อช็อตใหม่เป็นคนละเวิร์กโฟลว์ ตัวแก้นี้ไม่รับภาพอ้างอิง เสียงอย่างเดียว มาสก์ หรือคำขอต่อคลิป เตรียมวิดีโอจริงที่จะเปลี่ยนและคงระยะเวลาที่เลือกก่อนเขียนคำสั่ง หลังประมวลผลแบบอะซิงโครนัส ผู้ผลิตคืน MP4 ที่แก้ผ่านลิงก์ลงนามชั่วคราว ใช้ได้ประมาณหนึ่งชั่วโมง บันทึกผลและเทียบวัตถุที่เปลี่ยน เฟรมรอบข้าง จังหวะ และเสียงกับต้นฉบับก่อนใช้ในงานตัดต่อยาว",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "e655249d70e8f839c724a5f314b0ff4ad7145dc6a1d5cfd84a383975531af1d4",
    "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\">Black Forest Labs: FLUX Video Edit</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"ปิด\">×</button></div><div class=\"idline\"><span>Black Forest Labs /</span><code>black-forest-labs/flux-video-edit</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|black-forest-labs%2Fflux-video-edit\">วิดีโอ</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\">FLUX Video Edit [fast] เปลี่ยนคลิปเดิมด้วยคำสั่งแก้ไขเป็นข้อความ เพิ่ม ลบ หรือแทนองค์ประกอบ เปลี่ยนสถานที่หรือสไตล์ และแก้บทสนทนาเดิม ภายในข้อจำกัดความยาวต้นฉบับ กรอบภาพ และเสียงที่ระบุ</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>FLUX Video Edit [fast] เป็นเวิร์กโฟลว์ของ Black Forest Labs ที่ใช้พรอมป์ต์แก้วิดีโอเดิม รับคลิปต้นฉบับหนึ่งคลิปกับคำอธิบายการแก้ แล้วคืน MP4 ที่แก้แล้ว ต้นฉบับกำหนดโครงช็อตเริ่มต้น ทั้งความยาว กรอบภาพ การเคลื่อนกล้อง และจังหวะ ใช้พรอมป์ต์ระบุสิ่งที่จะต่างออกไป แทนบรรยายฉากใหม่ทั้งหมดจนไม่ชัดว่าจะเปลี่ยนอะไร</p><h4>ระบุการเปลี่ยนและตำแหน่ง</h4><p>การแก้ที่ระบุรวมการลบ เพิ่ม หรือแทนวัตถุและตัวละคร สร้างสถานที่ใหม่ เปลี่ยนสไตล์ ข้อความที่มองเห็น บทสนทนา หรือเสียง เริ่มจากเป้าหมายและการกระทำ เช่น ลบกระเป๋าบนเก้าอี้โดยคงคนนั่งและห้อง หรือเปลี่ยนแก้วธรรมดาเป็นแก้วเคลือบสีน้ำเงินโดยไม่เปลี่ยนการเคลื่อนไหวของมือ หากมีวัตถุคล้ายกันหลายชิ้น ให้แยกเป้าหมายด้วยตำแหน่ง รูปลักษณ์ หรือบทบาท</p><p>สำหรับการเพิ่ม ระบุตำแหน่ง ขนาด และการกระทำที่เกี่ยวข้อง โคมไฟแดงสูงข้างโซฟาเฉพาะเจาะจงกว่าโคมเพิ่มเติมที่ไม่บอกว่าอยู่ไหน สำหรับการแทนที่ ระบุว่าอะไรเปลี่ยนเป็นอะไร และการเคลื่อนไหวหรือการสัมผัสที่ต้องคงไว้ คู่มือแนะนำคำสั่งสั้นที่สุดที่ระบุการเปลี่ยนครบ แล้วเพิ่มรายละเอียดตามจำเป็น รักษาคุณสมบัติต้นฉบับโดยตั้งใจ แทนขอปรับปรุงทั่วไปที่ประเมินขอบเขตไม่ได้</p><h4>สถานที่ สไตล์ และแอนิเมชันร่าง</h4><p>การเปลี่ยนสถานที่สร้างสภาพแวดล้อมที่เห็นใหม่โดยคงการกระทำได้ ผู้ผลิตสาธิตเปลี่ยนพื้นผิวปีนเป็นโครงสร้างอื่นพร้อมระบุจุดสัมผัสใหม่ เพื่อให้มือและเท้าตัวละครยังสัมพันธ์กับพื้นผิวอย่างมีความหมาย ในฉากใช้งานจริง ให้บรรยายสถานที่ที่เปลี่ยนและเรขาคณิตที่การเคลื่อนไหวเดิมอาศัย พื้นหลังใหม่ประเมินง่ายเมื่อการกระทำเดิมมีความสัมพันธ์ชัดเจน</p><p>คู่มือยังสาธิตแปลงแอนิเมชันร่างเป็นภาพสมบูรณ์ ระบุว่าวัตถุบล็อกเอาต์ใดกลายเป็นรถหรืออุปกรณ์ที่ต้องการ แล้วรักษาเส้นทาง ความเร็ว และความสัมพันธ์กับกล้อง สำหรับเปลี่ยนสไตล์ให้บอกวัสดุ พื้นผิว แสง และแสงสะท้อน รวมแนวสุนทรียะ ฉากคล้ายดินเหนียวกับฉากเหมือนภาพถ่ายต้องใช้ลักษณะภาพต่างกันแม้ทำการกระทำเดียวกัน</p><p>การแก้ถัดไปใช้ผลครั้งแรกเป็นต้นฉบับใหม่ได้ เก็บต้นฉบับและแต่ละขั้นที่เลือก พร้อมให้รอบถัดไปมีจุดประสงค์เดียวชัดเจน ตัวอย่างที่ระบุพัฒนาจากพรีวิวร่างสู่สถานที่สมบูรณ์ แล้วปรับแสงอีกแบบ หลังแต่ละรอบเทียบกับแหล่งก่อนหน้าและตรวจว่าสิ่งที่ตั้งใจรักษายังอยู่</p><h4>บทสนทนาต้องพอดีกับเวลาเดิม</h4><p>เวิร์กโฟลว์คงเสียงต้นฉบับ เว้นแต่คำสั่งขอเปลี่ยนบทสนทนาหรือเสียง ต้นฉบับเงียบให้ผลเงียบ จึงไม่มีคำพูดเดิมให้แก้ สำหรับการแก้บทสนทนา ให้ใส่ประโยคใหม่ในเครื่องหมายคำพูด ระบุผู้พูด และทำให้ถ้อยคำพอดีกับช่วงพูดเดิม คู่มือรายงานว่าประโยคแทนที่ยาวกว่าถูกตัดเมื่อเกินเวลา การเขียนคำเพิ่มไม่ทำให้เวลาพูดในช็อตเพิ่ม</p><p>ตรวจประโยคที่ได้ยินร่วมกับการแสดงที่เห็น เก็บข้อความเดิมกับประโยคแทนที่ เพื่อระบุคำหาย จังหวะผิด หรือการเปลี่ยนเสียงที่ไม่ต้องการ ผลที่ใช้ได้คือช่วงพูดที่แก้ในฉาก ไม่ใช่ถือว่าข้อความตรงเพียงเพราะเรนเดอร์เสร็จ</p><h4>ขีดจำกัดต้นฉบับและเอาต์พุตที่สืบทอด</h4><p>โปรไฟล์ผู้ผลิตต้องมีวิดีโอกับพรอมป์ต์แก้ไข คำสั่งยาวหนึ่งถึง 4,096 อักขระหลังตัดช่องว่างหัวท้าย คลิปส่งด้วย URL หรือ MP4 ที่เข้ารหัส ความยาวสูงสุดสิบห้าวินาที และอินพุตไม่เกินห้าสิบ MiB แต่ละด้านอย่างน้อย 160 พิกเซล คลิปหลังปรับมาตรฐานต้องมีอย่างน้อยสิบเจ็ดเฟรมที่ 24 fps หรือประมาณเจ็ดในสิบวินาที ต้นฉบับยาวเกินจะถูกปฏิเสธแทนตัดเงียบ ๆ ส่วนเล็กเกินอาจล้มเหลวระหว่างประมวลผล</p><p>โฟลว์ที่ระบุประมวลผล 24 fps ตามความยาวและอัตราส่วนต้นฉบับ อินพุตสูงกว่าโปรไฟล์ 720p ถูกย่อ ผู้ผลิตยกตัวอย่าง 1920×1088 คืนเป็น 1248×704 ความยาว ความละเอียด และอัตราส่วนไม่ใช่ค่าตั้งเอาต์พุตอิสระในโปรไฟล์นี้ สูตร sampling จัดการภายใน และสัญญาคำขอที่ระบุไม่รับฟิลด์อย่าง mode, version, seed หรือ generate_audio</p><p>การใช้วิดีโอเพียงเป็นแรงบันดาลใจด้านการเคลื่อนไหวหรือสไตล์เพื่อช็อตใหม่เป็นคนละเวิร์กโฟลว์ ตัวแก้นี้ไม่รับภาพอ้างอิง เสียงอย่างเดียว มาสก์ หรือคำขอต่อคลิป เตรียมวิดีโอจริงที่จะเปลี่ยนและคงระยะเวลาที่เลือกก่อนเขียนคำสั่ง หลังประมวลผลแบบอะซิงโครนัส ผู้ผลิตคืน MP4 ที่แก้ผ่านลิงก์ลงนามชั่วคราว ใช้ได้ประมาณหนึ่งชั่วโมง บันทึกผลและเทียบวัตถุที่เปลี่ยน เฟรมรอบข้าง จังหวะ และเสียงกับต้นฉบับก่อนใช้ในงานตัดต่อยาว</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>, <code>audio</code>, <code>video</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><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>black-forest-labs/flux-video-edit</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">input_references</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>จำนวนรายการขั้นต่ำ: 1</div><div>จำนวนรายการสูงสุด: 1</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">prompt</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>ความยาวขั้นต่ำ: 1</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr></tbody></table></div><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>model, input_references, prompt</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, audio, video</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>material_conditions</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>ใช้ URL เนื้อหาแอสเซ็ตวิดีโอจริงที่เสร็จสมบูรณ์และเป็นของคุณเพียงหนึ่งรายการ พร้อมลายเซ็นที่ส่งกลับ เจ้าของแอสเซ็ต ชนิด และหลักฐานไบต์ที่จัดเก็บต้องตรงกับคำขอ</td></tr></tbody></table></div><p>วงจรการทำงาน: <code>asynchronous_job_then_owned_outputs</code></p><p class=\"note-s\"><code>GET /v1/videos/{request_id}</code> · id หรือ polling_url จริงที่ส่งกลับ</p><p class=\"note-s\"><code>GET /v1/videos/{request_id}/content</code></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></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><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>ราคาวิดีโอ</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><div><span>ขาออก · ราคาวิดีโอ · ประมาณการเพื่อเปรียบเทียบเท่านั้น</span> <b>$0.06</b> <span class=\"price-unit\">ต่อวินาทีของวิดีโอ</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><div><span>ขาออก · ค่าใช้จ่ายในการสร้างโดยประมาณ · ประมาณการเพื่อเปรียบเทียบเท่านั้น</span> <b>$0.06</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-1095-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1095-panel-0\" aria-selected=\"true\" tabindex=\"0\">ใช้ข้อมูลเข้าจริงและเก็บผลลัพธ์ไว้ให้ครบถ้วน</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-1095-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1095-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_INPUT_REFERENCES_JSON:?Set the actual documented input value}&quot;\nexport AILOOT_INPUT_REFERENCES_JSON\n: &quot;${AILOOT_PROMPT:?Set the actual documented input value}&quot;\nexport AILOOT_PROMPT\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nrequest={&#39;model&#39;: &#39;black-forest-labs/flux-video-edit&#39;, &#39;input_references&#39;: &#39;${ACTUAL_OWNED_INPUT_REFERENCES}&#39;, &#39;prompt&#39;: &#39;${ACTUAL_EDIT_PROMPT}&#39;}\nrequest[&#39;input_references&#39;]=json.loads(os.environ[&#39;AILOOT_INPUT_REFERENCES_JSON&#39;])\nrequest[&#39;prompt&#39;]=os.environ[&#39;AILOOT_PROMPT&#39;]\nPath(&#39;request.json&#39;).write_text(json.dumps(request,ensure_ascii=False),encoding=&#39;utf-8&#39;)\nPY_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 response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">รับและบันทึกผลลัพธ์</h3><h4>Ailoot Ultra · วิดีโอ</h4><ul class=\"card-result-paths\"><li><code>GET /v1/videos/{request_id}</code></li><li><code>GET /v1/videos/{request_id}/content</code></li></ul><h5>บันทึกไฟล์ที่สร้างเสร็จทั้งหมด</h5><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"ตัวเลือกโค้ด\"><button class=\"cg-tab\" id=\"model-code-1096-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1096-panel-0\" aria-selected=\"true\" tabindex=\"0\">GET · ดึงไฟล์สื่อที่เสร็จสมบูรณ์ทั้งหมด</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-1096-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1096-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}&quot;\nexport AILOOT_STATUS_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nfrom urllib.parse import urlsplit,urljoin\nf=Path(os.environ[&quot;AILOOT_STATUS_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose the actual completed status file&quot;)\nr=json.loads(f.read_text())\nif r.get(&quot;status&quot;)!=&quot;completed&quot; or not isinstance(r.get(&quot;data&quot;),list) or not r[&quot;data&quot;]:raise SystemExit(&quot;Wait for a completed status with asset paths&quot;)\nurls=[]\nfor x in r[&quot;data&quot;]:\n    if not isinstance(x,str) or &quot;\\n&quot; in x or &quot;\\r&quot; in x:raise SystemExit(&quot;Invalid asset path&quot;)\n    u=urljoin(&quot;https://api.ailoot.ai&quot;,x)\n    z=urlsplit(u)\n    if z.scheme!=&quot;https&quot; or z.netloc!=&quot;api.ailoot.ai&quot; or z.username or z.password:raise SystemExit(&quot;Use the actual Ailoot asset paths from status&quot;)\n    urls.append(u)\nPath(&quot;asset-urls.txt&quot;).write_text(&quot;\\n&quot;.join(urls)+&quot;\\n&quot;)\nPY_REQUEST\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error &quot;$asset_url&quot; \\\n    -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o &quot;video-${index}.mp4&quot;\n  index=$((index + 1))\ndone &lt; asset-urls.txt\n</code></pre></div></div></div><div class=\"card-result-process\" data-all-results><h5>เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด</h5><p class=\"note-s\">บันทึกวิดีโอที่สร้างเสร็จหรือไฟล์ที่ส่งกลับมาทุกไฟล์ และดึงไฟล์สื่อจากทุก URL ที่ส่งกลับมาจริง</p><p class=\"note-s\">เก็บการตอบกลับและส่วนหัวให้ครบถ้วน เก็บผลลัพธ์จริงทุกรายการ ตัวระบุที่ส่งกลับมาแต่เดิม และฟิลด์ข้อมูลการใช้งานทั้งหมด กู้คืนการดำเนินการเดิมโดยไม่ส่งคำขอสร้างซ้ำ</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ</h5><p class=\"note-s\">เก็บ X-Client-Request-ID, X-Ailoot-Task-Id และ id/polling_url จริงที่ส่งกลับ ดำเนินงานเดิมต่อ อย่าส่งคำขอสร้างซ้ำ</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></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></td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">data[]</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span></td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">outputs[]</code></th><td data-cell-label=\"ประเภท\" data-field-type><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=black-forest-labs%2Fflux-video-edit&amp;route=Ultra&amp;caller=black-forest-labs%2Fflux-video-edit&amp;fmt=videos\"><code>black-forest-labs/flux-video-edit</code></a></span></p><h4>ชื่อพาธเมธอดอื่น</h4><p class=\"note-s\">ใช้พาธเมธอดที่แสดงด้านบน</p><h4>ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล</h4><p class=\"note-s\"><a href=\"#m=black-forest-labs%2Fflux-video-edit&amp;route=Ultra&amp;caller=black-forest-labs%2Fflux-video-edit&amp;fmt=videos\"><code>black-forest-labs/flux-video-edit</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "black-forest-labs/flux-video-edit",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "black-forest-labs/flux-video-edit",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|black-forest-labs%2Fflux-video-edit",
      "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": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "lifecycle": {
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual zero-based output index from completed manifest"
                  }
                }
              ],
              "creation_id_field": "id",
              "media_library": {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              "mode": "asynchronous_job_then_owned_outputs",
              "operation_id_is_not_task_id": true,
              "output_content_response": "owned MP4 bytes with Range support",
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned id or polling_url",
                  "path": "/v1/videos/{request_id}"
                }
              ],
              "unknown": "เก็บ X-Client-Request-ID, X-Ailoot-Task-Id และ id/polling_url จริงที่ส่งกลับ ดำเนินงานเดิมต่อ อย่าส่งคำขอสร้างซ้ำ"
            },
            "outputs": {
              "all_results": "เก็บการตอบกลับและส่วนหัวให้ครบถ้วน เก็บผลลัพธ์จริงทุกรายการ ตัวระบุที่ส่งกลับมาแต่เดิม และฟิลด์ข้อมูลการใช้งานทั้งหมด กู้คืนการดำเนินการเดิมโดยไม่ส่งคำขอสร้างซ้ำ",
              "family": "video",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": null
                },
                {
                  "description": null,
                  "name": "status",
                  "type": null
                },
                {
                  "description": null,
                  "name": "data[]",
                  "type": null
                },
                {
                  "description": null,
                  "name": "outputs[]",
                  "type": null
                }
              ]
            },
            "parameters": [
              {
                "enum": [
                  "black-forest-labs/flux-video-edit"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "video_url"
                    },
                    "video_url": {
                      "additionalProperties": false,
                      "properties": {
                        "url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "url"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "type",
                    "video_url"
                  ],
                  "type": "object"
                },
                "maximum_items": 1,
                "minimum_items": 1,
                "name": "input_references",
                "required": true,
                "type": "array"
              },
              {
                "max_length": 4096,
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              }
            ],
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "input_references": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "type": {
                        "const": "video_url"
                      },
                      "video_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      }
                    },
                    "required": [
                      "type",
                      "video_url"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "black-forest-labs/flux-video-edit"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "maxLength": 4096,
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input_references",
                "prompt"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input_references": "${ACTUAL_OWNED_INPUT_REFERENCES}",
                "model": "black-forest-labs/flux-video-edit",
                "prompt": "${ACTUAL_EDIT_PROMPT}"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "ใช้ URL เนื้อหาแอสเซ็ตวิดีโอจริงที่เสร็จสมบูรณ์และเป็นของคุณเพียงหนึ่งรายการ พร้อมลายเซ็นที่ส่งกลับ เจ้าของแอสเซ็ต ชนิด และหลักฐานไบต์ที่จัดเก็บต้องตรงกับคำขอ"
            ],
            "material_types": [
              "text",
              "image",
              "audio",
              "video"
            ],
            "required": [
              "model",
              "input_references",
              "prompt"
            ]
          },
          "lifecycle": {
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual zero-based output index from completed manifest"
                }
              }
            ],
            "creation_id_field": "id",
            "media_library": {
              "http": "GET",
              "path": "/v1/media/assets"
            },
            "mode": "asynchronous_job_then_owned_outputs",
            "operation_id_is_not_task_id": true,
            "output_content_response": "owned MP4 bytes with Range support",
            "status": [
              {
                "http": "GET",
                "id_source": "id หรือ polling_url จริงที่ส่งกลับ",
                "path": "/v1/videos/{request_id}"
              }
            ],
            "unknown": "Keep X-Client-Request-ID, X-Ailoot-Task-Id and actual returned id/polling_url. Continue the original job; do not submit creation again."
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "video",
            "fields": [
              {
                "description": null,
                "name": "id",
                "type": null
              },
              {
                "description": null,
                "name": "status",
                "type": null
              },
              {
                "description": null,
                "name": "data[]",
                "type": null
              },
              {
                "description": null,
                "name": "outputs[]",
                "type": null
              }
            ]
          }
        },
        "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": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.06",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_second_output",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.06",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "ค่าประมาณนี้ไม่ใช่ค่าใช้จ่ายเพิ่มเติมหรืออัตราคงที่สำหรับการสร้างผลลัพธ์ที่เสร็จสมบูรณ์แล้ว",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "ต้นทุนการสร้างโดยประมาณ",
            "units": [
              {
                "amount": "0.06",
                "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.06",
                "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}\"\n: \"${AILOOT_INPUT_REFERENCES_JSON:?Set the actual documented input value}\"\nexport AILOOT_INPUT_REFERENCES_JSON\n: \"${AILOOT_PROMPT:?Set the actual documented input value}\"\nexport AILOOT_PROMPT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'black-forest-labs/flux-video-edit', 'input_references': '${ACTUAL_OWNED_INPUT_REFERENCES}', 'prompt': '${ACTUAL_EDIT_PROMPT}'}\nrequest['input_references']=json.loads(os.environ['AILOOT_INPUT_REFERENCES_JSON'])\nrequest['prompt']=os.environ['AILOOT_PROMPT']\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\nPY_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 response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}\"\nexport AILOOT_STATUS_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nfrom urllib.parse import urlsplit,urljoin\nf=Path(os.environ[\"AILOOT_STATUS_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose the actual completed status file\")\nr=json.loads(f.read_text())\nif r.get(\"status\")!=\"completed\" or not isinstance(r.get(\"data\"),list) or not r[\"data\"]:raise SystemExit(\"Wait for a completed status with asset paths\")\nurls=[]\nfor x in r[\"data\"]:\n    if not isinstance(x,str) or \"\\n\" in x or \"\\r\" in x:raise SystemExit(\"Invalid asset path\")\n    u=urljoin(\"https://api.ailoot.ai\",x)\n    z=urlsplit(u)\n    if z.scheme!=\"https\" or z.netloc!=\"api.ailoot.ai\" or z.username or z.password:raise SystemExit(\"Use the actual Ailoot asset paths from status\")\n    urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_REQUEST\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" \\\n    -H \"Authorization: Bearer $AILOOT_API_KEY\" -o \"video-${index}.mp4\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "GET all completed assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image",
          "audio",
          "video"
        ],
        "label": "วิดีโอ",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "videos",
        "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": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.06",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_second_output",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.06",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "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.06",
                "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.06",
                "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": "black-forest-labs/flux-video-edit",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}"
        ],
        "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.06",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "cents_per_second_output",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.06",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.06",
            "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.06",
            "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": "black-forest-labs/flux-video-edit",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "967312d615692b069a5179b0afa9858040e7f92dc15ae92ee31bb762de062f9e",
    "input_html_sha256": "c72a85b47da605d728759959ebd8e434944e863e2da6ddf7c42b6e1de6c89c39",
    "private_audit_sha256": "cd0814ed7e0cdcb4a1dc58b373a64d0e102d140f60c7d9ce790794913bf9da67",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/th/black-forest-labs-flux-video-edit/",
    "description": "FLUX Video Edit [fast] เปลี่ยนคลิปเดิมด้วยคำสั่งแก้ไขเป็นข้อความ เพิ่ม ลบ หรือแทนองค์ประกอบ เปลี่ยนสถานที่หรือสไตล์ และแก้บทสนทนาเดิม ภายในข้อจำกัดความยาวต้นฉบับ กรอบภาพ และเสียงที่ระบุ",
    "locale": "th",
    "md_url": "https://ailoot.ai/models/th/black-forest-labs-flux-video-edit/index.md",
    "title": "Black Forest Labs: FLUX Video Edit — Ailoot",
    "url": "https://ailoot.ai/models/th/black-forest-labs-flux-video-edit/"
  },
  "rawModel": {
    "about": "FLUX Video Edit [fast] เป็นเวิร์กโฟลว์ของ Black Forest Labs ที่ใช้พรอมป์ต์แก้วิดีโอเดิม รับคลิปต้นฉบับหนึ่งคลิปกับคำอธิบายการแก้ แล้วคืน MP4 ที่แก้แล้ว ต้นฉบับกำหนดโครงช็อตเริ่มต้น ทั้งความยาว กรอบภาพ การเคลื่อนกล้อง และจังหวะ ใช้พรอมป์ต์ระบุสิ่งที่จะต่างออกไป แทนบรรยายฉากใหม่ทั้งหมดจนไม่ชัดว่าจะเปลี่ยนอะไร\n\n### ระบุการเปลี่ยนและตำแหน่ง\n\nการแก้ที่ระบุรวมการลบ เพิ่ม หรือแทนวัตถุและตัวละคร สร้างสถานที่ใหม่ เปลี่ยนสไตล์ ข้อความที่มองเห็น บทสนทนา หรือเสียง เริ่มจากเป้าหมายและการกระทำ เช่น ลบกระเป๋าบนเก้าอี้โดยคงคนนั่งและห้อง หรือเปลี่ยนแก้วธรรมดาเป็นแก้วเคลือบสีน้ำเงินโดยไม่เปลี่ยนการเคลื่อนไหวของมือ หากมีวัตถุคล้ายกันหลายชิ้น ให้แยกเป้าหมายด้วยตำแหน่ง รูปลักษณ์ หรือบทบาท\n\nสำหรับการเพิ่ม ระบุตำแหน่ง ขนาด และการกระทำที่เกี่ยวข้อง โคมไฟแดงสูงข้างโซฟาเฉพาะเจาะจงกว่าโคมเพิ่มเติมที่ไม่บอกว่าอยู่ไหน สำหรับการแทนที่ ระบุว่าอะไรเปลี่ยนเป็นอะไร และการเคลื่อนไหวหรือการสัมผัสที่ต้องคงไว้ คู่มือแนะนำคำสั่งสั้นที่สุดที่ระบุการเปลี่ยนครบ แล้วเพิ่มรายละเอียดตามจำเป็น รักษาคุณสมบัติต้นฉบับโดยตั้งใจ แทนขอปรับปรุงทั่วไปที่ประเมินขอบเขตไม่ได้\n\n### สถานที่ สไตล์ และแอนิเมชันร่าง\n\nการเปลี่ยนสถานที่สร้างสภาพแวดล้อมที่เห็นใหม่โดยคงการกระทำได้ ผู้ผลิตสาธิตเปลี่ยนพื้นผิวปีนเป็นโครงสร้างอื่นพร้อมระบุจุดสัมผัสใหม่ เพื่อให้มือและเท้าตัวละครยังสัมพันธ์กับพื้นผิวอย่างมีความหมาย ในฉากใช้งานจริง ให้บรรยายสถานที่ที่เปลี่ยนและเรขาคณิตที่การเคลื่อนไหวเดิมอาศัย พื้นหลังใหม่ประเมินง่ายเมื่อการกระทำเดิมมีความสัมพันธ์ชัดเจน\n\nคู่มือยังสาธิตแปลงแอนิเมชันร่างเป็นภาพสมบูรณ์ ระบุว่าวัตถุบล็อกเอาต์ใดกลายเป็นรถหรืออุปกรณ์ที่ต้องการ แล้วรักษาเส้นทาง ความเร็ว และความสัมพันธ์กับกล้อง สำหรับเปลี่ยนสไตล์ให้บอกวัสดุ พื้นผิว แสง และแสงสะท้อน รวมแนวสุนทรียะ ฉากคล้ายดินเหนียวกับฉากเหมือนภาพถ่ายต้องใช้ลักษณะภาพต่างกันแม้ทำการกระทำเดียวกัน\n\nการแก้ถัดไปใช้ผลครั้งแรกเป็นต้นฉบับใหม่ได้ เก็บต้นฉบับและแต่ละขั้นที่เลือก พร้อมให้รอบถัดไปมีจุดประสงค์เดียวชัดเจน ตัวอย่างที่ระบุพัฒนาจากพรีวิวร่างสู่สถานที่สมบูรณ์ แล้วปรับแสงอีกแบบ หลังแต่ละรอบเทียบกับแหล่งก่อนหน้าและตรวจว่าสิ่งที่ตั้งใจรักษายังอยู่\n\n### บทสนทนาต้องพอดีกับเวลาเดิม\n\nเวิร์กโฟลว์คงเสียงต้นฉบับ เว้นแต่คำสั่งขอเปลี่ยนบทสนทนาหรือเสียง ต้นฉบับเงียบให้ผลเงียบ จึงไม่มีคำพูดเดิมให้แก้ สำหรับการแก้บทสนทนา ให้ใส่ประโยคใหม่ในเครื่องหมายคำพูด ระบุผู้พูด และทำให้ถ้อยคำพอดีกับช่วงพูดเดิม คู่มือรายงานว่าประโยคแทนที่ยาวกว่าถูกตัดเมื่อเกินเวลา การเขียนคำเพิ่มไม่ทำให้เวลาพูดในช็อตเพิ่ม\n\nตรวจประโยคที่ได้ยินร่วมกับการแสดงที่เห็น เก็บข้อความเดิมกับประโยคแทนที่ เพื่อระบุคำหาย จังหวะผิด หรือการเปลี่ยนเสียงที่ไม่ต้องการ ผลที่ใช้ได้คือช่วงพูดที่แก้ในฉาก ไม่ใช่ถือว่าข้อความตรงเพียงเพราะเรนเดอร์เสร็จ\n\n### ขีดจำกัดต้นฉบับและเอาต์พุตที่สืบทอด\n\nโปรไฟล์ผู้ผลิตต้องมีวิดีโอกับพรอมป์ต์แก้ไข คำสั่งยาวหนึ่งถึง 4,096 อักขระหลังตัดช่องว่างหัวท้าย คลิปส่งด้วย URL หรือ MP4 ที่เข้ารหัส ความยาวสูงสุดสิบห้าวินาที และอินพุตไม่เกินห้าสิบ MiB แต่ละด้านอย่างน้อย 160 พิกเซล คลิปหลังปรับมาตรฐานต้องมีอย่างน้อยสิบเจ็ดเฟรมที่ 24 fps หรือประมาณเจ็ดในสิบวินาที ต้นฉบับยาวเกินจะถูกปฏิเสธแทนตัดเงียบ ๆ ส่วนเล็กเกินอาจล้มเหลวระหว่างประมวลผล\n\nโฟลว์ที่ระบุประมวลผล 24 fps ตามความยาวและอัตราส่วนต้นฉบับ อินพุตสูงกว่าโปรไฟล์ 720p ถูกย่อ ผู้ผลิตยกตัวอย่าง 1920×1088 คืนเป็น 1248×704 ความยาว ความละเอียด และอัตราส่วนไม่ใช่ค่าตั้งเอาต์พุตอิสระในโปรไฟล์นี้ สูตร sampling จัดการภายใน และสัญญาคำขอที่ระบุไม่รับฟิลด์อย่าง mode, version, seed หรือ generate_audio\n\nการใช้วิดีโอเพียงเป็นแรงบันดาลใจด้านการเคลื่อนไหวหรือสไตล์เพื่อช็อตใหม่เป็นคนละเวิร์กโฟลว์ ตัวแก้นี้ไม่รับภาพอ้างอิง เสียงอย่างเดียว มาสก์ หรือคำขอต่อคลิป เตรียมวิดีโอจริงที่จะเปลี่ยนและคงระยะเวลาที่เลือกก่อนเขียนคำสั่ง หลังประมวลผลแบบอะซิงโครนัส ผู้ผลิตคืน MP4 ที่แก้ผ่านลิงก์ลงนามชั่วคราว ใช้ได้ประมาณหนึ่งชั่วโมง บันทึกผลและเทียบวัตถุที่เปลี่ยน เฟรมรอบข้าง จังหวะ และเสียงกับต้นฉบับก่อนใช้ในงานตัดต่อยาว",
    "alias_of": null,
    "aliases": [],
    "author": "Black Forest Labs",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "video"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.06",
            "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.06",
            "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,
    "formats": [
      "videos"
    ],
    "id": "black-forest-labs/flux-video-edit",
    "input": [
      "text",
      "image",
      "audio",
      "video"
    ],
    "kind": "video",
    "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": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "lifecycle": {
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{request_id}/content",
                  "query": {
                    "index": "actual zero-based output index from completed manifest"
                  }
                }
              ],
              "creation_id_field": "id",
              "media_library": {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              "mode": "asynchronous_job_then_owned_outputs",
              "operation_id_is_not_task_id": true,
              "output_content_response": "owned MP4 bytes with Range support",
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned id or polling_url",
                  "path": "/v1/videos/{request_id}"
                }
              ],
              "unknown": "เก็บ X-Client-Request-ID, X-Ailoot-Task-Id และ id/polling_url จริงที่ส่งกลับ ดำเนินงานเดิมต่อ อย่าส่งคำขอสร้างซ้ำ"
            },
            "outputs": {
              "all_results": "เก็บการตอบกลับและส่วนหัวให้ครบถ้วน เก็บผลลัพธ์จริงทุกรายการ ตัวระบุที่ส่งกลับมาแต่เดิม และฟิลด์ข้อมูลการใช้งานทั้งหมด กู้คืนการดำเนินการเดิมโดยไม่ส่งคำขอสร้างซ้ำ",
              "family": "video",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": null
                },
                {
                  "description": null,
                  "name": "status",
                  "type": null
                },
                {
                  "description": null,
                  "name": "data[]",
                  "type": null
                },
                {
                  "description": null,
                  "name": "outputs[]",
                  "type": null
                }
              ]
            },
            "parameters": [
              {
                "enum": [
                  "black-forest-labs/flux-video-edit"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "type": {
                      "const": "video_url"
                    },
                    "video_url": {
                      "additionalProperties": false,
                      "properties": {
                        "url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "url"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "type",
                    "video_url"
                  ],
                  "type": "object"
                },
                "maximum_items": 1,
                "minimum_items": 1,
                "name": "input_references",
                "required": true,
                "type": "array"
              },
              {
                "max_length": 4096,
                "min_length": 1,
                "name": "prompt",
                "required": true,
                "type": "string"
              }
            ],
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "input_references": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "type": {
                        "const": "video_url"
                      },
                      "video_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      }
                    },
                    "required": [
                      "type",
                      "video_url"
                    ],
                    "type": "object"
                  },
                  "maxItems": 1,
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "black-forest-labs/flux-video-edit"
                  ],
                  "type": "string"
                },
                "prompt": {
                  "maxLength": 4096,
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input_references",
                "prompt"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input_references": "${ACTUAL_OWNED_INPUT_REFERENCES}",
                "model": "black-forest-labs/flux-video-edit",
                "prompt": "${ACTUAL_EDIT_PROMPT}"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "ใช้ URL เนื้อหาแอสเซ็ตวิดีโอจริงที่เสร็จสมบูรณ์และเป็นของคุณเพียงหนึ่งรายการ พร้อมลายเซ็นที่ส่งกลับ เจ้าของแอสเซ็ต ชนิด และหลักฐานไบต์ที่จัดเก็บต้องตรงกับคำขอ"
            ],
            "material_types": [
              "text",
              "image",
              "audio",
              "video"
            ],
            "required": [
              "model",
              "input_references",
              "prompt"
            ]
          },
          "lifecycle": {
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{request_id}/content",
                "query": {
                  "index": "actual zero-based output index from completed manifest"
                }
              }
            ],
            "creation_id_field": "id",
            "media_library": {
              "http": "GET",
              "path": "/v1/media/assets"
            },
            "mode": "asynchronous_job_then_owned_outputs",
            "operation_id_is_not_task_id": true,
            "output_content_response": "owned MP4 bytes with Range support",
            "status": [
              {
                "http": "GET",
                "id_source": "id หรือ polling_url จริงที่ส่งกลับ",
                "path": "/v1/videos/{request_id}"
              }
            ],
            "unknown": "Keep X-Client-Request-ID, X-Ailoot-Task-Id and actual returned id/polling_url. Continue the original job; do not submit creation again."
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "video",
            "fields": [
              {
                "description": null,
                "name": "id",
                "type": null
              },
              {
                "description": null,
                "name": "status",
                "type": null
              },
              {
                "description": null,
                "name": "data[]",
                "type": null
              },
              {
                "description": null,
                "name": "outputs[]",
                "type": null
              }
            ]
          }
        },
        "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": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.06",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_second_output",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.06",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "basis": "ค่าประมาณนี้ไม่ใช่ค่าใช้จ่ายเพิ่มเติมหรืออัตราคงที่สำหรับการสร้างผลลัพธ์ที่เสร็จสมบูรณ์แล้ว",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "ต้นทุนการสร้างโดยประมาณ",
            "units": [
              {
                "amount": "0.06",
                "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.06",
                "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}\"\n: \"${AILOOT_INPUT_REFERENCES_JSON:?Set the actual documented input value}\"\nexport AILOOT_INPUT_REFERENCES_JSON\n: \"${AILOOT_PROMPT:?Set the actual documented input value}\"\nexport AILOOT_PROMPT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'black-forest-labs/flux-video-edit', 'input_references': '${ACTUAL_OWNED_INPUT_REFERENCES}', 'prompt': '${ACTUAL_EDIT_PROMPT}'}\nrequest['input_references']=json.loads(os.environ['AILOOT_INPUT_REFERENCES_JSON'])\nrequest['prompt']=os.environ['AILOOT_PROMPT']\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\nPY_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 response.bin\n# Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.\n",
            "label": "Use actual input and retain the complete result",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_STATUS_FILE:?Set the actual completed status JSON file}\"\nexport AILOOT_STATUS_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nfrom urllib.parse import urlsplit,urljoin\nf=Path(os.environ[\"AILOOT_STATUS_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose the actual completed status file\")\nr=json.loads(f.read_text())\nif r.get(\"status\")!=\"completed\" or not isinstance(r.get(\"data\"),list) or not r[\"data\"]:raise SystemExit(\"Wait for a completed status with asset paths\")\nurls=[]\nfor x in r[\"data\"]:\n    if not isinstance(x,str) or \"\\n\" in x or \"\\r\" in x:raise SystemExit(\"Invalid asset path\")\n    u=urljoin(\"https://api.ailoot.ai\",x)\n    z=urlsplit(u)\n    if z.scheme!=\"https\" or z.netloc!=\"api.ailoot.ai\" or z.username or z.password:raise SystemExit(\"Use the actual Ailoot asset paths from status\")\n    urls.append(u)\nPath(\"asset-urls.txt\").write_text(\"\\n\".join(urls)+\"\\n\")\nPY_REQUEST\nindex=0\nwhile IFS= read -r asset_url; do\n  curl --fail-with-body --silent --show-error \"$asset_url\" \\\n    -H \"Authorization: Bearer $AILOOT_API_KEY\" -o \"video-${index}.mp4\"\n  index=$((index + 1))\ndone < asset-urls.txt\n",
            "label": "GET all completed assets",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [
          "Use the exact caller model ID and documented input representation.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image",
          "audio",
          "video"
        ],
        "label": "วิดีโอ",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "videos",
        "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": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per video second"
            },
            "label": "Video price",
            "units": [
              {
                "amount": "0.06",
                "amount_unit": "usd_per_video_second",
                "billing_input": false,
                "estimate_only": true,
                "key": "cents_per_second_output",
                "label": "Video price",
                "native_amount_usd_per_unit": "0.06",
                "native_quantity": 1,
                "public_unit_label": "per video second",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_second"
              }
            ]
          },
          {
            "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.06",
                "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.06",
                "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": "black-forest-labs/flux-video-edit",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{request_id}"
        ],
        "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.06",
            "amount_unit": "usd_per_video_second",
            "billing_input": false,
            "estimate_only": true,
            "key": "cents_per_second_output",
            "label": "Video price",
            "native_amount_usd_per_unit": "0.06",
            "native_quantity": 1,
            "public_unit_label": "per video second",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_second"
          },
          {
            "amount": "0.06",
            "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.06",
            "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": "black-forest-labs/flux-video-edit",
        "request_model_id": "black-forest-labs/flux-video-edit",
        "route_label": "Ultra"
      }
    ],
    "name": "Black Forest Labs: FLUX Video Edit",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.06,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.06,
      "varies": false
    },
    "short": "FLUX Video Edit [fast] เปลี่ยนคลิปเดิมด้วยคำสั่งแก้ไขเป็นข้อความ เพิ่ม ลบ หรือแทนองค์ประกอบ เปลี่ยนสถานที่หรือสไตล์ และแก้บทสนทนาเดิม ภายในข้อจำกัดความยาวต้นฉบับ กรอบภาพ และเสียงที่ระบุ"
  },
  "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": "FLUX Video Edit [fast] เปลี่ยนคลิปเดิมด้วยคำสั่งแก้ไขเป็นข้อความ เพิ่ม ลบ หรือแทนองค์ประกอบ เปลี่ยนสถานที่หรือสไตล์ และแก้บทสนทนาเดิม ภายในข้อจำกัดความยาวต้นฉบับ กรอบภาพ และเสียงที่ระบุ",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "a9afeb74fe605d38d703e68b2e0840be1b5469b22c5037790dd01b841d77e0d3",
    "renderer_sha256": "890edb706fafafdd4f598bb324acf65fada58918b0911b97eb80e68be2ef65d9"
  },
  "sourceRevision": "16ec0aa103c4ff302b67adb8a542356f8fae0189752719e9c4ae59daddd2d74c"
}
