{"x-fal-media":{"send":[{"required":true,"constraints":{"height":704,"width":1280,"frameRate":24},"kind":"video"}],"receive":[{"settings":{"height":704,"width":1280,"frameRate":24},"kind":"video"}],"perspective":"client"},"x-fal-openapi":{"url":"./openapi.json","operationId":"start_session_start_session_post"},"channels":{"control":{"address":"fal","servers":[{"$ref":"#/servers/session"}],"messages":{"server.session_info":{"$ref":"#/components/messages/server.session_info"},"server.stream_exhausted":{"$ref":"#/components/messages/server.stream_exhausted"},"server.error":{"$ref":"#/components/messages/server.error"},"server.configured":{"$ref":"#/components/messages/server.configured"},"client.ping":{"$ref":"#/components/messages/client.ping"},"server.reset_applied":{"$ref":"#/components/messages/server.reset_applied"},"server.pong":{"$ref":"#/components/messages/server.pong"},"client.reset":{"$ref":"#/components/messages/client.reset"},"server.stats":{"$ref":"#/components/messages/server.stats"},"client.prompt":{"$ref":"#/components/messages/client.prompt"},"client.configure":{"$ref":"#/components/messages/client.configure"},"server.prompt_applied":{"$ref":"#/components/messages/server.prompt_applied"},"client.stop":{"$ref":"#/components/messages/client.stop"}}}},"asyncapi":"3.1.0","info":{"description":"Client contract for the WebRTC session created by the linked OpenAPI operation.","version":"1.0.0","title":"EdenLive5BVideo realtime client API"},"servers":{"session":{"protocol":"webrtc","description":"Runtime-assigned WebRTC peer negotiated over HTTP.","variables":{"sessionHost":{"description":"Logical peer supplied by the OpenAPI session negotiation.","default":"runtime-assigned.invalid"}},"x-fal-negotiated-by":"start_session_start_session_post","host":"{sessionHost}"}},"components":{"schemas":{"EdenLive5BVideoServerSessionInfoMessage":{"required":["type","session","info"],"title":"SessionInfoMessage","properties":{"session":{"title":"Session","enum":["video","game"],"type":"string"},"info":{"title":"Info","type":"object"},"type":{"const":"session_info","title":"Type","default":"session_info","type":"string"}},"type":"object"},"EdenLive5BVideoServerPongMessage":{"required":["type"],"description":"Reply to a ``ping``, echoing the client's timestamp for RTT measurement.\n\nThe echoed timestamp has two wire spellings: apps that handle ``ping``\nthemselves echo ``ts``; the fallback handler in\n:class:`registry.wma.sdk.Session` replies with ``client_ts``. Clients read\nwhichever is present. ``server_ts`` is the (unsynchronized) runner clock; it\nonly shows how the round trip divides once the client has an offset estimate.","title":"PongMessage","properties":{"client_ts":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Client Ts","default":null},"server_ts":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Server Ts","default":null},"ts":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ts","default":null},"type":{"const":"pong","title":"Type","default":"pong","type":"string"}},"type":"object"},"EdenLive5BVideoClientPingMessage":{"required":["type"],"description":"Latency probe; the server echoes ``ts`` back in a ``pong`` payload.","title":"PingMessage","properties":{"ts":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ts","default":null},"type":{"const":"ping","title":"Type","type":"string"}},"type":"object"},"EdenLive5BVideoServerControlInfo":{"required":["key","label"],"title":"ControlInfo","properties":{"label":{"title":"Label","type":"string"},"key":{"title":"Key","type":"string"},"hold":{"title":"Hold","default":true,"type":"boolean"},"command":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Semantic command name.","title":"Command","default":null}},"type":"object"},"EdenLive5BVideoServerControlErrorMessage":{"required":["type","error"],"title":"ControlErrorMessage","properties":{"retryable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Retryable","default":null},"error":{"title":"Error","type":"string"},"type":{"const":"error","title":"Type","default":"error","type":"string"}},"type":"object"},"EdenLive5BVideoServerStreamExhaustedMessage":{"required":["type"],"description":"The model has no more frames to send and the current peer is closing.\nClients must negotiate a new session to continue.","title":"StreamExhaustedMessage","properties":{"type":{"const":"stream_exhausted","title":"Type","default":"stream_exhausted","type":"string"}},"type":"object"},"EdenLive5BVideoServerConfiguredMessage":{"required":["type"],"title":"ConfiguredMessage","properties":{"game":{"anyOf":[{"$ref":"#/components/schemas/EdenLive5BVideoServerGameInfo"},{"type":"null"}],"default":null},"type":{"const":"configured","title":"Type","default":"configured","type":"string"}},"type":"object"},"EdenLive5BVideoClientPromptMessage":{"required":["type","prompt"],"additionalProperties":false,"description":"Change the scene description; applied at the next chunk boundary.","title":"PromptMessage","properties":{"prompt":{"x-fal-ui":{"order":0,"field":"textarea"},"description":"Text the model renders the scene with. Keeps the current world.","maxLength":2000,"title":"Scene description","minLength":1,"type":"string"},"type":{"x-fal-ui":{"hidden":true},"const":"prompt","title":"Type","default":"prompt","type":"string"}},"type":"object"},"EdenLive5BVideoServerGameInfo":{"required":["id","title","description","prompt","controls","instructions","actions"],"title":"GameInfo","properties":{"prompt":{"title":"Prompt","type":"string"},"description":{"title":"Description","type":"string"},"instructions":{"items":{"type":"string"},"title":"Instructions","type":"array"},"title":{"title":"Title","type":"string"},"actions":{"items":{"type":"string"},"title":"Actions","type":"array"},"controls":{"items":{"$ref":"#/components/schemas/EdenLive5BVideoServerControlInfo"},"title":"Controls","type":"array"},"id":{"title":"Id","type":"string"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url","default":null}},"type":"object"},"EdenLive5BVideoClientStopMessage":{"required":["type"],"additionalProperties":false,"description":"End the session.","title":"StopMessage","properties":{"type":{"x-fal-ui":{"hidden":true},"const":"stop","title":"Type","default":"stop","type":"string"}},"type":"object"},"EdenLive5BVideoServerResetAppliedMessage":{"required":["type"],"title":"ResetAppliedMessage","properties":{"game":{"anyOf":[{"$ref":"#/components/schemas/EdenLive5BVideoServerGameInfo"},{"type":"null"}],"default":null},"type":{"const":"reset_applied","title":"Type","default":"reset_applied","type":"string"}},"type":"object"},"EdenLive5BVideoServerPromptAppliedMessage":{"required":["type"],"title":"PromptAppliedMessage","properties":{"type":{"const":"prompt_applied","title":"Type","default":"prompt_applied","type":"string"}},"type":"object"},"EdenLive5BVideoServerStatsMessage":{"required":["type","chunk","chunk_ms","generation_fps","realtime_factor","queue_frames"],"title":"StatsMessage","properties":{"billable_units":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Seconds of video billed so far this session (queued for playback); the final total settles when the session closes.","title":"Billable Units","default":null},"pipelined":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"The next chunk renders while this one generates (throughput mode).","title":"Pipelined","default":null},"chunk_ms":{"title":"Chunk Ms","type":"number"},"loop_lag_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Server event-loop lag, p95 over the stats window.","title":"Loop Lag Ms","default":null},"generate_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Model time per chunk (moving average).","title":"Generate Ms","default":null},"prompt_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Per-chunk prompt update time with dynamic_prompt, unchanged chunks included (moving average).","title":"Prompt Ms","default":null},"type":{"const":"stats","title":"Type","default":"stats","type":"string"},"generation_fps":{"title":"Generation Fps","type":"number"},"chunk":{"title":"Chunk","type":"integer"},"latency_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Input or control capture to frame handoff, median.","title":"Latency Ms","default":null},"input_latency_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Game control message arrival to the handoff of the first frame it changes, median.","title":"Input Latency Ms","default":null},"queue_frames":{"title":"Queue Frames","type":"integer"},"realtime_factor":{"description":"Generated frames per second / target fps.","title":"Realtime Factor","type":"number"},"render_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Game render time per chunk (moving average).","title":"Render Ms","default":null}},"type":"object"},"EdenLive5BVideoClientVideoResetMessage":{"required":["type"],"additionalProperties":false,"description":"Restart generation from a new anchor; unset fields keep their values,\nand an explicit null clears ``image_url`` or ``seed``.\n\nThe world is re-anchored on a reference generated from the newest input\nframe unless ``image_url`` is set.","title":"VideoResetMessage","properties":{"enable_prompt_expansion":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enable Prompt Expansion","default":null},"prompt":{"x-fal-ui":{"order":0,"field":"textarea"},"description":"What the input video should look like. Defaults to a generic photoreal prompt.","anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"title":"Scene description","default":null},"image_url":{"x-fal-ui":{"order":1,"field":"image"},"description":"Rendering of the input's first frame in the target look (URL, or a data URI under ~45 KB); anchors the generated world. Without it, one is generated from the newest input frame and the prompt.","anyOf":[{"maxLength":60000,"type":"string"},{"type":"null"}],"title":"Reference first frame","default":null},"seed":{"x-fal-ui":{"order":3,"advanced":true},"description":"Noise seed; the same inputs and seed reproduce the output.","anyOf":[{"minimum":0,"maximum":2147483647,"type":"integer"},{"type":"null"}],"title":"Seed","default":null},"type":{"x-fal-ui":{"hidden":true},"const":"reset","title":"Type","default":"reset","type":"string"}},"type":"object"},"EdenLive5BVideoClientVideoConfigureMessage":{"required":["type"],"additionalProperties":false,"description":"Set the session's conditioning, once per connection; await ``configured``.\n\nWithout ``image_url`` the world anchors on a reference generated from the\nnewest input frame and the prompt (FLUX.2 [klein] 4B edit), or on that\nframe itself when generation fails.","title":"VideoConfigureMessage","properties":{"enable_prompt_expansion":{"x-fal-ui":{"order":2},"description":"Rewrite the scene description (and later prompt changes) into a detailed one with an LLM, using the reference image when given. Adds about a second to session start and to each prompt change.","title":"Prompt expansion","default":false,"type":"boolean"},"prompt":{"x-fal-ui":{"order":0,"field":"textarea"},"description":"What the input video should look like. Defaults to a generic photoreal prompt.","anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"title":"Scene description","default":null},"image_url":{"x-fal-ui":{"order":1,"field":"image"},"description":"Rendering of the input's first frame in the target look (URL, or a data URI under ~45 KB); anchors the generated world. Without it, one is generated from the newest input frame and the prompt.","anyOf":[{"maxLength":60000,"type":"string"},{"type":"null"}],"title":"Reference first frame","default":null},"seed":{"x-fal-ui":{"order":3,"advanced":true},"description":"Noise seed; the same inputs and seed reproduce the output.","anyOf":[{"minimum":0,"maximum":2147483647,"type":"integer"},{"type":"null"}],"title":"Seed","default":null},"type":{"x-fal-ui":{"hidden":true},"const":"configure","title":"Type","default":"configure","type":"string"}},"type":"object"}},"messages":{"server.session_info":{"payload":{"$ref":"#/components/schemas/EdenLive5BVideoServerSessionInfoMessage"},"title":"Server session_info message","name":"session_info"},"server.stream_exhausted":{"payload":{"$ref":"#/components/schemas/EdenLive5BVideoServerStreamExhaustedMessage"},"title":"Server stream_exhausted message","name":"stream_exhausted"},"server.error":{"payload":{"$ref":"#/components/schemas/EdenLive5BVideoServerControlErrorMessage"},"title":"Server error message","name":"error"},"server.configured":{"payload":{"$ref":"#/components/schemas/EdenLive5BVideoServerConfiguredMessage"},"title":"Server configured message","name":"configured"},"client.ping":{"payload":{"$ref":"#/components/schemas/EdenLive5BVideoClientPingMessage"},"title":"Client ping message","name":"ping"},"server.reset_applied":{"payload":{"$ref":"#/components/schemas/EdenLive5BVideoServerResetAppliedMessage"},"title":"Server reset_applied message","name":"reset_applied"},"server.pong":{"payload":{"$ref":"#/components/schemas/EdenLive5BVideoServerPongMessage"},"title":"Server pong message","name":"pong"},"client.reset":{"summary":"Re-anchor on a new frame or image.","payload":{"$ref":"#/components/schemas/EdenLive5BVideoClientVideoResetMessage"},"title":"Restart","name":"reset"},"server.stats":{"payload":{"$ref":"#/components/schemas/EdenLive5BVideoServerStatsMessage"},"title":"Server stats message","name":"stats"},"client.prompt":{"summary":"Change the scene description.","payload":{"$ref":"#/components/schemas/EdenLive5BVideoClientPromptMessage"},"title":"Update prompt","name":"prompt"},"client.configure":{"summary":"Prompt and reference first frame.","payload":{"$ref":"#/components/schemas/EdenLive5BVideoClientVideoConfigureMessage"},"title":"Set conditioning","examples":[{"payload":{"prompt":"Change to anime style","enable_prompt_expansion":true,"type":"configure"},"name":"default"}],"name":"configure"},"server.prompt_applied":{"payload":{"$ref":"#/components/schemas/EdenLive5BVideoServerPromptAppliedMessage"},"title":"Server prompt_applied message","name":"prompt_applied"},"client.stop":{"payload":{"$ref":"#/components/schemas/EdenLive5BVideoClientStopMessage"},"title":"End session","name":"stop"}}},"defaultContentType":"application/json","operations":{"sendControl":{"channel":{"$ref":"#/channels/control"},"action":"send","messages":[{"$ref":"#/channels/control/messages/client.configure"},{"$ref":"#/channels/control/messages/client.ping"},{"$ref":"#/channels/control/messages/client.prompt"},{"$ref":"#/channels/control/messages/client.reset"},{"$ref":"#/channels/control/messages/client.stop"}]},"receiveEvents":{"channel":{"$ref":"#/channels/control"},"action":"receive","messages":[{"$ref":"#/channels/control/messages/server.configured"},{"$ref":"#/channels/control/messages/server.error"},{"$ref":"#/channels/control/messages/server.pong"},{"$ref":"#/channels/control/messages/server.prompt_applied"},{"$ref":"#/channels/control/messages/server.reset_applied"},{"$ref":"#/channels/control/messages/server.session_info"},{"$ref":"#/channels/control/messages/server.stats"},{"$ref":"#/channels/control/messages/server.stream_exhausted"}]}}}