{
  "aboutHtml": "<p>Seedance 2.0 Fast ialah edisi berorientasikan kelajuan daripada keluarga Seedance 2.0 ByteDance Seed. Ia menyokong penjanaan bersama video dan audio serta taklimat multimodal yang dibina daripada teks, imej, video dan bunyi. Keupayaan kreatifnya merangkumi adegan baharu berpandukan rujukan, suntingan rakaman sedia ada dan pemanjangan adegan, manakala tahap output yang didokumentasikan ialah 480p dan 720p.</p><h4>Rujukan multimodal: menetapkan peranan bahan</h4><p>Imej boleh membekalkan watak, produk, komposisi atau olahan visual. Video rujukan boleh membekalkan tindakan, gerak kamera atau kesan. Audio rujukan boleh membekalkan timbre suara, melodi muzik atau kandungan dialog. Jelaskan bahagian setiap sumber yang ingin dibawa ke adegan baharu; rujukan lebih berguna apabila mempunyai peranan kreatif tertentu.</p><p>Contohnya: “Gunakan lampu seramik dalam Image 1 sebagai produk. Ikuti orbit kamera perlahan daripada Video 1, tetapi letakkan lampu di sudut membaca yang tenang. Gunakan Audio 1 untuk suasana muzik.” Output yang dimaksudkan ialah adegan baharu yang menggabungkan rupa, gerakan dan arah bunyi terpilih, bukannya peniruan setiap butiran rujukan yang tidak ditentukan skopnya.</p><p>Gabungan yang didokumentasikan merangkumi imej dengan audio, imej dengan video, video dengan audio dan ketiga-tiganya bersama. Teks dengan audio sahaja, serta input audio sahaja, tidak disokong. Model turut menyokong teks-ke-video dan penjanaan berpandukan imej daripada bingkai pertama atau pasangan bingkai pertama dan terakhir. Apabila titik akhir tepat menjadi inti taklimat, gunakan aliran kerja titik akhir khusus; menerangkan imej rujukan sebagai titik akhir dalam prompt omni-reference ialah kawalan tidak langsung.</p><h4>Menyunting video sedia ada</h4><p>Model boleh menambah, membuang atau mengubah unsur, menggantikan subjek serta melukis semula atau membaiki bahagian adegan. Kenal pasti video sumber, objek yang perlu diubah dan unsur yang patut kekal. Untuk penambahan, terangkan tempat dan masa kemunculannya. Untuk pembuangan, kenal pasti objek secara konsisten sepanjang klip.</p><p>Taklimat suntingan praktikal boleh menggantikan botol biasa dalam demonstrasi dengan botol daripada Image 1, sambil meminta gerakan tangan, latar dan laluan kamera Video 1 dikekalkan. Semak penggantian serta kawasan yang sepatutnya kekal stabil. Arahan pengekalan jelas menjadikan suntingan yang dimaksudkan lebih mudah dinilai berbanding permintaan umum untuk “memperbaik” rakaman.</p><h4>Memanjangkan dan menghubungkan klip</h4><p>Seedance 2.0 Fast menyokong pemanjangan ke hadapan atau ke belakang serta penghubungan dua atau tiga klip dengan peralihan janaan. Untuk pemanjangan, nyatakan sama ada tindakan baharu berlaku sebelum atau selepas video yang dibekalkan dan terangkan tindakan itu. Untuk penghubungan, berikan klip mengikut susunan yang dimaksudkan dan jelaskan peristiwa visual yang menyatukannya.</p><p>Pemanjangan ringkas biasanya memulangkan sambungan yang baru dibangunkan di sekitar rakaman asal, bukannya menganggap seluruh klip sumber diulang. Jika output patut mengandungi segmen asal, nyatakannya dalam taklimat. Apabila mengisi peralihan antara dua atau tiga video, aliran kerja yang didokumentasikan boleh menggabungkan kandungan asal dan kandungan yang baru dijana. Ini berguna untuk menghubungkan pandangan luas produk dengan syot terperinci melalui gerak kamera yang bermakna.</p><h4>Output dan perbezaan edisi</h4><p>Output Fast yang didokumentasikan ialah MP4 pada 24 fps, dengan 480p atau 720p, kedalaman warna 8-bit dan klip 4–15 saat. Nisbah yang disokong ialah 21:9, 16:9, 4:3, 1:1, 3:4 dan 9:16. Edisi standard Seedance 2.0 menyenaraikan output 1080p dan 4K secara berasingan; tahap tersebut bukan sebahagian daripada spesifikasi Fast. Keluarga 2.0 menyokong pemulangan bingkai terakhir yang dijana, tetapi tidak menyokong mod pratonton Draft yang berasingan.</p><p>Audio boleh dijana bersama rakaman atau ditiadakan untuk klip senyap. Audio yang dijana ialah mono. Bahasa prompt yang didokumentasikan merangkumi bahasa Inggeris, Sepanyol, Indonesia, Portugis dan Jepun. Kekalkan bahasa pertuturan yang konsisten dalam dialog; panduan menasihatkan agar tidak mencampurkan bahasa kecuali nama khas. Untuk adegan bertutur, namakan penutur dan letakkan baris dialog dalam tanda petikan, kemudian nyatakan penyampaian dan kesan bunyi berkaitan. Pastikan persembahan yang diperlukan sesuai dengan panjang klip terpilih.</p><h4>Menyediakan rujukan dan mematuhi had input</h4><p>Had rujukan yang didokumentasikan ialah sehingga sembilan imej, tiga video dan tiga klip audio. Muat naik terus imej atau video rujukan yang mengandungi wajah manusia sebenar tidak diterima dalam profil pengeluar yang didokumentasikan ini; kerja potret menggunakan aliran kerja aset potret yang disokongnya. Setiap klip video atau audio mesti sepanjang 2–15 saat; jumlah tempoh video tidak melebihi 15 saat, dan jumlah tempoh audio secara berasingan tidak melebihi 15 saat. Rujukan video menggunakan MP4 atau MOV pada 24–60 fps dan tidak boleh melebihi 200 MB setiap satu. Rujukan audio menggunakan WAV atau MP3 dan tidak boleh melebihi 15 MB setiap satu. Format imej yang disenaraikan ialah JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC dan HEIF. Setiap imej mesti lebih kecil daripada 30 MB; had keseluruhan badan permintaan ialah 64 MB. Dalam profil input rujukan yang didokumentasikan, lebar dan tinggi imej masing-masing mesti melebihi 300 dan kurang daripada 6,000 piksel, dengan nisbah lebar kepada tinggi melebihi 0.4 dan kurang daripada 2.5. Video rujukan membenarkan 300–6,000 piksel bagi setiap dimensi dan nisbah 0.4–2.5, termasuk nilai sempadan, dengan jumlah 407,696–8,295,044 piksel. Video MP4 atau MOV menggunakan video H.264/AVC atau H.265/HEVC dan audio AAC atau MP3.</p><p>Susun aset dan rujuk secara konsisten sebagai Image 1, Video 1 atau Audio 1. Gunakan nama subjek yang kelihatan atau ciri pembezaannya bersama nombor aset. Padankan pembingkaian imej titik akhir dengan nisbah video yang dimaksudkan, kerana ketidakpadanan boleh memangkas imej atau menghasilkan perubahan pembingkaian yang mendadak. Fokuskan taklimat pada ciri yang perlu dipindahkan, peristiwa yang perlu dijana dan perkara yang patut kekal; prompt panjang boleh menyebarkan arahan sehingga butiran sampingan tidak diselesaikan.</p><h4>Perancangan syot, teks dan tingkah laku yang diketahui</h4><p>Susun taklimat kompleks sebagai Shot 1, Shot 2 dan Shot 3, dengan subjek, tindakan, kedudukan dan bunyi yang jelas bagi setiap satu. Panduan mengesyorkan satu gerak kamera bagi setiap syot dan menyatakan bahawa cap masa tepat setiap syot tidak stabil. Berikan setiap watak label stabil dan beberapa ciri pembezaan; gunakan potret kepala jelas dan rujukan seluruh badan yang berasingan, bukannya helaian gabungan watak dari pelbagai sudut apabila identiti wajah penting.</p><p>Model boleh menjana teks lazim, termasuk slogan, sari kata dan gelembung pertuturan, dengan arahan warna, gaya, kedudukan dan kemunculannya. Aksara lazim lebih digemari daripada aksara jarang atau simbol khas. Periksa huruf semasa bergerak. Sari kata, logo dan watak pendua yang tidak dikehendaki ialah tingkah laku yang didokumentasikan; kekangan jelas dan rujukan bersih boleh mengurangkannya, tetapi tidak menjamin ketiadaannya. Lebih daripada empat orang rujukan dilaporkan sebagai risiko kestabilan, bukannya had mutlak bilangan fail.</p><p>Pemanjangan berulang boleh menggandakan kehilangan kualiti imej, dan titik sambungan pemanjangan boleh melompat atau berundur. Hadkan sambungan bertindan dan periksa titik sambungan dalam suntingan. Timbre suara rujukan boleh menyimpang, narasi boleh berakhir dengan bunyi klik, dan aksara Cina polifonik atau jarang boleh tersalah sebut. Periksa baris pertuturan dan audio penutup; pemudaran audio ringkas boleh membantu apabila bunyi terputus. Pemeriksaan ini sebahagian daripada persediaan hasil kreatif, khususnya apabila pertuturan atau kesinambungan watak membawa cerita.</p>",
  "aboutText": "Seedance 2.0 Fast ialah edisi berorientasikan kelajuan daripada keluarga Seedance 2.0 ByteDance Seed. Ia menyokong penjanaan bersama video dan audio serta taklimat multimodal yang dibina daripada teks, imej, video dan bunyi. Keupayaan kreatifnya merangkumi adegan baharu berpandukan rujukan, suntingan rakaman sedia ada dan pemanjangan adegan, manakala tahap output yang didokumentasikan ialah 480p dan 720p.\n\n### Rujukan multimodal: menetapkan peranan bahan\n\nImej boleh membekalkan watak, produk, komposisi atau olahan visual. Video rujukan boleh membekalkan tindakan, gerak kamera atau kesan. Audio rujukan boleh membekalkan timbre suara, melodi muzik atau kandungan dialog. Jelaskan bahagian setiap sumber yang ingin dibawa ke adegan baharu; rujukan lebih berguna apabila mempunyai peranan kreatif tertentu.\n\nContohnya: “Gunakan lampu seramik dalam Image 1 sebagai produk. Ikuti orbit kamera perlahan daripada Video 1, tetapi letakkan lampu di sudut membaca yang tenang. Gunakan Audio 1 untuk suasana muzik.” Output yang dimaksudkan ialah adegan baharu yang menggabungkan rupa, gerakan dan arah bunyi terpilih, bukannya peniruan setiap butiran rujukan yang tidak ditentukan skopnya.\n\nGabungan yang didokumentasikan merangkumi imej dengan audio, imej dengan video, video dengan audio dan ketiga-tiganya bersama. Teks dengan audio sahaja, serta input audio sahaja, tidak disokong. Model turut menyokong teks-ke-video dan penjanaan berpandukan imej daripada bingkai pertama atau pasangan bingkai pertama dan terakhir. Apabila titik akhir tepat menjadi inti taklimat, gunakan aliran kerja titik akhir khusus; menerangkan imej rujukan sebagai titik akhir dalam prompt omni-reference ialah kawalan tidak langsung.\n\n### Menyunting video sedia ada\n\nModel boleh menambah, membuang atau mengubah unsur, menggantikan subjek serta melukis semula atau membaiki bahagian adegan. Kenal pasti video sumber, objek yang perlu diubah dan unsur yang patut kekal. Untuk penambahan, terangkan tempat dan masa kemunculannya. Untuk pembuangan, kenal pasti objek secara konsisten sepanjang klip.\n\nTaklimat suntingan praktikal boleh menggantikan botol biasa dalam demonstrasi dengan botol daripada Image 1, sambil meminta gerakan tangan, latar dan laluan kamera Video 1 dikekalkan. Semak penggantian serta kawasan yang sepatutnya kekal stabil. Arahan pengekalan jelas menjadikan suntingan yang dimaksudkan lebih mudah dinilai berbanding permintaan umum untuk “memperbaik” rakaman.\n\n### Memanjangkan dan menghubungkan klip\n\nSeedance 2.0 Fast menyokong pemanjangan ke hadapan atau ke belakang serta penghubungan dua atau tiga klip dengan peralihan janaan. Untuk pemanjangan, nyatakan sama ada tindakan baharu berlaku sebelum atau selepas video yang dibekalkan dan terangkan tindakan itu. Untuk penghubungan, berikan klip mengikut susunan yang dimaksudkan dan jelaskan peristiwa visual yang menyatukannya.\n\nPemanjangan ringkas biasanya memulangkan sambungan yang baru dibangunkan di sekitar rakaman asal, bukannya menganggap seluruh klip sumber diulang. Jika output patut mengandungi segmen asal, nyatakannya dalam taklimat. Apabila mengisi peralihan antara dua atau tiga video, aliran kerja yang didokumentasikan boleh menggabungkan kandungan asal dan kandungan yang baru dijana. Ini berguna untuk menghubungkan pandangan luas produk dengan syot terperinci melalui gerak kamera yang bermakna.\n\n### Output dan perbezaan edisi\n\nOutput Fast yang didokumentasikan ialah MP4 pada 24 fps, dengan 480p atau 720p, kedalaman warna 8-bit dan klip 4–15 saat. Nisbah yang disokong ialah 21:9, 16:9, 4:3, 1:1, 3:4 dan 9:16. Edisi standard Seedance 2.0 menyenaraikan output 1080p dan 4K secara berasingan; tahap tersebut bukan sebahagian daripada spesifikasi Fast. Keluarga 2.0 menyokong pemulangan bingkai terakhir yang dijana, tetapi tidak menyokong mod pratonton Draft yang berasingan.\n\nAudio boleh dijana bersama rakaman atau ditiadakan untuk klip senyap. Audio yang dijana ialah mono. Bahasa prompt yang didokumentasikan merangkumi bahasa Inggeris, Sepanyol, Indonesia, Portugis dan Jepun. Kekalkan bahasa pertuturan yang konsisten dalam dialog; panduan menasihatkan agar tidak mencampurkan bahasa kecuali nama khas. Untuk adegan bertutur, namakan penutur dan letakkan baris dialog dalam tanda petikan, kemudian nyatakan penyampaian dan kesan bunyi berkaitan. Pastikan persembahan yang diperlukan sesuai dengan panjang klip terpilih.\n\n### Menyediakan rujukan dan mematuhi had input\n\nHad rujukan yang didokumentasikan ialah sehingga sembilan imej, tiga video dan tiga klip audio. Muat naik terus imej atau video rujukan yang mengandungi wajah manusia sebenar tidak diterima dalam profil pengeluar yang didokumentasikan ini; kerja potret menggunakan aliran kerja aset potret yang disokongnya. Setiap klip video atau audio mesti sepanjang 2–15 saat; jumlah tempoh video tidak melebihi 15 saat, dan jumlah tempoh audio secara berasingan tidak melebihi 15 saat. Rujukan video menggunakan MP4 atau MOV pada 24–60 fps dan tidak boleh melebihi 200 MB setiap satu. Rujukan audio menggunakan WAV atau MP3 dan tidak boleh melebihi 15 MB setiap satu. Format imej yang disenaraikan ialah JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC dan HEIF. Setiap imej mesti lebih kecil daripada 30 MB; had keseluruhan badan permintaan ialah 64 MB. Dalam profil input rujukan yang didokumentasikan, lebar dan tinggi imej masing-masing mesti melebihi 300 dan kurang daripada 6,000 piksel, dengan nisbah lebar kepada tinggi melebihi 0.4 dan kurang daripada 2.5. Video rujukan membenarkan 300–6,000 piksel bagi setiap dimensi dan nisbah 0.4–2.5, termasuk nilai sempadan, dengan jumlah 407,696–8,295,044 piksel. Video MP4 atau MOV menggunakan video H.264/AVC atau H.265/HEVC dan audio AAC atau MP3.\n\nSusun aset dan rujuk secara konsisten sebagai Image 1, Video 1 atau Audio 1. Gunakan nama subjek yang kelihatan atau ciri pembezaannya bersama nombor aset. Padankan pembingkaian imej titik akhir dengan nisbah video yang dimaksudkan, kerana ketidakpadanan boleh memangkas imej atau menghasilkan perubahan pembingkaian yang mendadak. Fokuskan taklimat pada ciri yang perlu dipindahkan, peristiwa yang perlu dijana dan perkara yang patut kekal; prompt panjang boleh menyebarkan arahan sehingga butiran sampingan tidak diselesaikan.\n\n### Perancangan syot, teks dan tingkah laku yang diketahui\n\nSusun taklimat kompleks sebagai Shot 1, Shot 2 dan Shot 3, dengan subjek, tindakan, kedudukan dan bunyi yang jelas bagi setiap satu. Panduan mengesyorkan satu gerak kamera bagi setiap syot dan menyatakan bahawa cap masa tepat setiap syot tidak stabil. Berikan setiap watak label stabil dan beberapa ciri pembezaan; gunakan potret kepala jelas dan rujukan seluruh badan yang berasingan, bukannya helaian gabungan watak dari pelbagai sudut apabila identiti wajah penting.\n\nModel boleh menjana teks lazim, termasuk slogan, sari kata dan gelembung pertuturan, dengan arahan warna, gaya, kedudukan dan kemunculannya. Aksara lazim lebih digemari daripada aksara jarang atau simbol khas. Periksa huruf semasa bergerak. Sari kata, logo dan watak pendua yang tidak dikehendaki ialah tingkah laku yang didokumentasikan; kekangan jelas dan rujukan bersih boleh mengurangkannya, tetapi tidak menjamin ketiadaannya. Lebih daripada empat orang rujukan dilaporkan sebagai risiko kestabilan, bukannya had mutlak bilangan fail.\n\nPemanjangan berulang boleh menggandakan kehilangan kualiti imej, dan titik sambungan pemanjangan boleh melompat atau berundur. Hadkan sambungan bertindan dan periksa titik sambungan dalam suntingan. Timbre suara rujukan boleh menyimpang, narasi boleh berakhir dengan bunyi klik, dan aksara Cina polifonik atau jarang boleh tersalah sebut. Periksa baris pertuturan dan audio penutup; pemudaran audio ringkas boleh membantu apabila bunyi terputus. Pemeriksaan ini sebahagian daripada persediaan hasil kreatif, khususnya apabila pertuturan atau kesinambungan watak membawa cerita.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "1fd7f835b78f259ee4d813885ca2a9771b8dac5dbe0594312508496261e4c701",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "ms",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">ByteDance: Seedance 2.0 Fast</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Tutup\">×</button></div><div class=\"idline\"><span>ByteDance /</span><code>bytedance/seedance-2.0-fast</code><button type=\"button\" id=\"copy-id\">Salin ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Bahagian kad model\"><button type=\"button\" data-card-jump=\"overview\">Pengenalan</button><button type=\"button\" data-card-jump=\"methods\">Input &amp; kaedah</button><button type=\"button\" data-card-jump=\"pricing\">Pelan harga</button><button type=\"button\" data-card-jump=\"examples\">Contoh</button><button type=\"button\" data-card-jump=\"results\">Hasil</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Kaedah 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|bytedance%2Fseedance-2.0-fast\">Video</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\">Pengenalan</h3><p class=\"mdesc-full\">ByteDance Seedance 2.0 Fast mencipta adegan audio-video daripada teks, imej, video dan rujukan bunyi. Edisi berorientasikan kelajuannya menyokong pemindahan gerakan dan gaya, suntingan video serta pemanjangan ke hadapan atau ke belakang, dengan output 480p dan 720p yang didokumentasikan.</p><dl class=\"card-io\" data-card-io><div><dt>Input yang diterima</dt><dd>Teks · Imej · Audio</dd></div><div><dt>Hasil</dt><dd>Video</dd></div></dl><details class=\"card-about\"><summary>Tentang model</summary><p class=\"note-s\" data-model-method-boundary>Huraian ini merangkumi keupayaan model. Input, output dan pilihan yang tersedia di Ailoot disenaraikan di bawah untuk kaedah yang dipilih.</p><div class=\"mabout\" id=\"m-about\"><p>Seedance 2.0 Fast ialah edisi berorientasikan kelajuan daripada keluarga Seedance 2.0 ByteDance Seed. Ia menyokong penjanaan bersama video dan audio serta taklimat multimodal yang dibina daripada teks, imej, video dan bunyi. Keupayaan kreatifnya merangkumi adegan baharu berpandukan rujukan, suntingan rakaman sedia ada dan pemanjangan adegan, manakala tahap output yang didokumentasikan ialah 480p dan 720p.</p><h4>Rujukan multimodal: menetapkan peranan bahan</h4><p>Imej boleh membekalkan watak, produk, komposisi atau olahan visual. Video rujukan boleh membekalkan tindakan, gerak kamera atau kesan. Audio rujukan boleh membekalkan timbre suara, melodi muzik atau kandungan dialog. Jelaskan bahagian setiap sumber yang ingin dibawa ke adegan baharu; rujukan lebih berguna apabila mempunyai peranan kreatif tertentu.</p><p>Contohnya: “Gunakan lampu seramik dalam Image 1 sebagai produk. Ikuti orbit kamera perlahan daripada Video 1, tetapi letakkan lampu di sudut membaca yang tenang. Gunakan Audio 1 untuk suasana muzik.” Output yang dimaksudkan ialah adegan baharu yang menggabungkan rupa, gerakan dan arah bunyi terpilih, bukannya peniruan setiap butiran rujukan yang tidak ditentukan skopnya.</p><p>Gabungan yang didokumentasikan merangkumi imej dengan audio, imej dengan video, video dengan audio dan ketiga-tiganya bersama. Teks dengan audio sahaja, serta input audio sahaja, tidak disokong. Model turut menyokong teks-ke-video dan penjanaan berpandukan imej daripada bingkai pertama atau pasangan bingkai pertama dan terakhir. Apabila titik akhir tepat menjadi inti taklimat, gunakan aliran kerja titik akhir khusus; menerangkan imej rujukan sebagai titik akhir dalam prompt omni-reference ialah kawalan tidak langsung.</p><h4>Menyunting video sedia ada</h4><p>Model boleh menambah, membuang atau mengubah unsur, menggantikan subjek serta melukis semula atau membaiki bahagian adegan. Kenal pasti video sumber, objek yang perlu diubah dan unsur yang patut kekal. Untuk penambahan, terangkan tempat dan masa kemunculannya. Untuk pembuangan, kenal pasti objek secara konsisten sepanjang klip.</p><p>Taklimat suntingan praktikal boleh menggantikan botol biasa dalam demonstrasi dengan botol daripada Image 1, sambil meminta gerakan tangan, latar dan laluan kamera Video 1 dikekalkan. Semak penggantian serta kawasan yang sepatutnya kekal stabil. Arahan pengekalan jelas menjadikan suntingan yang dimaksudkan lebih mudah dinilai berbanding permintaan umum untuk “memperbaik” rakaman.</p><h4>Memanjangkan dan menghubungkan klip</h4><p>Seedance 2.0 Fast menyokong pemanjangan ke hadapan atau ke belakang serta penghubungan dua atau tiga klip dengan peralihan janaan. Untuk pemanjangan, nyatakan sama ada tindakan baharu berlaku sebelum atau selepas video yang dibekalkan dan terangkan tindakan itu. Untuk penghubungan, berikan klip mengikut susunan yang dimaksudkan dan jelaskan peristiwa visual yang menyatukannya.</p><p>Pemanjangan ringkas biasanya memulangkan sambungan yang baru dibangunkan di sekitar rakaman asal, bukannya menganggap seluruh klip sumber diulang. Jika output patut mengandungi segmen asal, nyatakannya dalam taklimat. Apabila mengisi peralihan antara dua atau tiga video, aliran kerja yang didokumentasikan boleh menggabungkan kandungan asal dan kandungan yang baru dijana. Ini berguna untuk menghubungkan pandangan luas produk dengan syot terperinci melalui gerak kamera yang bermakna.</p><h4>Output dan perbezaan edisi</h4><p>Output Fast yang didokumentasikan ialah MP4 pada 24 fps, dengan 480p atau 720p, kedalaman warna 8-bit dan klip 4–15 saat. Nisbah yang disokong ialah 21:9, 16:9, 4:3, 1:1, 3:4 dan 9:16. Edisi standard Seedance 2.0 menyenaraikan output 1080p dan 4K secara berasingan; tahap tersebut bukan sebahagian daripada spesifikasi Fast. Keluarga 2.0 menyokong pemulangan bingkai terakhir yang dijana, tetapi tidak menyokong mod pratonton Draft yang berasingan.</p><p>Audio boleh dijana bersama rakaman atau ditiadakan untuk klip senyap. Audio yang dijana ialah mono. Bahasa prompt yang didokumentasikan merangkumi bahasa Inggeris, Sepanyol, Indonesia, Portugis dan Jepun. Kekalkan bahasa pertuturan yang konsisten dalam dialog; panduan menasihatkan agar tidak mencampurkan bahasa kecuali nama khas. Untuk adegan bertutur, namakan penutur dan letakkan baris dialog dalam tanda petikan, kemudian nyatakan penyampaian dan kesan bunyi berkaitan. Pastikan persembahan yang diperlukan sesuai dengan panjang klip terpilih.</p><h4>Menyediakan rujukan dan mematuhi had input</h4><p>Had rujukan yang didokumentasikan ialah sehingga sembilan imej, tiga video dan tiga klip audio. Muat naik terus imej atau video rujukan yang mengandungi wajah manusia sebenar tidak diterima dalam profil pengeluar yang didokumentasikan ini; kerja potret menggunakan aliran kerja aset potret yang disokongnya. Setiap klip video atau audio mesti sepanjang 2–15 saat; jumlah tempoh video tidak melebihi 15 saat, dan jumlah tempoh audio secara berasingan tidak melebihi 15 saat. Rujukan video menggunakan MP4 atau MOV pada 24–60 fps dan tidak boleh melebihi 200 MB setiap satu. Rujukan audio menggunakan WAV atau MP3 dan tidak boleh melebihi 15 MB setiap satu. Format imej yang disenaraikan ialah JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC dan HEIF. Setiap imej mesti lebih kecil daripada 30 MB; had keseluruhan badan permintaan ialah 64 MB. Dalam profil input rujukan yang didokumentasikan, lebar dan tinggi imej masing-masing mesti melebihi 300 dan kurang daripada 6,000 piksel, dengan nisbah lebar kepada tinggi melebihi 0.4 dan kurang daripada 2.5. Video rujukan membenarkan 300–6,000 piksel bagi setiap dimensi dan nisbah 0.4–2.5, termasuk nilai sempadan, dengan jumlah 407,696–8,295,044 piksel. Video MP4 atau MOV menggunakan video H.264/AVC atau H.265/HEVC dan audio AAC atau MP3.</p><p>Susun aset dan rujuk secara konsisten sebagai Image 1, Video 1 atau Audio 1. Gunakan nama subjek yang kelihatan atau ciri pembezaannya bersama nombor aset. Padankan pembingkaian imej titik akhir dengan nisbah video yang dimaksudkan, kerana ketidakpadanan boleh memangkas imej atau menghasilkan perubahan pembingkaian yang mendadak. Fokuskan taklimat pada ciri yang perlu dipindahkan, peristiwa yang perlu dijana dan perkara yang patut kekal; prompt panjang boleh menyebarkan arahan sehingga butiran sampingan tidak diselesaikan.</p><h4>Perancangan syot, teks dan tingkah laku yang diketahui</h4><p>Susun taklimat kompleks sebagai Shot 1, Shot 2 dan Shot 3, dengan subjek, tindakan, kedudukan dan bunyi yang jelas bagi setiap satu. Panduan mengesyorkan satu gerak kamera bagi setiap syot dan menyatakan bahawa cap masa tepat setiap syot tidak stabil. Berikan setiap watak label stabil dan beberapa ciri pembezaan; gunakan potret kepala jelas dan rujukan seluruh badan yang berasingan, bukannya helaian gabungan watak dari pelbagai sudut apabila identiti wajah penting.</p><p>Model boleh menjana teks lazim, termasuk slogan, sari kata dan gelembung pertuturan, dengan arahan warna, gaya, kedudukan dan kemunculannya. Aksara lazim lebih digemari daripada aksara jarang atau simbol khas. Periksa huruf semasa bergerak. Sari kata, logo dan watak pendua yang tidak dikehendaki ialah tingkah laku yang didokumentasikan; kekangan jelas dan rujukan bersih boleh mengurangkannya, tetapi tidak menjamin ketiadaannya. Lebih daripada empat orang rujukan dilaporkan sebagai risiko kestabilan, bukannya had mutlak bilangan fail.</p><p>Pemanjangan berulang boleh menggandakan kehilangan kualiti imej, dan titik sambungan pemanjangan boleh melompat atau berundur. Hadkan sambungan bertindan dan periksa titik sambungan dalam suntingan. Timbre suara rujukan boleh menyimpang, narasi boleh berakhir dengan bunyi klik, dan aksara Cina polifonik atau jarang boleh tersalah sebut. Periksa baris pertuturan dan audio penutup; pemudaran audio ringkas boleh membantu apabila bunyi terputus. Pemeriksaan ini sebahagian daripada persediaan hasil kreatif, khususnya apabila pertuturan atau kesinambungan watak membawa cerita.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Tersedia di Ailoot · input &amp; kaedah</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Video</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>Input</dt><dd><code>text</code>, <code>image</code>, <code>audio</code></dd></div><div><dt>Output</dt><dd><code>video</code></dd></div><div><dt>Format output</dt><dd>bait MP4 asal; tanpa penormalan atau pengekodan semula</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Medan</th><th>Jenis</th><th>Keperluan</th><th>Nilai &amp; had</th><th>Lalai</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Diperlukan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>bytedance/seedance-2.0-fast</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Diperlukan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">duration</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>integer</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Diperlukan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15</div><div>Minimum: 1</div><div>Maksimum: 600</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">resolution</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>480p, 720p</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">aspect_ratio</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>1:1, 3:4, 9:16, 4:3, 16:9, 21:9, 9:21</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">generate_audio</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>boolean</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>false, true</div><div>Syarat: Menggugurkan generate_audio memilih harga dengan audio; false memilih harga tanpa audio. Semak has_audio dalam hasil untuk mengetahui sama ada trek audio dikembalikan.</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">frame_images</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>array</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>Item minimum: 1</div><div>Item maksimum: 2</div><div>Kandungan input: Tatasusunan objek bingkai. Setiap objek mempunyai type=image_url, image_url yang mengandungi url dan frame_type=first_frame atau last_frame. Setiap peranan boleh muncul paling banyak sekali. Gunakan pautan HTTPS awam.</div><div>Kunci tepat: type, image_url, frame_type</div><div>Syarat: Kunci ini digunakan bagi setiap objek bingkai. Gugurkan frame_images untuk permintaan teks sahaja.</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">input_references</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>array</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>Kandungan input: Tatasusunan objek rujukan imej atau audio. Tetapkan type kepada image_url atau audio_url dan berikan objek URL sepadan yang mengandungi url. Harga rujukan video masih tidak dapat ditentukan.</div><div>Syarat: Gugurkan frame_images untuk menggunakan mod rujukan. Gunakan pautan HTTPS awam.</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">size</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>480x480, 480x640, 480x854, 640x480, 854x480, 1120x480, 720x720, 720x960, 720x1280, 720x1680, 960x720, 1280x720, 1680x720</div><div>Corak: ^[1-9][0-9]*x[1-9][0-9]*$</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">seed</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>integer</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>Minimum: -9,223,372,036,854,775,808</div><div>Maksimum: 9,223,372,036,854,775,807</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">callback_url</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>Corak: ^https://</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">session_id</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">trace</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>object</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">user</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Gabungan bahan input</summary><p class=\"note-s\"><b>Teks kepada video</b> · Prompt bertulis. · Diperlukan: model, prompt, duration</p><p class=\"note-s\"><code>Berikan prompt teks dan tempoh dalam saat bulat yang disokong. Gunakan saiz tepat yang disenaraikan, atau resolusi dan nisbah bidang yang menghasilkan dimensi yang disenaraikan.</code></p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Jenis: string · bytedance/seedance-2.0-fast</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Jenis: string · Bait UTF-8 maksimum: 10,000 · Aksara selain ruang kosong diperlukan: Ya</p><p class=\"note-s\"><b>Imej kepada video</b> · Prompt bertulis dan imej bingkai. · Diperlukan: model, prompt, duration, frame_images</p><p class=\"note-s\"><code>frame_images ialah tatasusunan objek dengan type=image_url, image_url yang mengandungi url dan frame_type. Gunakan URL imej HTTPS awam; first_frame dan last_frame masing-masing boleh muncul sekali. Gunakan saiz output yang disenaraikan atau dimensi yang serasi. Jangan tambah rujukan video.</code></p><p class=\"note-s\">Kunci tepat: type, image_url, frame_type</p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Jenis: string · bytedance/seedance-2.0-fast</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Jenis: string · Bait UTF-8 maksimum: 10,000 · Aksara selain ruang kosong diperlukan: Ya</p><p class=\"note-s\"><b>Reference to video</b> · Prompt bertulis dan rujukan imej atau audio. · Diperlukan: model, prompt, duration, input_references</p><p class=\"note-s\"><code>input_references ialah tatasusunan. Setiap objek mempunyai type=image_url atau type=audio_url serta objek URL sepadan yang mengandungi url. Gunakan pautan HTTPS awam. Gugurkan frame_images untuk memilih mod rujukan. Harga rujukan video tidak dapat ditentukan.</code></p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: Jenis: string · bytedance/seedance-2.0-fast</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: Jenis: string · Bait UTF-8 maksimum: 10,000 · Aksara selain ruang kosong diperlukan: Ya</p></details><details class=\"note-s\" data-method-contract><summary>Parameter kaedah dan kitar hayat</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Kontrak</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>content_type</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>application/json</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>required</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>model, prompt, duration</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>text, image, audio</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>additional_properties</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>false</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional_controls</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>resolution, aspect_ratio, generate_audio, frame_images, input_references, size, seed, callback_url, session_id, trace, user</td></tr></tbody></table></div><p>Kitar hayat: <code>submit_once_poll_original</code></p><p class=\"note-s\"><code>GET /v1/videos/{public_id}</code></p><p class=\"note-s\"><code>GET /v1/videos/{public_id}/content</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Pelan harga</h3><div class=\"card-result-process\" data-billing-basis><h5>Cara caj akhir dikira</h5><p class=\"note-s\">Kadar yang dipaparkan menganggarkan kos sebelum penjanaan. Caj akhir dikira berdasarkan kos yang direkodkan untuk penjanaan asal. Tempoh output yang diukur dan kuantiti ramalan bukan kuantiti akhir yang boleh dibilkan.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.</p><dl data-price-conditions><dt>Mod pantas</dt><dd>Tidak dinyatakan <span class=\"note-s\">Apabila mod pantas dipilih</span></dd><dt>Mod flex</dt><dd>Tidak dinyatakan <span class=\"note-s\">Apabila mod flex dipilih</span></dd><dt>Usaha penaakulan maksimum</dt><dd>Tidak dinyatakan <span class=\"note-s\">Apabila usaha penaakulan maksimum menggunakan pelarasan default</span></dd></dl></div><div data-declared-tariff-pricing><h4>Anggaran kadar untuk perbandingan</h4><h4>Harga mengikut konfigurasi</h4><p class=\"note-s\">Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfigurasi</th><th>Jadual kadar</th><th>Kuantiti ramalan</th><th>Unit pengebilan</th><th>Syarat pengebilan</th><th>Caj</th></tr></thead><tbody><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Kadar asas token</th><td data-cell-label=\"Jadual kadar\"><span class=\"card-cell-label\">Jadual kadar</span>Kadar asas</td><td data-cell-label=\"Kuantiti ramalan\"><span class=\"card-cell-label\">Kuantiti ramalan</span>—</td><td data-cell-label=\"Unit pengebilan\"><span class=\"card-cell-label\">Unit pengebilan</span>—</td><td data-cell-label=\"Syarat pengebilan\"><span class=\"card-cell-label\">Syarat pengebilan</span>—</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Input · Token input · Anggaran untuk perbandingan sahaja</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Output · Token output · Anggaran untuk perbandingan sahaja</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Bacaan cache · Anggaran untuk perbandingan sahaja</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache · Anggaran untuk perbandingan sahaja</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache, 1 jam · Anggaran untuk perbandingan sahaja</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Harga token video</th><td data-cell-label=\"Jadual kadar\"><span class=\"card-cell-label\">Jadual kadar</span>—</td><td data-cell-label=\"Kuantiti ramalan\"><span class=\"card-cell-label\">Kuantiti ramalan</span>—</td><td data-cell-label=\"Unit pengebilan\"><span class=\"card-cell-label\">Unit pengebilan</span>bagi setiap 1K token video</td><td data-cell-label=\"Syarat pengebilan\"><span class=\"card-cell-label\">Syarat pengebilan</span>Tiada syarat tambahan dinyatakan dalam kunci harga ini.</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Output · Harga token video · Anggaran untuk perbandingan sahaja</span> <b>$0.0084</b> <span class=\"price-unit\">bagi setiap 1K token video</span></div><p class=\"note-s\">Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.</p></td></tr><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Harga token video</th><td data-cell-label=\"Jadual kadar\"><span class=\"card-cell-label\">Jadual kadar</span>—</td><td data-cell-label=\"Kuantiti ramalan\"><span class=\"card-cell-label\">Kuantiti ramalan</span>—</td><td data-cell-label=\"Unit pengebilan\"><span class=\"card-cell-label\">Unit pengebilan</span>bagi setiap 1K token video</td><td data-cell-label=\"Syarat pengebilan\"><span class=\"card-cell-label\">Syarat pengebilan</span>jenis input: with_video_input</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>reference · Harga token video · Anggaran untuk perbandingan sahaja</span> <b>$0.00495</b> <span class=\"price-unit\">bagi setiap 1K token video</span></div><p class=\"note-s\">Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.</p></td></tr><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Harga token video</th><td data-cell-label=\"Jadual kadar\"><span class=\"card-cell-label\">Jadual kadar</span>—</td><td data-cell-label=\"Kuantiti ramalan\"><span class=\"card-cell-label\">Kuantiti ramalan</span>—</td><td data-cell-label=\"Unit pengebilan\"><span class=\"card-cell-label\">Unit pengebilan</span>bagi setiap 1K token video</td><td data-cell-label=\"Syarat pengebilan\"><span class=\"card-cell-label\">Syarat pengebilan</span>tetapan audio: without_audio</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Output · Harga token video · Anggaran untuk perbandingan sahaja</span> <b>$0.0084</b> <span class=\"price-unit\">bagi setiap 1K token video</span></div><p class=\"note-s\">Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.</p></td></tr><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Anggaran kos penjanaan</th><td data-cell-label=\"Jadual kadar\"><span class=\"card-cell-label\">Jadual kadar</span>—</td><td data-cell-label=\"Kuantiti ramalan\"><span class=\"card-cell-label\">Kuantiti ramalan</span>anggaran untuk satu penjanaan</td><td data-cell-label=\"Unit pengebilan\"><span class=\"card-cell-label\">Unit pengebilan</span>—</td><td data-cell-label=\"Syarat pengebilan\"><span class=\"card-cell-label\">Syarat pengebilan</span>—</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Output · Anggaran kos penjanaan · Anggaran untuk perbandingan sahaja</span> <b>$0.18144</b> <span class=\"price-unit\">anggaran sebelum penjanaan</span></div><p class=\"note-s\">Anggaran ini bukan caj tambahan atau kadar tetap bagi penjanaan yang telah selesai.</p></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. <a href=\"/docs/ms/billing/reserve/\">Cara rizab dan penyelesaian caj berfungsi →</a></p><div data-declared-reference-pricing><h4>Butiran tarif rujukan</h4><p class=\"note-s\">Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Rujukan harga konfigurasi video</summary><h4>Harga mengikut konfigurasi</h4><p class=\"note-s\">Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfigurasi</th><th>Syarat pengebilan</th><th>Caj</th></tr></thead><tbody><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Harga token video</th><td data-cell-label=\"Syarat pengebilan\"><span class=\"card-cell-label\">Syarat pengebilan</span>Tiada syarat tambahan dinyatakan dalam kunci harga ini.</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Output · Harga token video</span> <b>$0.0084</b> <span class=\"price-unit\">bagi setiap 1K token video</span></div><p class=\"note-s\">Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.</p></td></tr><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Harga token video</th><td data-cell-label=\"Syarat pengebilan\"><span class=\"card-cell-label\">Syarat pengebilan</span>tetapan audio: without_audio</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Output · Harga token video</span> <b>$0.0084</b> <span class=\"price-unit\">bagi setiap 1K token video</span></div><p class=\"note-s\">Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.</p></td></tr><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Harga token video</th><td data-cell-label=\"Syarat pengebilan\"><span class=\"card-cell-label\">Syarat pengebilan</span>jenis input: with_video_input</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>reference · Harga token video</span> <b>$0.00495</b> <span class=\"price-unit\">bagi setiap 1K token video</span></div><p class=\"note-s\">Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.</p></td></tr></tbody></table></div></details></div></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Contoh permintaan</h3><h4>Ailoot Ultra · Video</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Pilihan kod\"><button class=\"cg-tab\" id=\"model-code-1134-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1134-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · cipta video</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Salin kod\"><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-1134-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1134-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nfrom pathlib import Path\nPath(&#39;request.json&#39;).write_text(&#39;{&quot;model&quot;:&quot;bytedance/seedance-2.0-fast&quot;,&quot;prompt&quot;:&quot;A serene mountain landscape at sunset&quot;,&quot;duration&quot;:4,&quot;resolution&quot;:&quot;480p&quot;,&quot;size&quot;:&quot;480x480&quot;,&quot;generate_audio&quot;:false}&#39;, 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 result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Terima dan simpan hasil</h3><h4>Ailoot Ultra · Video</h4><p class=\"note-s\">pautan kandungan bertandatangan milik anda</p><ul class=\"card-result-paths\"><li><code>GET /v1/videos/{public_id}</code></li><li><code>GET /v1/videos/{public_id}/content</code></li></ul><h5>Semak status tugas</h5><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Pilihan kod\"><button class=\"cg-tab\" id=\"model-code-1135-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1135-panel-0\" aria-selected=\"true\" tabindex=\"0\">GET status operasi asal</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Salin kod\"><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-1135-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1135-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_STATUS_URL&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nif not isinstance(r.get(&#39;id&#39;),str) or not r[&#39;id&#39;]:raise SystemExit(&#39;Keep the original response and headers for reconciliation; no returned ID&#39;)\nPath(&#39;status-url.txt&#39;).write_text(&#39;https://api.ailoot.ai/v1/videos/&#39;+quote(r[&#39;id&#39;],safe=&#39;&#39;))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error &quot;$(cat status-url.txt)&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -D status-headers.txt -o status.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div><details class=\"card-about\"><summary>Pembacaan kandungan lain</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Pilihan kod\"><button class=\"cg-tab\" id=\"model-code-1136-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1136-panel-0\" aria-selected=\"true\" tabindex=\"0\">Simpan setiap output selesai yang menjadi milik anda</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Salin kod\"><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-1136-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1136-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\nexport AILOOT_API_KEY\npython3 - &lt;&lt;&#39;PY_ASSETS&#39;\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nif r.get(&#39;status&#39;)!=&#39;completed&#39;:raise SystemExit(&#39;Keep the original ID and read its status; never recreate an unknown job&#39;)\nif not isinstance(r.get(&#39;data&#39;),list) or not r[&#39;data&#39;]:raise SystemExit(&#39;Keep the complete original status; no completed outputs supplied&#39;)\nurls=[]\nfor i,u in enumerate(r.get(&#39;data&#39;,[])):\n    if not isinstance(u,str):raise SystemExit(&#39;Keep the original response; unexpected asset shape&#39;)\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin(&#39;https://api.ailoot.ai&#39;,path);z=urlsplit(u)\n    if z.scheme!=&#39;https&#39; or z.netloc!=&#39;api.ailoot.ai&#39; or z.username or z.password:raise SystemExit(&#39;Use the actual returned Ailoot owned content URL&#39;)\n    target=Path(&#39;owned-&#39;+label+&#39;.bin&#39;)\n    subprocess.run([&#39;curl&#39;,&#39;--fail-with-body&#39;,&#39;--silent&#39;,&#39;--show-error&#39;,u,&#39;-H&#39;,&#39;Authorization: Bearer &#39;+os.environ[&#39;AILOOT_API_KEY&#39;],&#39;-D&#39;,str(target)+&#39;.headers&#39;,&#39;-o&#39;,str(target)],check=True)\nprint(&#39;All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.&#39;)\nPY_ASSETS\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>Simpan semua hasil yang selesai</h5><p class=\"note-s\">Simpan setiap video yang selesai atau fail yang dikembalikan; dapatkan setiap URL aset yang benar-benar dikembalikan.</p><p class=\"note-s\">Simpan setiap output sebenar milik anda berserta metadata ukuran yang dikembalikan.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Jika respons asal perlu disemak</h5><p class=\"note-s\">503 result_pending_check + id asal + X-Should-Retry:false; jangan sekali-kali ulang operasi asal</p></div><details class=\"card-about\" data-output-fields><summary>Medan respons</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Medan</th><th>Jenis</th><th>Maksud</th></tr></thead><tbody><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">index</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>integer</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Kedudukan video ini dalam senarai output dengan indeks bermula dari sifar.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">content_url</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>string</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>URL muat turun HTTPS bertandatangan untuk video siap ini.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">sha256</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>string | null</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Ringkasan SHA-256 bagi bait video asal; null jika tidak tersedia.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">size_bytes</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>integer | null</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Saiz fail video asal dalam bait; null jika tidak tersedia.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">duration_ms</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>integer | null</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Tempoh video yang diukur dalam milisaat; null jika tidak tersedia.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">width</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>integer | null</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Lebar video dalam piksel; null jika tidak tersedia.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">height</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>integer | null</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Ketinggian video dalam piksel; null jika tidak tersedia.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">video_codec</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>string | null</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Pengecam codec video; null jika tidak direkodkan.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">has_audio</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>boolean | null</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Sama ada video mengandungi trek audio; null jika tidak diukur.</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">audio_codec</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>string | null</td><td data-cell-label=\"Maksud\"><span class=\"card-cell-label\">Maksud</span>Pengecam codec audio; null apabila tiada pengecam direkodkan.</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Ralat dan langkah seterusnya</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Respons</th><th>Syarat</th><th>Langkah seterusnya</th></tr></thead><tbody><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Akses video tidak tersedia, atau ID video ini tidak ditemui.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Semak akses video. Untuk video sedia ada, gunakan ID awam asalnya dan kunci API yang sama.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Kunci API tidak sepadan dengan akaun yang disahkan.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Semak kunci API dan akses akaun anda sebelum menghantar.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Permintaan tidak dapat dibaca, atau indeks muat turun tidak sah.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Betulkan badan permintaan. Untuk muat turun, pilih indeks output yang dikembalikan oleh tugas asal.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>422 · <code>price_unavailable</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Harga konfigurasi video yang dipilih tidak dapat ditentukan.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Pilih konfigurasi video yang disokong dan lengkapkan pilihan wajibnya sebelum menghantar permintaan yang dibetulkan.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>422 · <code>invalid_request_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Input video atau tugas sambungan asal tidak sah.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Gunakan input HTTPS yang sah. Untuk sambungan, gunakan ID video awam asal anda yang telah siap dengan kunci API yang sama.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>402 · <code>billing_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Baki atau had yang tersedia tidak membenarkan penahanan dana.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Semak baki dan had yang tersedia sebelum menghantar permintaan baharu.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>503 · <code>server_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Pengesahan video, storan atau akses perkhidmatan tidak tersedia buat sementara waktu.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Tunggu sehingga perkhidmatan tersedia. Jika anda sudah mempunyai ID video, semak tugas asal tersebut dan jangan cipta penjanaan lain.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>503 · <code>result_pending_check</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Hasil video asal dan caj perlu disemak.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Simpan ID video yang dikembalikan dan semak tugas tersebut. Jangan hantar permintaan penjanaan gantian semasa semakan sedang berjalan.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>503 · <code>owned_result_unavailable</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Muat turun video sedia ada tidak tersedia buat sementara waktu.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Semak tugas video yang sama kemudian dan muat turun output sedia ada. Penjanaan baharu mencipta operasi berasingan.</td></tr><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>409 · <code>video_not_ready</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Kandungan video belum diterbitkan.</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Semak status tugas asal. Muat turun selepas statusnya melaporkan completed; jika statusnya melaporkan failed, ikuti notis semakan cajnya.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias model</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=bytedance%2Fseedance-2.0-fast&amp;route=Ultra&amp;caller=bytedance%2Fseedance-2.0-fast&amp;fmt=videos\"><code>bytedance/seedance-2.0-fast</code></a></span></p><h4>Alias laluan kaedah</h4><p class=\"note-s\">Gunakan laluan kaedah yang dipaparkan di atas.</p><h4>ID pemanggil berkaitan</h4><p class=\"note-s\"><a href=\"#m=bytedance%2Fseedance-2.0-fast&amp;route=Ultra&amp;caller=bytedance%2Fseedance-2.0-fast&amp;fmt=videos\"><code>bytedance/seedance-2.0-fast</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "bytedance/seedance-2.0-fast",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "bytedance/seedance-2.0-fast",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|bytedance%2Fseedance-2.0-fast",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Kadar yang dipaparkan menganggarkan kos sebelum penjanaan. Caj akhir dikira berdasarkan kos yang direkodkan untuk penjanaan asal. Tempoh output yang diukur dan kuantiti ramalan bukan kuantiti akhir yang boleh dibilkan.",
          "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": "Simpan setiap output sebenar milik anda berserta metadata ukuran yang dikembalikan.",
            "defaults": {
              "aspect_ratio": null,
              "duration": null,
              "generate_audio": "endpoint capability flag when published; omitted unknown stays unknown; never guarantees audio track",
              "resolution": null,
              "seed": null,
              "size": null,
              "wire_omissions_preserved": true
            },
            "errors": [
              {
                "condition": "Akses video tidak tersedia, atau ID video ini tidak ditemui.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "Semak akses video. Untuk video sedia ada, gunakan ID awam asalnya dan kunci API yang sama.",
                "type": "not_found_error"
              },
              {
                "condition": "Kunci API tidak sepadan dengan akaun yang disahkan.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "Semak kunci API dan akses akaun anda sebelum menghantar.",
                "type": "authentication_error"
              },
              {
                "condition": "Permintaan tidak dapat dibaca, atau indeks muat turun tidak sah.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "Betulkan badan permintaan. Untuk muat turun, pilih indeks output yang dikembalikan oleh tugas asal.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Harga konfigurasi video yang dipilih tidak dapat ditentukan.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Pilih konfigurasi video yang disokong dan lengkapkan pilihan wajibnya sebelum menghantar permintaan yang dibetulkan.",
                "type": "price_unavailable"
              },
              {
                "condition": "Input video atau tugas sambungan asal tidak sah.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Gunakan input HTTPS yang sah. Untuk sambungan, gunakan ID video awam asal anda yang telah siap dengan kunci API yang sama.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Baki atau had yang tersedia tidak membenarkan penahanan dana.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "Semak baki dan had yang tersedia sebelum menghantar permintaan baharu.",
                "type": "billing_error"
              },
              {
                "condition": "Pengesahan video, storan atau akses perkhidmatan tidak tersedia buat sementara waktu.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "Tunggu sehingga perkhidmatan tersedia. Jika anda sudah mempunyai ID video, semak tugas asal tersebut dan jangan cipta penjanaan lain.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "Hasil video asal dan caj perlu disemak.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Simpan ID video yang dikembalikan dan semak tugas tersebut. Jangan hantar permintaan penjanaan gantian semasa semakan sedang berjalan.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "Muat turun video sedia ada tidak tersedia buat sementara waktu.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Semak tugas video yang sama kemudian dan muat turun output sedia ada. Penjanaan baharu mencipta operasi berasingan.",
                "type": "server_error"
              },
              {
                "condition": "Kandungan video belum diterbitkan.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "Semak status tugas asal. Muat turun selepas statusnya melaporkan completed; jika statusnya melaporkan failed, ikuti notis semakan cajnya.",
                "type": "video_not_ready"
              }
            ],
            "hints": [
              "No null values or duplicate keys at any JSON object level",
              "No duration/resolution/aspect default is inserted",
              "Prompt required for all21 despite broader official image-only schema",
              "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
              "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
              "No n/output-count/client price fields accepted",
              "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}/content",
                  "query": {
                    "index": "actual output index"
                  }
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "mode": "submit_once_poll_original",
              "public_id": "video_<uuid>; owner user/key/group scope",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}"
                }
              ],
              "submit_status": 202,
              "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
              "terminal_provider_states": [
                "failed",
                "cancelled",
                "expired"
              ],
              "unknown": "503 result_pending_check + id asal + X-Should-Retry:false; jangan sekali-kali ulang operasi asal"
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-fast"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "Berikan prompt teks dan tempoh dalam saat bulat yang disokong. Gunakan saiz tepat yang disenaraikan, atau resolusi dan nisbah bidang yang menghasilkan dimensi yang disenaraikan.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "Prompt bertulis."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-fast"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images ialah tatasusunan objek dengan type=image_url, image_url yang mengandungi url dan frame_type. Gunakan URL imej HTTPS awam; first_frame dan last_frame masing-masing boleh muncul sekali. Gunakan saiz output yang disenaraikan atau dimensi yang serasi. Jangan tambah rujukan video.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "Prompt bertulis dan imej bingkai."
              },
              {
                "mode": "Reference to video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-fast"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "input_references ialah tatasusunan. Setiap objek mempunyai type=image_url atau type=audio_url serta objek URL sepadan yang mengandungi url. Gunakan pautan HTTPS awam. Gugurkan frame_images untuk memilih mod rujukan. Harga rujukan video tidak dapat ditentukan.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "input_references"
                ],
                "required_material": "Prompt bertulis dan rujukan imej atau audio."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images",
              "reference_to_video"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "Kedudukan video ini dalam senarai output dengan indeks bermula dari sifar.",
                  "field_path": "outputs[].index",
                  "json_schema": {
                    "type": "integer"
                  },
                  "name": "index",
                  "nullable": false,
                  "type": "integer"
                },
                {
                  "condition": "Present after the owned result is available and a signed URL is created.",
                  "description": "URL muat turun HTTPS bertandatangan untuk video siap ini.",
                  "field_path": "outputs[].content_url",
                  "json_schema": {
                    "type": "string"
                  },
                  "name": "content_url",
                  "nullable": false,
                  "type": "string"
                },
                {
                  "condition": "A nonempty recorded digest is returned; otherwise null.",
                  "description": "Ringkasan SHA-256 bagi bait video asal; null jika tidak tersedia.",
                  "field_path": "outputs[].sha256",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "sha256",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when the recorded file size is positive.",
                  "description": "Saiz fail video asal dalam bait; null jika tidak tersedia.",
                  "field_path": "outputs[].size_bytes",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "size_bytes",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned when the measured duration is positive.",
                  "description": "Tempoh video yang diukur dalam milisaat; null jika tidak tersedia.",
                  "field_path": "outputs[].duration_ms",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "duration_ms",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Lebar video dalam piksel; null jika tidak tersedia.",
                  "field_path": "outputs[].width",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "width",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Ketinggian video dalam piksel; null jika tidak tersedia.",
                  "field_path": "outputs[].height",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "height",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned together with positive recorded width and height.",
                  "description": "Pengecam codec video; null jika tidak direkodkan.",
                  "field_path": "outputs[].video_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "video_codec",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                  "description": "Sama ada video mengandungi trek audio; null jika tidak diukur.",
                  "field_path": "outputs[].has_audio",
                  "json_schema": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "name": "has_audio",
                  "nullable": true,
                  "type": "boolean | null"
                },
                {
                  "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                  "description": "Pengecam codec audio; null apabila tiada pengecam direkodkan.",
                  "field_path": "outputs[].audio_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "audio_codec",
                  "nullable": true,
                  "type": "string | null"
                }
              ],
              "format": "original MP4 bytes; no normalization/transcode",
              "max_aggregate_seconds": 2400,
              "max_bytes_per_output": 67108864,
              "max_seconds_per_output": 600,
              "result": "pautan kandungan bertandatangan milik anda",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "bytedance/seedance-2.0-fast"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "bytedance/seedance-2.0-fast"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "schema": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480p",
                  "720p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "480p",
                    "720p"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "1:1",
                  "3:4",
                  "9:16",
                  "4:3",
                  "16:9",
                  "21:9",
                  "9:21"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "4:3",
                    "16:9",
                    "21:9",
                    "9:21"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Menggugurkan generate_audio memilih harga dengan audio; false memilih harga tanpa audio. Semak has_audio dalam hasil untuk mengetahui sama ada trek audio dikembalikan.",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  true
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": false,
                "schema": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Kunci ini digunakan bagi setiap objek bingkai. Gugurkan frame_images untuk permintaan teks sahaja.",
                "content": "Tatasusunan objek bingkai. Setiap objek mempunyai type=image_url, image_url yang mengandungi url dan frame_type=first_frame atau last_frame. Setiap peranan boleh muncul paling banyak sekali. Gunakan pautan HTTPS awam.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "maxItems": 2,
                "max_items": 2,
                "minItems": 1,
                "min_items": 1,
                "name": "frame_images",
                "required": false,
                "schema": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "conditions": "Gugurkan frame_images untuk menggunakan mod rujukan. Gunakan pautan HTTPS awam.",
                "content": "Tatasusunan objek rujukan imej atau audio. Tetapkan type kepada image_url atau audio_url dan berikan objek URL sepadan yang mengandungi url. Harga rujukan video masih tidak dapat ditentukan.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480x480",
                  "480x640",
                  "480x854",
                  "640x480",
                  "854x480",
                  "1120x480",
                  "720x720",
                  "720x960",
                  "720x1280",
                  "720x1680",
                  "960x720",
                  "1280x720",
                  "1680x720"
                ],
                "enum_known": true,
                "name": "size",
                "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                "required": false,
                "schema": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "640x480",
                    "854x480",
                    "1120x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "960x720",
                    "1280x720",
                    "1680x720"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 9223372036854775807,
                "minimum": -9223372036854775808,
                "name": "seed",
                "required": false,
                "schema": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback_url",
                "pattern": "^https://",
                "required": false,
                "schema": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "session_id",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "user",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              }
            ],
            "request_schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "4:3",
                    "16:9",
                    "21:9",
                    "9:21"
                  ]
                },
                "callback_url": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "creativity": false,
                "duration": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "frame_images": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "generate_audio": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "input_references": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "model": {
                  "const": "bytedance/seedance-2.0-fast"
                },
                "previous_job_id": false,
                "prompt": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "provider": false,
                "resolution": {
                  "enum": [
                    "480p",
                    "720p"
                  ]
                },
                "seed": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "640x480",
                    "854x480",
                    "1120x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "960x720",
                    "1280x720",
                    "1680x720"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "trace": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "upscale_factor": false,
                "user": {
                  "maxLength": 256,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt",
                "duration"
              ],
              "title": "Video generation request",
              "type": "object",
              "x-source-global-rules": [
                "No null values or duplicate keys at any JSON object level",
                "No duration/resolution/aspect default is inserted",
                "Prompt required for all21 despite broader official image-only schema",
                "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
                "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
                "No n/output-count/client price fields accepted",
                "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
              ],
              "x-source-material-combinations": [
                "Exact model/card, positive published duration, model resolution/aspect membership and valid frozen quote are all required; independent enum arrays are not proven provider Cartesian combinations.",
                "Use exact published size or compatible resolution/aspect. Omitted options stay omitted; no guessed geometry.",
                "first_frame/last_frame roles each occur at most once; frame_images wins mode precedence over input_references.",
                "provider options are unavailable for this model despite any published passthrough-name allowlist.",
                "Request geometry is required for the pre-generation estimate and reserve. Returned geometry and track time describe the generated output; final charge follows the actual billed configuration.",
                "Video references with *_with_video_input quantity are rejected; image/audio references only where model reference types admit them."
              ]
            },
            "unsupported": [
              "provider",
              "previous_job_id",
              "upscale_factor",
              "creativity"
            ]
          },
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text",
              "image",
              "audio"
            ],
            "optional_controls": [
              "resolution",
              "aspect_ratio",
              "generate_audio",
              "frame_images",
              "input_references",
              "size",
              "seed",
              "callback_url",
              "session_id",
              "trace",
              "user"
            ],
            "required": [
              "model",
              "prompt",
              "duration"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}/content",
                "query": {
                  "index": "actual output index"
                }
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "mode": "submit_once_poll_original",
            "public_id": "video_<uuid>; owner user/key/group scope",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}"
              }
            ],
            "submit_status": 202,
            "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
            "terminal_provider_states": [
              "failed",
              "cancelled",
              "expired"
            ],
            "unknown": "503 result_pending_check + originalid + X-Should-Retry:false; never replay original"
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_video",
            "image_to_video_frame_images",
            "reference_to_video"
          ],
          "output": {
            "content_range_supported": true,
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "condition": "Always present for each completed output.",
                "description": "Zero-based position of this video in the outputs list.",
                "field_path": "outputs[].index",
                "json_schema": {
                  "type": "integer"
                },
                "name": "index",
                "nullable": false,
                "type": "integer"
              },
              {
                "condition": "Present after the owned result is available and a signed URL is created.",
                "description": "Signed HTTPS download URL for this completed video.",
                "field_path": "outputs[].content_url",
                "json_schema": {
                  "type": "string"
                },
                "name": "content_url",
                "nullable": false,
                "type": "string"
              },
              {
                "condition": "A nonempty recorded digest is returned; otherwise null.",
                "description": "SHA-256 digest of the original video bytes; null if unavailable.",
                "field_path": "outputs[].sha256",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "sha256",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when the recorded file size is positive.",
                "description": "Size of the original video file in bytes; null if unavailable.",
                "field_path": "outputs[].size_bytes",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "size_bytes",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned when the measured duration is positive.",
                "description": "Measured video duration in milliseconds; null if unavailable.",
                "field_path": "outputs[].duration_ms",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "duration_ms",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video width in pixels; null if unavailable.",
                "field_path": "outputs[].width",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "width",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video height in pixels; null if unavailable.",
                "field_path": "outputs[].height",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "height",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned together with positive recorded width and height.",
                "description": "Video codec identifier; null if not recorded.",
                "field_path": "outputs[].video_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "video_codec",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                "description": "Whether the video contains an audio track; null if not measured.",
                "field_path": "outputs[].has_audio",
                "json_schema": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "name": "has_audio",
                "nullable": true,
                "type": "boolean | null"
              },
              {
                "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                "description": "Audio codec identifier; null when no identifier is recorded.",
                "field_path": "outputs[].audio_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "audio_codec",
                "nullable": true,
                "type": "string | null"
              }
            ],
            "format": "original MP4 bytes; no normalization/transcode",
            "max_aggregate_seconds": 2400,
            "max_bytes_per_output": 67108864,
            "max_seconds_per_output": 600,
            "result": "signed owned content URLs",
            "unmeasured_fields_nullable": true
          }
        },
        "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"
              }
            ]
          },
          {
            "basis": "Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Harga token video",
            "units": [
              {
                "amount": "0.0084000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000084",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.",
            "dimensions": {
              "conditions": "jenis input: with_video_input",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Harga token video",
            "units": [
              {
                "amount": "0.00495000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_with_video_input",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.00000495",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "reference",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0084000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_without_audio",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000084",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Anggaran ini bukan caj tambahan atau kadar tetap bagi penjanaan yang telah selesai.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Anggaran kos penjanaan",
            "units": [
              {
                "amount": "0.18144",
                "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.18144",
                "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}\"\npython3 - <<'PY_REQUEST'\nfrom pathlib import Path\nPath('request.json').write_text('{\"model\":\"bytedance/seedance-2.0-fast\",\"prompt\":\"A serene mountain landscape at sunset\",\"duration\":4,\"resolution\":\"480p\",\"size\":\"480x480\",\"generate_audio\":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 result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);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 returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image",
          "audio"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "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"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0084000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000084",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "input: with_video_input",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.00495000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_with_video_input",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.00000495",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "reference",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0084000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_without_audio",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000084",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.18144",
                "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.18144",
                "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": "bytedance/seedance-2.0-fast",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{public_id}",
          "GET /v1/videos/{public_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.0084000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.0000084",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.00495000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens_with_video_input",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.00000495",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "reference",
            "unit": "video_token"
          },
          {
            "amount": "0.0084000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens_without_audio",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.0000084",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.18144",
            "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.18144",
            "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": "bytedance/seedance-2.0-fast",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "d23263e3dbce3241aac956b3aba4bb2abbf02d601861b833a6121d23a73a2586",
    "input_html_sha256": "54f05c5452191c07db0627864776dfc177faaada1f643c3f0b514758daed6d08",
    "private_audit_sha256": "e9c35a5ad73e8d0cf5ae84a0234bafc20be750166902d23a871af4180910954d",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/ms/bytedance-seedance-2-0-fast/",
    "description": "ByteDance Seedance 2.0 Fast mencipta adegan audio-video daripada teks, imej, video dan rujukan bunyi. Edisi berorientasikan kelajuannya menyokong pemindahan gerakan dan gaya, suntingan video serta pemanjangan ke hadapan atau ke belakang, dengan output 480p dan 720p yang didokumentasikan.",
    "locale": "ms",
    "md_url": "https://ailoot.ai/models/ms/bytedance-seedance-2-0-fast/index.md",
    "title": "ByteDance: Seedance 2.0 Fast — Ailoot",
    "url": "https://ailoot.ai/models/ms/bytedance-seedance-2-0-fast/"
  },
  "rawModel": {
    "about": "Seedance 2.0 Fast ialah edisi berorientasikan kelajuan daripada keluarga Seedance 2.0 ByteDance Seed. Ia menyokong penjanaan bersama video dan audio serta taklimat multimodal yang dibina daripada teks, imej, video dan bunyi. Keupayaan kreatifnya merangkumi adegan baharu berpandukan rujukan, suntingan rakaman sedia ada dan pemanjangan adegan, manakala tahap output yang didokumentasikan ialah 480p dan 720p.\n\n### Rujukan multimodal: menetapkan peranan bahan\n\nImej boleh membekalkan watak, produk, komposisi atau olahan visual. Video rujukan boleh membekalkan tindakan, gerak kamera atau kesan. Audio rujukan boleh membekalkan timbre suara, melodi muzik atau kandungan dialog. Jelaskan bahagian setiap sumber yang ingin dibawa ke adegan baharu; rujukan lebih berguna apabila mempunyai peranan kreatif tertentu.\n\nContohnya: “Gunakan lampu seramik dalam Image 1 sebagai produk. Ikuti orbit kamera perlahan daripada Video 1, tetapi letakkan lampu di sudut membaca yang tenang. Gunakan Audio 1 untuk suasana muzik.” Output yang dimaksudkan ialah adegan baharu yang menggabungkan rupa, gerakan dan arah bunyi terpilih, bukannya peniruan setiap butiran rujukan yang tidak ditentukan skopnya.\n\nGabungan yang didokumentasikan merangkumi imej dengan audio, imej dengan video, video dengan audio dan ketiga-tiganya bersama. Teks dengan audio sahaja, serta input audio sahaja, tidak disokong. Model turut menyokong teks-ke-video dan penjanaan berpandukan imej daripada bingkai pertama atau pasangan bingkai pertama dan terakhir. Apabila titik akhir tepat menjadi inti taklimat, gunakan aliran kerja titik akhir khusus; menerangkan imej rujukan sebagai titik akhir dalam prompt omni-reference ialah kawalan tidak langsung.\n\n### Menyunting video sedia ada\n\nModel boleh menambah, membuang atau mengubah unsur, menggantikan subjek serta melukis semula atau membaiki bahagian adegan. Kenal pasti video sumber, objek yang perlu diubah dan unsur yang patut kekal. Untuk penambahan, terangkan tempat dan masa kemunculannya. Untuk pembuangan, kenal pasti objek secara konsisten sepanjang klip.\n\nTaklimat suntingan praktikal boleh menggantikan botol biasa dalam demonstrasi dengan botol daripada Image 1, sambil meminta gerakan tangan, latar dan laluan kamera Video 1 dikekalkan. Semak penggantian serta kawasan yang sepatutnya kekal stabil. Arahan pengekalan jelas menjadikan suntingan yang dimaksudkan lebih mudah dinilai berbanding permintaan umum untuk “memperbaik” rakaman.\n\n### Memanjangkan dan menghubungkan klip\n\nSeedance 2.0 Fast menyokong pemanjangan ke hadapan atau ke belakang serta penghubungan dua atau tiga klip dengan peralihan janaan. Untuk pemanjangan, nyatakan sama ada tindakan baharu berlaku sebelum atau selepas video yang dibekalkan dan terangkan tindakan itu. Untuk penghubungan, berikan klip mengikut susunan yang dimaksudkan dan jelaskan peristiwa visual yang menyatukannya.\n\nPemanjangan ringkas biasanya memulangkan sambungan yang baru dibangunkan di sekitar rakaman asal, bukannya menganggap seluruh klip sumber diulang. Jika output patut mengandungi segmen asal, nyatakannya dalam taklimat. Apabila mengisi peralihan antara dua atau tiga video, aliran kerja yang didokumentasikan boleh menggabungkan kandungan asal dan kandungan yang baru dijana. Ini berguna untuk menghubungkan pandangan luas produk dengan syot terperinci melalui gerak kamera yang bermakna.\n\n### Output dan perbezaan edisi\n\nOutput Fast yang didokumentasikan ialah MP4 pada 24 fps, dengan 480p atau 720p, kedalaman warna 8-bit dan klip 4–15 saat. Nisbah yang disokong ialah 21:9, 16:9, 4:3, 1:1, 3:4 dan 9:16. Edisi standard Seedance 2.0 menyenaraikan output 1080p dan 4K secara berasingan; tahap tersebut bukan sebahagian daripada spesifikasi Fast. Keluarga 2.0 menyokong pemulangan bingkai terakhir yang dijana, tetapi tidak menyokong mod pratonton Draft yang berasingan.\n\nAudio boleh dijana bersama rakaman atau ditiadakan untuk klip senyap. Audio yang dijana ialah mono. Bahasa prompt yang didokumentasikan merangkumi bahasa Inggeris, Sepanyol, Indonesia, Portugis dan Jepun. Kekalkan bahasa pertuturan yang konsisten dalam dialog; panduan menasihatkan agar tidak mencampurkan bahasa kecuali nama khas. Untuk adegan bertutur, namakan penutur dan letakkan baris dialog dalam tanda petikan, kemudian nyatakan penyampaian dan kesan bunyi berkaitan. Pastikan persembahan yang diperlukan sesuai dengan panjang klip terpilih.\n\n### Menyediakan rujukan dan mematuhi had input\n\nHad rujukan yang didokumentasikan ialah sehingga sembilan imej, tiga video dan tiga klip audio. Muat naik terus imej atau video rujukan yang mengandungi wajah manusia sebenar tidak diterima dalam profil pengeluar yang didokumentasikan ini; kerja potret menggunakan aliran kerja aset potret yang disokongnya. Setiap klip video atau audio mesti sepanjang 2–15 saat; jumlah tempoh video tidak melebihi 15 saat, dan jumlah tempoh audio secara berasingan tidak melebihi 15 saat. Rujukan video menggunakan MP4 atau MOV pada 24–60 fps dan tidak boleh melebihi 200 MB setiap satu. Rujukan audio menggunakan WAV atau MP3 dan tidak boleh melebihi 15 MB setiap satu. Format imej yang disenaraikan ialah JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC dan HEIF. Setiap imej mesti lebih kecil daripada 30 MB; had keseluruhan badan permintaan ialah 64 MB. Dalam profil input rujukan yang didokumentasikan, lebar dan tinggi imej masing-masing mesti melebihi 300 dan kurang daripada 6,000 piksel, dengan nisbah lebar kepada tinggi melebihi 0.4 dan kurang daripada 2.5. Video rujukan membenarkan 300–6,000 piksel bagi setiap dimensi dan nisbah 0.4–2.5, termasuk nilai sempadan, dengan jumlah 407,696–8,295,044 piksel. Video MP4 atau MOV menggunakan video H.264/AVC atau H.265/HEVC dan audio AAC atau MP3.\n\nSusun aset dan rujuk secara konsisten sebagai Image 1, Video 1 atau Audio 1. Gunakan nama subjek yang kelihatan atau ciri pembezaannya bersama nombor aset. Padankan pembingkaian imej titik akhir dengan nisbah video yang dimaksudkan, kerana ketidakpadanan boleh memangkas imej atau menghasilkan perubahan pembingkaian yang mendadak. Fokuskan taklimat pada ciri yang perlu dipindahkan, peristiwa yang perlu dijana dan perkara yang patut kekal; prompt panjang boleh menyebarkan arahan sehingga butiran sampingan tidak diselesaikan.\n\n### Perancangan syot, teks dan tingkah laku yang diketahui\n\nSusun taklimat kompleks sebagai Shot 1, Shot 2 dan Shot 3, dengan subjek, tindakan, kedudukan dan bunyi yang jelas bagi setiap satu. Panduan mengesyorkan satu gerak kamera bagi setiap syot dan menyatakan bahawa cap masa tepat setiap syot tidak stabil. Berikan setiap watak label stabil dan beberapa ciri pembezaan; gunakan potret kepala jelas dan rujukan seluruh badan yang berasingan, bukannya helaian gabungan watak dari pelbagai sudut apabila identiti wajah penting.\n\nModel boleh menjana teks lazim, termasuk slogan, sari kata dan gelembung pertuturan, dengan arahan warna, gaya, kedudukan dan kemunculannya. Aksara lazim lebih digemari daripada aksara jarang atau simbol khas. Periksa huruf semasa bergerak. Sari kata, logo dan watak pendua yang tidak dikehendaki ialah tingkah laku yang didokumentasikan; kekangan jelas dan rujukan bersih boleh mengurangkannya, tetapi tidak menjamin ketiadaannya. Lebih daripada empat orang rujukan dilaporkan sebagai risiko kestabilan, bukannya had mutlak bilangan fail.\n\nPemanjangan berulang boleh menggandakan kehilangan kualiti imej, dan titik sambungan pemanjangan boleh melompat atau berundur. Hadkan sambungan bertindan dan periksa titik sambungan dalam suntingan. Timbre suara rujukan boleh menyimpang, narasi boleh berakhir dengan bunyi klik, dan aksara Cina polifonik atau jarang boleh tersalah sebut. Periksa baris pertuturan dan audio penutup; pemudaran audio ringkas boleh membantu apabila bunyi terputus. Pemeriksaan ini sebahagian daripada persediaan hasil kreatif, khususnya apabila pertuturan atau kesinambungan watak membawa cerita.",
    "alias_of": null,
    "aliases": [],
    "author": "ByteDance",
    "available": null,
    "canonical_model": "bytedance/seedance-2.0-fast",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "image",
        "video",
        "audio"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.18144",
            "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.18144",
            "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": "Maklumat lengkap tentang harga konfigurasi terdapat dalam butiran."
      }
    ],
    "ctx": null,
    "declared_tariff_references": [
      {
        "client_selectable": false,
        "key": "24999f354c53561f1fcfc3f1",
        "label": "Rujukan harga konfigurasi video",
        "profiles": [
          {
            "basis": "Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.",
            "dimensions": {
              "conditions": "Tiada syarat tambahan dinyatakan dalam kunci harga ini."
            },
            "label": "Harga token video",
            "units": [
              {
                "amount": "0.0084",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "key": "video_token",
                "label": "Video-token price",
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "rate_role": "typed_video_token_primary_reference",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.",
            "dimensions": {
              "conditions": "tetapan audio: without_audio"
            },
            "label": "Harga token video",
            "units": [
              {
                "amount": "0.0084",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "key": "video_token",
                "label": "Video-token price",
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "rate_role": "typed_video_token_primary_reference",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.",
            "dimensions": {
              "conditions": "jenis input: with_video_input"
            },
            "label": "Harga token video",
            "units": [
              {
                "amount": "0.00495",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "key": "video_token",
                "label": "Video-token price",
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "rate_role": "typed_video_token_primary_reference",
                "side": "reference",
                "unit": "video_token"
              }
            ]
          }
        ]
      }
    ],
    "entity_type": "model",
    "formats": [
      "videos"
    ],
    "id": "bytedance/seedance-2.0-fast",
    "input": [
      "text",
      "image",
      "audio"
    ],
    "kind": "video",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "Kadar yang dipaparkan menganggarkan kos sebelum penjanaan. Caj akhir dikira berdasarkan kos yang direkodkan untuk penjanaan asal. Tempoh output yang diukur dan kuantiti ramalan bukan kuantiti akhir yang boleh dibilkan.",
          "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": "Simpan setiap output sebenar milik anda berserta metadata ukuran yang dikembalikan.",
            "defaults": {
              "aspect_ratio": null,
              "duration": null,
              "generate_audio": "endpoint capability flag when published; omitted unknown stays unknown; never guarantees audio track",
              "resolution": null,
              "seed": null,
              "size": null,
              "wire_omissions_preserved": true
            },
            "errors": [
              {
                "condition": "Akses video tidak tersedia, atau ID video ini tidak ditemui.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "Semak akses video. Untuk video sedia ada, gunakan ID awam asalnya dan kunci API yang sama.",
                "type": "not_found_error"
              },
              {
                "condition": "Kunci API tidak sepadan dengan akaun yang disahkan.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "Semak kunci API dan akses akaun anda sebelum menghantar.",
                "type": "authentication_error"
              },
              {
                "condition": "Permintaan tidak dapat dibaca, atau indeks muat turun tidak sah.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "Betulkan badan permintaan. Untuk muat turun, pilih indeks output yang dikembalikan oleh tugas asal.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Harga konfigurasi video yang dipilih tidak dapat ditentukan.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Pilih konfigurasi video yang disokong dan lengkapkan pilihan wajibnya sebelum menghantar permintaan yang dibetulkan.",
                "type": "price_unavailable"
              },
              {
                "condition": "Input video atau tugas sambungan asal tidak sah.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "Gunakan input HTTPS yang sah. Untuk sambungan, gunakan ID video awam asal anda yang telah siap dengan kunci API yang sama.",
                "type": "invalid_request_error"
              },
              {
                "condition": "Baki atau had yang tersedia tidak membenarkan penahanan dana.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "Semak baki dan had yang tersedia sebelum menghantar permintaan baharu.",
                "type": "billing_error"
              },
              {
                "condition": "Pengesahan video, storan atau akses perkhidmatan tidak tersedia buat sementara waktu.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "Tunggu sehingga perkhidmatan tersedia. Jika anda sudah mempunyai ID video, semak tugas asal tersebut dan jangan cipta penjanaan lain.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "Hasil video asal dan caj perlu disemak.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Simpan ID video yang dikembalikan dan semak tugas tersebut. Jangan hantar permintaan penjanaan gantian semasa semakan sedang berjalan.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "Muat turun video sedia ada tidak tersedia buat sementara waktu.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "Semak tugas video yang sama kemudian dan muat turun output sedia ada. Penjanaan baharu mencipta operasi berasingan.",
                "type": "server_error"
              },
              {
                "condition": "Kandungan video belum diterbitkan.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "Semak status tugas asal. Muat turun selepas statusnya melaporkan completed; jika statusnya melaporkan failed, ikuti notis semakan cajnya.",
                "type": "video_not_ready"
              }
            ],
            "hints": [
              "No null values or duplicate keys at any JSON object level",
              "No duration/resolution/aspect default is inserted",
              "Prompt required for all21 despite broader official image-only schema",
              "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
              "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
              "No n/output-count/client price fields accepted",
              "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}/content",
                  "query": {
                    "index": "actual output index"
                  }
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "mode": "submit_once_poll_original",
              "public_id": "video_<uuid>; owner user/key/group scope",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}"
                }
              ],
              "submit_status": 202,
              "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
              "terminal_provider_states": [
                "failed",
                "cancelled",
                "expired"
              ],
              "unknown": "503 result_pending_check + id asal + X-Should-Retry:false; jangan sekali-kali ulang operasi asal"
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-fast"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "Berikan prompt teks dan tempoh dalam saat bulat yang disokong. Gunakan saiz tepat yang disenaraikan, atau resolusi dan nisbah bidang yang menghasilkan dimensi yang disenaraikan.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "Prompt bertulis."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-fast"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images ialah tatasusunan objek dengan type=image_url, image_url yang mengandungi url dan frame_type. Gunakan URL imej HTTPS awam; first_frame dan last_frame masing-masing boleh muncul sekali. Gunakan saiz output yang disenaraikan atau dimensi yang serasi. Jangan tambah rujukan video.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "Prompt bertulis dan imej bingkai."
              },
              {
                "mode": "Reference to video",
                "model": {
                  "enum": [
                    "bytedance/seedance-2.0-fast"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "input_references ialah tatasusunan. Setiap objek mempunyai type=image_url atau type=audio_url serta objek URL sepadan yang mengandungi url. Gunakan pautan HTTPS awam. Gugurkan frame_images untuk memilih mod rujukan. Harga rujukan video tidak dapat ditentukan.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "input_references"
                ],
                "required_material": "Prompt bertulis dan rujukan imej atau audio."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images",
              "reference_to_video"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "Kedudukan video ini dalam senarai output dengan indeks bermula dari sifar.",
                  "field_path": "outputs[].index",
                  "json_schema": {
                    "type": "integer"
                  },
                  "name": "index",
                  "nullable": false,
                  "type": "integer"
                },
                {
                  "condition": "Present after the owned result is available and a signed URL is created.",
                  "description": "URL muat turun HTTPS bertandatangan untuk video siap ini.",
                  "field_path": "outputs[].content_url",
                  "json_schema": {
                    "type": "string"
                  },
                  "name": "content_url",
                  "nullable": false,
                  "type": "string"
                },
                {
                  "condition": "A nonempty recorded digest is returned; otherwise null.",
                  "description": "Ringkasan SHA-256 bagi bait video asal; null jika tidak tersedia.",
                  "field_path": "outputs[].sha256",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "sha256",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when the recorded file size is positive.",
                  "description": "Saiz fail video asal dalam bait; null jika tidak tersedia.",
                  "field_path": "outputs[].size_bytes",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "size_bytes",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned when the measured duration is positive.",
                  "description": "Tempoh video yang diukur dalam milisaat; null jika tidak tersedia.",
                  "field_path": "outputs[].duration_ms",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "duration_ms",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Lebar video dalam piksel; null jika tidak tersedia.",
                  "field_path": "outputs[].width",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "width",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "Ketinggian video dalam piksel; null jika tidak tersedia.",
                  "field_path": "outputs[].height",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "height",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned together with positive recorded width and height.",
                  "description": "Pengecam codec video; null jika tidak direkodkan.",
                  "field_path": "outputs[].video_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "video_codec",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                  "description": "Sama ada video mengandungi trek audio; null jika tidak diukur.",
                  "field_path": "outputs[].has_audio",
                  "json_schema": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "name": "has_audio",
                  "nullable": true,
                  "type": "boolean | null"
                },
                {
                  "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                  "description": "Pengecam codec audio; null apabila tiada pengecam direkodkan.",
                  "field_path": "outputs[].audio_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "audio_codec",
                  "nullable": true,
                  "type": "string | null"
                }
              ],
              "format": "original MP4 bytes; no normalization/transcode",
              "max_aggregate_seconds": 2400,
              "max_bytes_per_output": 67108864,
              "max_seconds_per_output": 600,
              "result": "pautan kandungan bertandatangan milik anda",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "bytedance/seedance-2.0-fast"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "bytedance/seedance-2.0-fast"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "schema": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480p",
                  "720p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "480p",
                    "720p"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "1:1",
                  "3:4",
                  "9:16",
                  "4:3",
                  "16:9",
                  "21:9",
                  "9:21"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "4:3",
                    "16:9",
                    "21:9",
                    "9:21"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "Menggugurkan generate_audio memilih harga dengan audio; false memilih harga tanpa audio. Semak has_audio dalam hasil untuk mengetahui sama ada trek audio dikembalikan.",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  true
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": false,
                "schema": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "Kunci ini digunakan bagi setiap objek bingkai. Gugurkan frame_images untuk permintaan teks sahaja.",
                "content": "Tatasusunan objek bingkai. Setiap objek mempunyai type=image_url, image_url yang mengandungi url dan frame_type=first_frame atau last_frame. Setiap peranan boleh muncul paling banyak sekali. Gunakan pautan HTTPS awam.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "maxItems": 2,
                "max_items": 2,
                "minItems": 1,
                "min_items": 1,
                "name": "frame_images",
                "required": false,
                "schema": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "conditions": "Gugurkan frame_images untuk menggunakan mod rujukan. Gunakan pautan HTTPS awam.",
                "content": "Tatasusunan objek rujukan imej atau audio. Tetapkan type kepada image_url atau audio_url dan berikan objek URL sepadan yang mengandungi url. Harga rujukan video masih tidak dapat ditentukan.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480x480",
                  "480x640",
                  "480x854",
                  "640x480",
                  "854x480",
                  "1120x480",
                  "720x720",
                  "720x960",
                  "720x1280",
                  "720x1680",
                  "960x720",
                  "1280x720",
                  "1680x720"
                ],
                "enum_known": true,
                "name": "size",
                "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                "required": false,
                "schema": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "640x480",
                    "854x480",
                    "1120x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "960x720",
                    "1280x720",
                    "1680x720"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 9223372036854775807,
                "minimum": -9223372036854775808,
                "name": "seed",
                "required": false,
                "schema": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback_url",
                "pattern": "^https://",
                "required": false,
                "schema": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "session_id",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "user",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              }
            ],
            "request_schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "4:3",
                    "16:9",
                    "21:9",
                    "9:21"
                  ]
                },
                "callback_url": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "creativity": false,
                "duration": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "frame_images": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "generate_audio": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "input_references": {
                  "items": {
                    "oneOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "image_url"
                          }
                        },
                        "required": [
                          "type",
                          "image_url"
                        ],
                        "type": "object"
                      },
                      {
                        "additionalProperties": false,
                        "properties": {
                          "audio_url": {
                            "additionalProperties": false,
                            "properties": {
                              "url": {
                                "format": "uri",
                                "pattern": "^https://",
                                "type": "string",
                                "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "type": "object"
                          },
                          "type": {
                            "const": "audio_url"
                          }
                        },
                        "required": [
                          "type",
                          "audio_url"
                        ],
                        "type": "object"
                      }
                    ]
                  },
                  "type": "array"
                },
                "model": {
                  "const": "bytedance/seedance-2.0-fast"
                },
                "previous_job_id": false,
                "prompt": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "provider": false,
                "resolution": {
                  "enum": [
                    "480p",
                    "720p"
                  ]
                },
                "seed": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "640x480",
                    "854x480",
                    "1120x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "960x720",
                    "1280x720",
                    "1680x720"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "trace": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "upscale_factor": false,
                "user": {
                  "maxLength": 256,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt",
                "duration"
              ],
              "title": "Video generation request",
              "type": "object",
              "x-source-global-rules": [
                "No null values or duplicate keys at any JSON object level",
                "No duration/resolution/aspect default is inserted",
                "Prompt required for all21 despite broader official image-only schema",
                "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
                "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
                "No n/output-count/client price fields accepted",
                "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
              ],
              "x-source-material-combinations": [
                "Exact model/card, positive published duration, model resolution/aspect membership and valid frozen quote are all required; independent enum arrays are not proven provider Cartesian combinations.",
                "Use exact published size or compatible resolution/aspect. Omitted options stay omitted; no guessed geometry.",
                "first_frame/last_frame roles each occur at most once; frame_images wins mode precedence over input_references.",
                "provider options are unavailable for this model despite any published passthrough-name allowlist.",
                "Request geometry is required for the pre-generation estimate and reserve. Returned geometry and track time describe the generated output; final charge follows the actual billed configuration.",
                "Video references with *_with_video_input quantity are rejected; image/audio references only where model reference types admit them."
              ]
            },
            "unsupported": [
              "provider",
              "previous_job_id",
              "upscale_factor",
              "creativity"
            ]
          },
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text",
              "image",
              "audio"
            ],
            "optional_controls": [
              "resolution",
              "aspect_ratio",
              "generate_audio",
              "frame_images",
              "input_references",
              "size",
              "seed",
              "callback_url",
              "session_id",
              "trace",
              "user"
            ],
            "required": [
              "model",
              "prompt",
              "duration"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}/content",
                "query": {
                  "index": "actual output index"
                }
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "mode": "submit_once_poll_original",
            "public_id": "video_<uuid>; owner user/key/group scope",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}"
              }
            ],
            "submit_status": 202,
            "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
            "terminal_provider_states": [
              "failed",
              "cancelled",
              "expired"
            ],
            "unknown": "503 result_pending_check + originalid + X-Should-Retry:false; never replay original"
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_video",
            "image_to_video_frame_images",
            "reference_to_video"
          ],
          "output": {
            "content_range_supported": true,
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "condition": "Always present for each completed output.",
                "description": "Zero-based position of this video in the outputs list.",
                "field_path": "outputs[].index",
                "json_schema": {
                  "type": "integer"
                },
                "name": "index",
                "nullable": false,
                "type": "integer"
              },
              {
                "condition": "Present after the owned result is available and a signed URL is created.",
                "description": "Signed HTTPS download URL for this completed video.",
                "field_path": "outputs[].content_url",
                "json_schema": {
                  "type": "string"
                },
                "name": "content_url",
                "nullable": false,
                "type": "string"
              },
              {
                "condition": "A nonempty recorded digest is returned; otherwise null.",
                "description": "SHA-256 digest of the original video bytes; null if unavailable.",
                "field_path": "outputs[].sha256",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "sha256",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when the recorded file size is positive.",
                "description": "Size of the original video file in bytes; null if unavailable.",
                "field_path": "outputs[].size_bytes",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "size_bytes",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned when the measured duration is positive.",
                "description": "Measured video duration in milliseconds; null if unavailable.",
                "field_path": "outputs[].duration_ms",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "duration_ms",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video width in pixels; null if unavailable.",
                "field_path": "outputs[].width",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "width",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video height in pixels; null if unavailable.",
                "field_path": "outputs[].height",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "height",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned together with positive recorded width and height.",
                "description": "Video codec identifier; null if not recorded.",
                "field_path": "outputs[].video_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "video_codec",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                "description": "Whether the video contains an audio track; null if not measured.",
                "field_path": "outputs[].has_audio",
                "json_schema": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "name": "has_audio",
                "nullable": true,
                "type": "boolean | null"
              },
              {
                "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                "description": "Audio codec identifier; null when no identifier is recorded.",
                "field_path": "outputs[].audio_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "audio_codec",
                "nullable": true,
                "type": "string | null"
              }
            ],
            "format": "original MP4 bytes; no normalization/transcode",
            "max_aggregate_seconds": 2400,
            "max_bytes_per_output": 67108864,
            "max_seconds_per_output": 600,
            "result": "signed owned content URLs",
            "unmeasured_fields_nullable": true
          }
        },
        "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"
              }
            ]
          },
          {
            "basis": "Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Harga token video",
            "units": [
              {
                "amount": "0.0084000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000084",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Kadar token video ialah rujukan harga utama. Anggaran harga setiap saat yang dipaparkan sebagai ringkasan ialah rujukan berasingan, bukan caj tambahan.",
            "dimensions": {
              "conditions": "jenis input: with_video_input",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Harga token video",
            "units": [
              {
                "amount": "0.00495000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_with_video_input",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.00000495",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "reference",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0084000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_without_audio",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000084",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "Anggaran ini bukan caj tambahan atau kadar tetap bagi penjanaan yang telah selesai.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Anggaran kos penjanaan",
            "units": [
              {
                "amount": "0.18144",
                "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.18144",
                "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}\"\npython3 - <<'PY_REQUEST'\nfrom pathlib import Path\nPath('request.json').write_text('{\"model\":\"bytedance/seedance-2.0-fast\",\"prompt\":\"A serene mountain landscape at sunset\",\"duration\":4,\"resolution\":\"480p\",\"size\":\"480x480\",\"generate_audio\":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 result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);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 returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image",
          "audio"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "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"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0084000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000084",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "input: with_video_input",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.00495000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_with_video_input",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.00000495",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "reference",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0084000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_without_audio",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000084",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.18144",
                "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.18144",
                "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": "bytedance/seedance-2.0-fast",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{public_id}",
          "GET /v1/videos/{public_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.0084000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.0000084",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.00495000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens_with_video_input",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.00000495",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "reference",
            "unit": "video_token"
          },
          {
            "amount": "0.0084000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens_without_audio",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.0000084",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.18144",
            "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.18144",
            "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": "bytedance/seedance-2.0-fast",
        "request_model_id": "bytedance/seedance-2.0-fast",
        "route_label": "Ultra"
      }
    ],
    "name": "ByteDance: Seedance 2.0 Fast",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.18144,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.18144,
      "varies": false
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "billable_token_source": "usage.completion_tokens",
          "estimated_quantity_formula": "(input_video_duration+output_video_duration)*output_width*output_height*output_fps/1024",
          "image_audio_ref_independent_charge": "not listed separately in this tariff",
          "input_includes_video": false,
          "maker_model_id": "dreamina-seedance-2-0-fast-260128",
          "minimum_token_schedule": "depends on resolution/aspect/output duration; separate official estimate table, actual usage governs",
          "minimum_tokens_when_video_input": false,
          "offline_not_supported": true,
          "quoted_unit": "1000000_video_tokens",
          "resolution": "480p/720p"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.0000112",
            "amount_unit": "usd_per_token",
            "conditions": {
              "billable_token_source": "usage.completion_tokens",
              "estimated_quantity_formula": "(input_video_duration+output_video_duration)*output_width*output_height*output_fps/1024",
              "image_audio_ref_independent_charge": "not listed separately in this tariff",
              "input_includes_video": false,
              "maker_model_id": "dreamina-seedance-2-0-fast-260128",
              "minimum_token_schedule": "depends on resolution/aspect/output duration; separate official estimate table, actual usage governs",
              "minimum_tokens_when_video_input": false,
              "offline_not_supported": true,
              "quoted_unit": "1000000_video_tokens",
              "resolution": "480p/720p"
            },
            "key": "base",
            "label": "base",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "video_token"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "billable_token_source": "usage.completion_tokens",
          "estimated_quantity_formula": "(input_video_duration+output_video_duration)*output_width*output_height*output_fps/1024",
          "image_audio_ref_independent_charge": "not listed separately in this tariff",
          "input_includes_video": true,
          "maker_model_id": "dreamina-seedance-2-0-fast-260128",
          "minimum_token_schedule": "depends on resolution/aspect/output duration; separate official estimate table, actual usage governs",
          "minimum_tokens_when_video_input": true,
          "offline_not_supported": true,
          "quoted_unit": "1000000_video_tokens",
          "resolution": "480p/720p"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.0000066",
            "amount_unit": "usd_per_token",
            "conditions": {
              "billable_token_source": "usage.completion_tokens",
              "estimated_quantity_formula": "(input_video_duration+output_video_duration)*output_width*output_height*output_fps/1024",
              "image_audio_ref_independent_charge": "not listed separately in this tariff",
              "input_includes_video": true,
              "maker_model_id": "dreamina-seedance-2-0-fast-260128",
              "minimum_token_schedule": "depends on resolution/aspect/output duration; separate official estimate table, actual usage governs",
              "minimum_tokens_when_video_input": true,
              "offline_not_supported": true,
              "quoted_unit": "1000000_video_tokens",
              "resolution": "480p/720p"
            },
            "key": "base",
            "label": "base",
            "profile_index": 1,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "video_token"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "no_method_admission_claim": true,
          "scope": "supplier_tariff_reference"
        },
        "dimensions": {},
        "label": "Ailoot Ultra · Tariff components",
        "units": [
          {
            "amount": "0.0084000",
            "amount_unit": "usd_per_thousand_tokens",
            "basis": "video token",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.0000084",
            "key": "video_tokens",
            "label": "video token",
            "native_amount_usd_per_unit": "0.0000084",
            "native_quantity": 1,
            "quantity": 1000,
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.0084000",
            "amount_unit": "usd_per_thousand_tokens",
            "basis": "audio=false",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.0000084",
            "key": "video_tokens_without_audio",
            "label": "video token",
            "native_amount_usd_per_unit": "0.0000084",
            "native_quantity": 1,
            "quantity": 1000,
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.004950000",
            "amount_unit": "usd_per_thousand_tokens",
            "basis": "video_reference_present Source-only tariff component.",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.000004950",
            "key": "video_tokens_with_video_input",
            "label": "video token",
            "native_amount_usd_per_unit": "0.000004950",
            "native_quantity": 1,
            "quantity": 1000,
            "side": "out",
            "unit": "video_token"
          }
        ]
      }
    ],
    "public_id": "bytedance/seedance-2.0-fast",
    "short": "ByteDance Seedance 2.0 Fast mencipta adegan audio-video daripada teks, imej, video dan rujukan bunyi. Edisi berorientasikan kelajuannya menyokong pemindahan gerakan dan gaya, suntingan video serta pemanjangan ke hadapan atau ke belakang, dengan output 480p dan 720p yang didokumentasikan."
  },
  "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": "ByteDance Seedance 2.0 Fast mencipta adegan audio-video daripada teks, imej, video dan rujukan bunyi. Edisi berorientasikan kelajuannya menyokong pemindahan gerakan dan gaya, suntingan video serta pemanjangan ke hadapan atau ke belakang, dengan output 480p dan 720p yang didokumentasikan.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_exact_canonical_sha256": "3fc1c527eb57a0292f684ab1defbecc0c277abea376b55f901df44289d59559d",
    "raw_model_js_projection_sha256": "ed5a87aae9bc514916728b1e4a7d7522d04d2fcc232f8e1b0529cedfe177722c",
    "raw_model_json_sha256": "3fc1c527eb57a0292f684ab1defbecc0c277abea376b55f901df44289d59559d",
    "renderer_sha256": "1dab5ba62521e9568c8b7c82005622cabbf330a075df7cce1f83274a04009460"
  },
  "sourceRevision": "324810c1c2a6c8c00fe1ed4130bdc14f526856c274e6315e53af2f9190290d05"
}
