{"openapi":"3.0.2","info":{"title":"bfl/video-edit-v1","description":"The request body Comfy Router accepts for the model \"bfl/video-edit-v1\", and the response body it returns. The INPUT schema is the same schema the server validates a call against before it reaches the provider, so what is published and what is enforced cannot differ. `x-comfy-router-input-modalities` records the media kinds the model is documented to accept; the request schema is shared across sibling models and may admit media kinds this model ignores. The OUTPUT schema describes the provider's native result document exactly as Router returns it: Router does not validate, narrow or re-envelope the response, so the output schema is descriptive rather than enforced, and Comfy owns no output shape of its own.","version":"6f6d7968d5ed"},"paths":{"/v2/models/bfl/video-edit-v1":{"post":{"operationId":"runRouterModel","summary":"Run bfl/video-edit-v1 synchronously.","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"description":"Request body for the BFL Flux Tools Video Edit v1 API. Charges are based on the delivered output duration; the output length, resolution, aspect ratio and audio come from the source clip.","example":{"prompt":"Remove the orange bucket.","video":"https://example.com/clip.mp4"},"properties":{"prompt":{"description":"Edit instruction. Names the objects, setting, style, on-screen text or dialogue to change; everything not named is preserved.","maxLength":4096,"minLength":1,"type":"string"},"safety_tolerance":{"default":2,"description":"Tolerance level for input and output moderation, 0 being most strict.","maximum":4,"minimum":0,"type":"integer"},"video":{"description":"Video to edit, either an HTTP(S) URL or a base64-encoded MP4. At most 15 seconds of source footage and 50 MiB, with each side at least 160 pixels; sources above 720p are downscaled to 720p.","type":"string"}},"required":["video","prompt"],"type":"object"}}}},"responses":{"200":{"description":"OK - the model's native JSON output, returned unchanged; the schema describes the provider's terminal result document as Router returns it.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/BFLFlux3ResultResponse"},{"properties":{"result":{"description":"The finished generation. Not nullable here: this component's `required` entry is a promise that a `200` carries the result, and a nullable `result` would reduce it to a key-presence check.","properties":{"cost":{"description":"Provider-reported cost of the generation. This is BFL's number, not the Comfy charge.","format":"double","nullable":true,"type":"number"},"duration":{"description":"Provider-reported generation duration in seconds.","format":"double","nullable":true,"type":"number"},"end_time":{"description":"Provider-reported completion time of the generation, in seconds since the Unix epoch. `double` for the same reason as `start_time`.","format":"double","nullable":true,"type":"number"},"prompt":{"description":"The prompt the generation actually ran, after any prompt upsampling.","type":"string"},"sample":{"description":"Signed URL for the generated asset. Router re-hosts the asset onto Comfy storage and rewrites this field, so it is normally a Comfy-hosted URL valid for up to 24 hours - signed for 24 hours when minted, and replayed from a 23-hour memo, so a later poll can hand back one with as little as an hour left; a leaf whose re-host could not be performed keeps BFL's own short-lived delivery URL instead - roughly two hours for video, roughly ten minutes for images. Either way the link expires, so download the asset rather than storing the URL.","format":"uri","type":"string"},"seed":{"description":"The seed the generation used, whether supplied or chosen by the provider. Declared `int64` because BFL returns seeds above 2^31 (e.g. 2784347701), which an unformatted `integer` generates as a 32-bit field in many SDK generators.","format":"int64","type":"integer"},"start_time":{"description":"Provider-reported start time of the generation, in seconds since the Unix epoch. `double`, not `float`: float32 spacing near a present-day epoch value is ~128 seconds, which collapses a whole generation's span to a single decoded value.","format":"double","nullable":true,"type":"number"}},"type":"object"}},"required":["id","status","result"],"type":"object"}],"description":"Comfy Router output schema for the BFL models that return a `sample`: the terminal `GET /v1/get_result` document BFL returns, forwarded unchanged EXCEPT for the re-hosted `result.sample` described below - every other field is BFL's own. Router submits the generation and polls on the caller's behalf, so the body a caller receives is the finished status document rather than the task handle the underlying `/proxy/bfl/*` submit returns.\n`result.sample` is a COMFY-HOSTED signed URL, valid for up to 24 hours: Router re-hosts the generated asset onto Comfy storage and rewrites the leaf, so what a caller receives is a Comfy link and not BFL's own delivery URL (roughly two hours for video, roughly ten minutes for images). Durability is per leaf, not per response: a leaf whose re-host could not be performed keeps BFL's own short-lived URL rather than a Comfy one, and the rest of the document is unaffected — so a caller that stores or replays this document should not assume every URL in it outlives the call. 24 hours is the CEILING, not a guarantee: the Comfy link is signed for 24 hours from the moment it is minted, and Router memoises it for 23 hours, so a later poll or an `Idempotency-Key` replay can hand back a link with as little as an hour left. Either way the link expires, so download the asset rather than storing the URL. The image routes additionally populate `prompt`, `seed` and the timing fields below.\n`bfl/flux-3-video` is described by `BFLFlux3VideoRouterOutput` instead, because its `draft: true` mode answers with `result.draft_cache` and no `sample`.\nThe composition is deliberate. `BFLFlux3ResultResponse` carries the envelope (`id`, `status`, `progress`, `cost`); the second member adds the image-result fields `BFLFlux3Result` omits and requires a non-null `result`. Requiring it is safe on THIS body because a BFL task that terminated without an asset is answered as a Comfy Router error (`provider_failed`) rather than with the provider document, so a `200` here always carries the finished result.\n`status` is deliberately NOT narrowed to the `BFLStatus` enum. Router forwards this field exactly as BFL spelled it, and the poll classifier (`routerpollstate.classifyBFL`) compares this field only after `strings.ToLower(strings.TrimSpace(...))` — so a terminal success may legitimately spell it `ready` rather than `Ready`, which a title-cased enum would reject.","example":{"cost":null,"id":"b2e0c1a4-0f2f-4a55-9f2e-2f9a1c0d4e77","progress":null,"result":{"cost":null,"duration":3.4,"end_time":1767225603.4,"prompt":"A watercolor painting of a lighthouse at dawn, soft light on the water","sample":"https://example.invalid/bfl/flux-pro-1.1/sample.png","seed":2784347701,"start_time":1767225600},"status":"Ready"}}}}}}}}},"components":{"schemas":{"BFLFlux3Result":{"description":"Completed FLUX 3 video result.","properties":{"cost":{"description":"Provider-reported task cost, currently null ahead of BFL GA.","format":"float","nullable":true,"type":"number"},"sample":{"description":"Signed URL for the generated asset. The asset is re-hosted onto Comfy storage and this field rewritten to the Comfy-hosted URL, valid for 24 hours; a result whose re-host could not be performed keeps BFL's own short-lived delivery URL instead - roughly two hours for video, roughly ten minutes for images. Either way the link expires, so download the asset rather than storing the URL.","format":"uri","type":"string"}},"required":["sample"],"type":"object"},"BFLFlux3ResultResponse":{"description":"Current state of an asynchronous FLUX 3 task.","properties":{"cost":{"description":"Provider-reported cost in credits, populated once the task is Ready.","format":"float","nullable":true,"type":"number"},"id":{"description":"BFL task identifier.","type":"string"},"progress":{"description":"Optional generation progress reported by BFL.","format":"float","maximum":1,"minimum":0,"nullable":true,"type":"number"},"result":{"allOf":[{"$ref":"#/components/schemas/BFLFlux3Result"}],"nullable":true},"status":{"description":"Task status: Pending, Reasoning, Generating, Ready, Request Moderated, Content Moderated, Error, or Task not found.","type":"string"}},"required":["id","status"],"type":"object"}},"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"},"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"x-comfy-router-model-id":"bfl/video-edit-v1","x-comfy-input-schema-authored":true,"x-comfy-output-schema-authored":true,"x-comfy-router-input-modalities":["video","text"],"x-comfy-router-output-modalities":["video"]}
