Black Forest Labs: FLUX.3 Video
FLUX 3 Video skapar klipp med synkroniserad dialog, effekter och atmosfär från text, fixerade bilder eller ett klipp som ska fortsättas. Nyckelbildrutor, komposition med flera tagningar och förädling av utkast hjälper till att utveckla en styrd sekvens och behålla den valda tagningen.
Om modellen
Den här beskrivningen omfattar modellens förmågor. Tillgängliga indata, utdata och alternativ i Ailoot anges nedan för den valda metoden.
FLUX 3 Video är Black Forest Labs multimodala modell för att generera video med synkroniserat ljud. Den skapar scener från ett textuppdrag, bygger rörelse runt fixerade bilder eller fortsätter ett befintligt klipp. Tal, effekter och atmosfär kan genereras tillsammans med bildrutorna, vilket stöder en kort scen där kamerarörelse, handling och ljud utformas som en sekvens.
Beskriv motiv, miljö, synlig handling, kamerabeteende och ljud för text-till-video. En användbar produktscen kan börja med en vid vy, röra sig mot en materialdetalj och sluta med produkten i användning. Uppdrag med flera tagningar kan namnge varje tagning och övergången mellan kameravinklar och hålla motiv och visuell stil konsekventa genom sekvensen. Typografi kan förekomma i scenen, så ange exakta ord och deras placering när en skylt eller titel är viktig. Modellen omfattar realfilm, animation, rörlig grafik och stiliserade uttryck.
Bild-till-video använder en till tio nyckelbilder. En enda bild fastställer öppningsbildrutan; ett par fixerar början och slutet, medan ordnade bilder med tidsstämplar styr specifika ögonblick i klippet. Bilderna blir bildrutor i videon i stället för att bara tjäna som allmänna stilreferenser. Med tre eller fler bilder utan tidsstämplar kräver producenten en uttrycklig längd: den första och sista fixerar slutpunkterna och de andra placeras jämnt mellan dem. Tidsstämplade bildrutor måste vara i tidsordning; automatisk längd går till den sista tidsstämpeln avrundad uppåt, inom maxgränsen på 20 sekunder. Förbered nyckelbilder med kompatibla motiv, bildutsnitt och visuella detaljer och beskriv sedan rörelsen mellan dem. Vid ett produktavslöjande kan den första bilden visa det stängda objektet och den sista det öppnade arrangemanget, med handlingen däremellan definierad i prompten.
Videofortsättning tar vid från det angivna klippets sista bildrutor. Lanseringsarbetsflödet använder upp till fyra sekunder av befintlig video och ljud som sammanhang för nästa handling och för kamerabeteende, rörelse och ljud över skarven. Välj ett källslut som tydligt fastställer vart motiv och kamera är på väg och beskriv vad som händer sedan. Fortsättning skiljer sig från att skriva om en befintlig tagning: FLUX Video Edit är en separat redigeringsmodell och blir inte del av genereringsmodellen bara för att båda tar emot video.
Text- och bildstyrd generering stöder klipp från 5 till 20 sekunder. Den lägesspecifika översikten ger videofortsättning ett utdataintervall på 5–15 sekunder. Längd och bildförhållande kan väljas automatiskt, eller uppdraget kan ange en stödd liggande, kvadratisk eller stående form, inklusive 21:9, 2:1, 16:9, 4:3, 1:1, 3:4, 9:16 och 9:21. Utdata är 24 bildrutor per sekund. Välj längden utifrån ett litet antal synliga handlingar i stället för att försöka få in en hel berättelse i en enda kort generering.
HD-utdata kommer direkt från genereringen; FHD, QHD och UHD färdigställer samma scen med en videouppskalare. För 16:9 är de levererade dimensionerna 1280 × 704, 1920 × 1088, 2560 × 1440 respektive 3840 × 2176. Dimensionerna anpassas till multiplar av 32, så en namngiven upplösningsklass kan skilja sig från en konventionell leveransstorlek. Beskär den färdiga bildrutan när en exakt standardyta behövs och bevara det viktiga innehållet vid kanterna. Den högre upplösningen är ett färdigställandesteg snarare än en annan tolkning av tagningen.
Inbyggt ljud är aktiverat som standard och kan stängas av för ett tyst klipp. Citera repliken för dialog, identifiera talaren och beskriv framförandet; flerspråkigt tal, accenter och läppsynkronisering ingår i modellens ljud- och videoförmågor. Håll dialog och ljudsignaler kopplade till den synliga händelsen, till exempel ett lock som stängs eller fotsteg som avlägsnar sig. Granska röst, timing och talad ordalydelse tillsammans med bilden i stället för att behandla ljudet som ett orelaterat lager som läggs till efter genereringen.
Draft-läge skapar en HD-förhandsvisning och ett utkastpaket. Förädla det valda paketet för att rendera just den genereringen med full kvalitet; att skicka samma prompt som en ny begäran om full rendering är en ny tolkning och kan ge en annan tagning. Utkast använder bara HD, medan förädling kan välja de fyra upplösningsklasserna och har FHD som standard. Det ger en praktisk följd där handling och komposition utforskas först och den valda tagningen sedan färdigställs i avsedd leveransstorlek.
Producentens arbetsflöde returnerar en uppgiftsidentifierare innan MP4-filen är klar och tillhandahåller sedan det färdiga klippet när bearbetningen slutförts. Signerade resultatadresser upphör att gälla efter cirka två timmar, så spara den faktiska resursen när tagningen har valts. Granska nyckelbildsövergångar, klipp, typografi, motivdetaljer och ljudskarv mot uppdraget. För en längre sekvens bevarar du den lyckade tagningens referenser och slutkontext som indata till nästa klipp i stället för att anta att en kort begäran innehåller hela produktionen.
Ailoot Ultra · Video POST /v1/videos black-forest-labs/flux-3-video
black-forest-labs/flux-3-video
black-forest-labs/flux-3-videoStart
FLUX 3 Video skapar klipp med synkroniserad dialog, effekter och atmosfär från text, fixerade bilder eller ett klipp som ska fortsättas. Nyckelbildrutor, komposition med flera tagningar och förädling av utkast hjälper till att utveckla en styrd sekvens och behålla den valda tagningen.
- Godkända indata
- Text · Bilder
- Resultat
- Video
Tillgängligt i Ailoot · indata & metoder
Ailoot Ultra · Video POST /v1/videos
- Indatatyper
text,image- Utdatatyper
video- Utdataformat
- ursprungliga MP4-byte; ingen normalisering/omkodning
| Fält | Typ | Krav | Värden & gränser | Standard |
|---|---|---|---|---|
Fältmodel | Typstring | KravObligatoriskt | Värden & gränser black-forest-labs/flux-3-video | Standard— |
Fältprompt | Typstring | KravObligatoriskt | Värden & gränser | Standard— |
Fältduration | Typinteger | KravObligatoriskt | Värden & gränser 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 Minimum: 1 Maximum: 600 | Standard— |
Fältresolution | Typstring | KravValfritt | Värden & gränser 720p, 1080p | Standard— |
Fältaspect_ratio | Typstring | KravValfritt | Värden & gränser 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | Standard— |
Fältgenerate_audio | Typboolean | KravValfritt | Värden & gränser false, true | Standard— |
Fältframe_images | Typarray | KravValfritt | Värden & gränser Minsta antal objekt: 1 Maximalt antal objekt: 2 Indatainnehåll: Array med bildruteobjekt. Varje objekt har type=image_url, image_url som innehåller url samt frame_type. Använd en HTTPS URL till en bild och sätt frame_type till first_frame eller last_frame. Varje bildruteroll förekommer högst en gång. Exakta nycklar: type, image_url, frame_type Villkor: Dessa nycklar beskriver varje bildruteobjekt; image_url innehåller endast url. Utelämna frame_images för en begäran med enbart text. | Standard— |
Fältinput_references | Typarray | KravValfritt | Värden & gränser | Standard— |
Fältprevious_job_id | Typstring | KravValfritt | Värden & gränser Mönster: ^video_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ | Standard— |
Fältcallback_url | Typstring | KravValfritt | Värden & gränser Mönster: ^https:// | Standard— |
Fältsession_id | Typstring | KravValfritt | Värden & gränser | Standard— |
Fälttrace | Typobject | KravValfritt | Värden & gränser | Standard— |
Fältuser | Typstring | KravValfritt | Värden & gränser | Standard— |
Kombinationer av indatamaterial
Text till video · En skriven prompt. · Krävs: model, prompt, duration
Ange prompt som text och längd i hela sekunder. Välj en upplösning som stöds och vid behov ett bildförhållande.
model: Typ: string · black-forest-labs/flux-3-video
prompt: Typ: string · Maximalt antal UTF-8-byte: 10 000 · Minst ett tecken som inte är blanksteg krävs: Ja
Bild till video · En skriven prompt och en bild för den första bildrutan. · Krävs: model, prompt, duration, frame_images
frame_images är en array. Varje bildruteobjekt har type, image_url och frame_type; image_url innehåller url. Sätt type till image_url. Använd first_frame med valfri last_frame. Varje bildruteroll förekommer högst en gång. Ange en offentlig HTTPS URL till en bild för varje bildruta. Välj en upplösning som stöds och vid behov ett bildförhållande.
Exakta nycklar: type, image_url, frame_type
model: Typ: string · black-forest-labs/flux-3-video
prompt: Typ: string · Maximalt antal UTF-8-byte: 10 000 · Minst ett tecken som inte är blanksteg krävs: Ja
Continue a video · En skriven prompt och din färdiga originalvideo. · Krävs: model, prompt, duration, previous_job_id
Sätt previous_job_id till det offentliga video-ID:t för din färdiga originalvideo. Använd samma modell, konto och API-nyckel. Behåll dess befintliga uppgiftsidentitet; denna begäran skapar en separat fortsättningsuppgift. Välj en upplösning som stöds och vid behov ett bildförhållande.
model: Typ: string · black-forest-labs/flux-3-video
prompt: Typ: string · Maximalt antal UTF-8-byte: 10 000 · Minst ett tecken som inte är blanksteg krävs: Ja
Metodparametrar och livscykel
| Parameter | Avtal |
|---|---|
Parametercontent_type | Avtalapplication/json |
Parameterrequired | Avtalmodel, prompt, duration |
Parametermaterial_types | Avtaltext, image |
Parameteradditional_properties | Avtalfalse |
Parameteroptional_controls | Avtalresolution, aspect_ratio, generate_audio, frame_images, input_references, previous_job_id, callback_url, session_id, trace, user |
Livscykel: submit_once_poll_original
GET /v1/videos/{public_id}
GET /v1/videos/{public_id}/content
Priser
Så beräknas slutavgiften
De visade priserna används för att uppskatta kostnaden före genereringen. Den slutliga debiteringen beräknas utifrån den kostnad som registrerats för den ursprungliga genereringen. Uppmätt längd på resultatet och uppskattade mängder utgör inte den slutliga debiterbara mängden.
Tariffuppgifter lägger inte till begäransalternativ. Parametrar som stöds anges för den valda metoden.
- Snabbt läge
- Ej angivet När snabbt läge är valt
- Flex-läge
- Ej angivet När läget flex är valt
- Högsta resonemangsnivå
- Ej angivet När den högsta resonemangsnivån använder standardjusteringen (default)
Uppskattade priser för jämförelse
Priser efter konfiguration
Matcha varje avgift mot de visade villkoren. Använd ett pris för varje uppsättning alternativa konfigurationer.
| Konfiguration | Prislista | Prognostiserad mängd | Avgiftskomponent | Referensläge | Debiteringsenhet | Debiteringsvillkor | Avgift |
|---|---|---|---|---|---|---|---|
| KonfigurationGrundpriser för token | PrislistaGrundpris | Prognostiserad mängd— | Avgiftskomponent— | Referensläge— | Debiteringsenhet— | Debiteringsvillkor— | Avgift Indata · Indatatoken · Uppskattning endast för jämförelse — / 1K token Utdata · Utdatatoken · Uppskattning endast för jämförelse — / 1K token Indata · Cacheläsning · Uppskattning endast för jämförelse — / 1K token Indata · Skrivning till cache · Uppskattning endast för jämförelse — / 1K token Indata · Skrivning till cache, 1 tim · Uppskattning endast för jämförelse — / 1K token |
| KonfigurationText till video · Bild till video (bildrutor) · referenspris | Prislista— | Prognostiserad mängd— | Avgiftskomponentreference_output_rate | ReferenslägeText till video · Bild till video (bildrutor) | Debiteringsenhetper utdatasekund | Debiteringsvillkor— | Avgift Utdata · Referenstaxa per sekund utgående video · Uppskattning endast för jämförelse $0.34 per utdatasekund |
| KonfigurationVideopris | Prislista— | Prognostiserad mängd— | Avgiftskomponent— | Referensläge— | Debiteringsenhetper videosekund | Debiteringsvillkorresolution: 1080p | Avgift Utdata · Videopris · Uppskattning endast för jämförelse $0.58 per videosekund |
| KonfigurationVideopris | Prislista— | Prognostiserad mängd— | Avgiftskomponent— | Referensläge— | Debiteringsenhetper videosekund | Debiteringsvillkorresolution: 720p | Avgift Utdata · Videopris · Uppskattning endast för jämförelse $0.34 per videosekund |
| KonfigurationVideopris | Prislista— | Prognostiserad mängd— | Avgiftskomponent— | Referensläge— | Debiteringsenhetper videosekund | Debiteringsvillkorindata: video_continuation; upplösning: 1080p | Avgift Utdata · Videopris · Uppskattning endast för jämförelse $1.06 per videosekund |
| KonfigurationVideopris | Prislista— | Prognostiserad mängd— | Avgiftskomponent— | Referensläge— | Debiteringsenhetper videosekund | Debiteringsvillkorindata: video_continuation; upplösning: 720p | Avgift Utdata · Videopris · Uppskattning endast för jämförelse $0.82 per videosekund |
| KonfigurationUppskattad genereringskostnad | Prislista— | Prognostiserad mängduppskattning för en generering | Avgiftskomponent— | Referensläge— | Debiteringsenhet— | Debiteringsvillkor— | Avgift Utdata · Uppskattad genereringskostnad · Uppskattning endast för jämförelse $1.7 uppskattning före generering Denna uppskattning är varken en extra avgift eller ett fast pris för den slutförda genereringen. |
Ailoot reserverar ett uppskattat belopp före en begäran. Efter resultatet slutregleras avgiften utifrån uppmätt förbrukning. Slutreglering för strömning använder den slutliga förbrukningsposten. Så fungerar reservation och slutreglering →
Detaljer om referenstariffen
Referensprislistor på modellnivå ändrar inte metodval, prisuppgifter eller avgifter. Aktiva avgifter använder priserna för den valda Ailoot-metoden.
Prisreferenser för videokonfigurationer
Priser efter konfiguration
Matcha varje avgift mot de visade villkoren. Använd ett pris för varje uppsättning alternativa konfigurationer.
| Konfiguration | Debiteringsvillkor | Avgift |
|---|---|---|
| KonfigurationVideopris | DebiteringsvillkorInget ytterligare villkor anges i denna prisnyckel. | Avgift Utdata · Videopris $0.34 per videosekund Publicerad prisreferens för den visade konfigurationen. Den slutliga debiteringen följer den konfiguration som faktiskt debiterades. |
| KonfigurationVideopris | Debiteringsvillkorresolution: 720p | Avgift Utdata · Videopris $0.34 per videosekund Publicerad prisreferens för den visade konfigurationen. Den slutliga debiteringen följer den konfiguration som faktiskt debiterades. |
| KonfigurationVideopris | Debiteringsvillkorresolution: 1080p | Avgift Utdata · Videopris $0.58 per videosekund Publicerad prisreferens för den visade konfigurationen. Den slutliga debiteringen följer den konfiguration som faktiskt debiterades. |
| KonfigurationVideopris | Debiteringsvillkorindata: video_continuation; upplösning: 720p | Avgift Utdata · Videopris $0.82 per videosekund Publicerad prisreferens för den visade konfigurationen. Den slutliga debiteringen följer den konfiguration som faktiskt debiterades. |
| KonfigurationVideopris | Debiteringsvillkorindata: video_continuation; upplösning: 1080p | Avgift Utdata · Videopris $1.06 per videosekund Publicerad prisreferens för den visade konfigurationen. Den slutliga debiteringen följer den konfiguration som faktiskt debiterades. |
Exempelbegäranden
Ailoot Ultra · Video
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
from pathlib import Path
Path('request.json').write_text('{"aspect_ratio":"16:9","duration":8,"model":"black-forest-labs/flux-3-video","prompt":"A serene mountain landscape at sunset","resolution":"720p"}', encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path('result.json').read_text())
print(json.dumps(r,ensure_ascii=False,indent=2))
print('Keep the complete JSON and response headers; do not resubmit an unknown creation.')
PY_RESULT
Ta emot och spara resultat
Ailoot Ultra · Video
signerade innehållslänkar som du äger
GET /v1/videos/{public_id}GET /v1/videos/{public_id}/content
Kontrollera jobbstatus
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_STATUS_URL'
import json
from pathlib import Path
from urllib.parse import quote
r=json.loads(Path('result.json').read_text())
if not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')
Path('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))
PY_STATUS_URL
curl --fail-with-body --silent --show-error "$(cat status-url.txt)" \
-H "Authorization: Bearer $AILOOT_API_KEY" -D status-headers.txt -o status.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path('status.json').read_text())
print(json.dumps(r,ensure_ascii=False,indent=2))
print('Keep the complete JSON and response headers; do not resubmit an unknown creation.')
PY_RESULT
Andra innehållsläsningar
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_ASSETS'
import json,os,subprocess
from pathlib import Path
from urllib.parse import urljoin,urlsplit
r=json.loads(Path('status.json').read_text())
if r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')
if not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')
urls=[]
for i,u in enumerate(r.get('data',[])):
if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')
urls.append((str(i),u))
for label,path in urls:
u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)
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')
target=Path('owned-'+label+'.bin')
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)
print('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')
PY_ASSETS
Behåll alla färdiga resultat
Spara varje färdig video eller returnerad fil; hämta varje faktiskt returnerad resurs-URL.
Behåll varje faktiskt resultat som du äger och dess returnerade, uppmätta metadata.
Om det ursprungliga svaret behöver kontrolleras
503 result_pending_check + ursprungligt id + X-Should-Retry:false; upprepa aldrig originalet
Svarsfält
| Fält | Typ | Betydelse |
|---|---|---|
Fältindex | Typinteger | BetydelseNollbaserad position för denna video i utdatalistan. |
Fältcontent_url | Typstring | BetydelseSignerad HTTPS URL för hämtning av denna färdiga video. |
Fältsha256 | Typstring | null | BetydelseSHA-256-kontrollsumma för den ursprungliga videons byte; null om den inte är tillgänglig. |
Fältsize_bytes | Typinteger | null | BetydelseStorleken på den ursprungliga videofilen i byte; null om den inte är tillgänglig. |
Fältduration_ms | Typinteger | null | BetydelseUppmätt videolängd i millisekunder; null om den inte är tillgänglig. |
Fältwidth | Typinteger | null | BetydelseVideobredd i pixlar; null om den inte är tillgänglig. |
Fältheight | Typinteger | null | BetydelseVideohöjd i pixlar; null om den inte är tillgänglig. |
Fältvideo_codec | Typstring | null | BetydelseIdentifierare för videokodek; null om ingen har registrerats. |
Fälthas_audio | Typboolean | null | BetydelseOm videon innehåller ett ljudspår; null om detta inte har mätts. |
Fältaudio_codec | Typstring | null | BetydelseIdentifierare för ljudkodek; null när ingen identifierare har registrerats. |
Fel och nästa steg
| Svar | Villkor | Nästa steg |
|---|---|---|
Svar404 · not_found_error | VillkorVideoåtkomst är inte tillgänglig eller detta video-ID hittades inte. | Nästa stegKontrollera videoåtkomst. För en befintlig video använder du dess ursprungliga offentliga ID och samma API-nyckel. |
Svar401 · authentication_error | VillkorAPI-nyckeln motsvarar inte det autentiserade kontot. | Nästa stegKontrollera din API-nyckel och kontoåtkomst innan du skickar in. |
Svar400 · invalid_request_error | VillkorBegäran kunde inte läsas eller hämtningsindexet är ogiltigt. | Nästa stegKorrigera begäranskroppen. Vid hämtning väljer du ett utdataindex som returnerats av den ursprungliga uppgiften. |
Svar422 · price_unavailable | VillkorDen valda videokonfigurationen kan inte prissättas. | Nästa stegVälj en videokonfiguration som stöds och fyll i dess obligatoriska alternativ innan du skickar en korrigerad begäran. |
Svar422 · invalid_request_error | VillkorVideoindata eller den ursprungliga fortsättningsuppgiften är ogiltig. | Nästa stegAnvänd giltiga HTTPS-indata. För fortsättning använder du det färdiga originalets offentliga video-ID med samma API-nyckel. |
Svar402 · billing_error | VillkorDet tillgängliga saldot eller gränserna medger ingen reservation. | Nästa stegKontrollera ditt tillgängliga saldo och dina gränser innan du skickar en ny begäran. |
Svar503 · server_error | VillkorVideoverifiering, lagring eller tjänsteåtkomst är tillfälligt otillgänglig. | Nästa stegVänta tills tjänsten är tillgänglig. Om du redan har ett video-ID kontrollerar du den ursprungliga uppgiften i stället för att skapa en ny generering. |
Svar503 · result_pending_check | VillkorDet ursprungliga videoresultatet och debiteringen behöver kontrolleras. | Nästa stegBehåll det returnerade video-ID:t och kontrollera den uppgiften. Skicka ingen ersättande genereringsbegäran medan den kontrolleras. |
Svar503 · owned_result_unavailable | VillkorHämtningen av den befintliga videon är tillfälligt otillgänglig. | Nästa stegKontrollera samma videouppgift senare och hämta dess befintliga resultat. En ny generering skapar en separat operation. |
Svar409 · video_not_ready | VillkorVideoinnehållet har inte publicerats. | Nästa stegKontrollera den ursprungliga uppgiftens status. Hämta när den rapporterar completed; om den rapporterar failed följer du dess meddelande om debiteringskontroll. |
Alias
Modellalias
Ailoot Ultra black-forest-labs/flux-3-video
Alias för metodsökvägar
Använd metodsökvägarna som visas ovan.
Relaterade anropar-ID:n
FAQ · Black Forest Labs: FLUX.3 Video
- Vilka indata och resultat finns?
POST /v1/videos·black-forest-labs/flux-3-video:text,image→video- Vilka fält använder begäran?
POST /v1/videos·black-forest-labs/flux-3-video:model,prompt,duration,resolution,aspect_ratio,generate_audio,frame_images,input_references,previous_job_id,callback_url,session_id,trace,user- Vilka gränser gäller?
POST /v1/videos·black-forest-labs/flux-3-video:duration.minimum:1;duration.maximum:600;frame_images.max_items:2;frame_images.min_items:1