wan-s2v video server — API reference (live examples)
Base URL: https://bosonai--wan-web-stream-serve.modal.run
All examples below are real curl calls captured against the live deployment — requests and responses are recorded verbatim (responses truncated for readability). {SESSION_ID} is substituted with a real session created during capture.
80 operations across 74 paths.
Health & server info
POST /get_weights_checksum
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/get_weights_checksum' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 200
{"transformer":"3ea83d1196c3ee35e2136d9733510e999d1c0f95b6f6204d2336c1be00f19fcd"}
GET /health
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/health'
→ HTTP 200
{"status":"ok"}
GET /health_generate
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/health_generate'
→ HTTP 200
{"status":"ok"}
GET /model_info
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/model_info'
→ HTTP 200
{"model_path":"/opt/wan-model/sglang_scaffold","is_generation":true,"model_type":"diffusion","architectures":["WanS2VCausalStreamingPipeline"],"has_image_understanding":false,"has_audio_understanding":false,"task_type":"T2V","is_image_gen":false}
GET /models
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/models'
→ HTTP 200
{"model_path":"/opt/wan-model/sglang_scaffold","num_gpus":1,"task_type":"T2V","dit_precision":"bf16","vae_precision":"fp32","pipeline_name":"WanS2VCausalStreamingPipeline","pipeline_class":"WanS2VCausalStreamingPipeline"}
GET /server_info
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/server_info'
→ HTTP 200
{"model_path":"/opt/wan-model/sglang_scaffold","served_model_name":"/opt/wan-model/sglang_scaffold","tp_size":1,"dp_size":1,"version":"0.5.10.post1"}
POST /update_weights_from_disk
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/update_weights_from_disk' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 400
{"success":false,"message":"model_path is required"}
POST /vertex_generate
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/vertex_generate' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 422
{"detail":[{"type":"missing","loc":["body","instances"],"msg":"Field required","input":{}}]}
Models & LoRAs (/v1)
GET /v1/list_loras
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/list_loras'
→ HTTP 200
{"loaded_adapters":[],"active":{}}
POST /v1/merge_lora_weights
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/v1/merge_lora_weights' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 200
{"status":"ok","message":"Successfully merged LoRA weights (target: all, strength: 1.0)"}
GET /v1/model_info
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/model_info'
→ HTTP 200
{"model_path":"/opt/wan-model/sglang_scaffold"}
GET /v1/models
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/models'
→ HTTP 200
{"object":"list","data":[{"id":"/opt/wan-model/sglang_scaffold","object":"model","created":1783032593,"owned_by":"sglang","root":"/opt/wan-model/sglang_scaffold","parent":null,"max_model_len":null,"num_gpus":1,"task_type":"T2V","dit_precision":"bf16","vae_precision":"fp32","pipeline_name":"WanS2VCausalStreamingPipeline","pipeline_class":"WanS2VCausalStreamingPipeline"}]}
GET /v1/models/{model}
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/models/wan'
→ HTTP 404
{"error":{"message":"The model 'wan' does not exist","type":"invalid_request_error","param":"model","code":"model_not_found"}}
POST /v1/set_lora
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/v1/set_lora' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 422
{"detail":[{"type":"missing","loc":["body","lora_nickname"],"msg":"Field required","input":null}]}
POST /v1/unmerge_lora_weights
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/v1/unmerge_lora_weights' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 200
{"status":"ok","message":"Successfully unmerged LoRA weights (target: all)"}
Video — OpenAI/Sora style (/v1/videos)
POST /v1/videos
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/v1/videos' \
-F 'prompt=a person speaking'
→ HTTP 200
{"id":"e99eecb2-11e2-460d-9c48-6fedefd777e8","object":"video","model":"sora-2","status":"queued","progress":0,"created_at":1783032597,"size":"480x480","seconds":"4","quality":"standard","url":null,"remixed_from_video_id":null,"completed_at":null,"expires_at":null,"error":null,"file_path":"/workspace/outputs/e99eecb2-11e2-460d-9c48-6fedefd777e8.mp4","peak_memory_mb":null,"inference_time_s":null}
GET /v1/videos
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/videos'
→ HTTP 200
{"data":[{"id":"e99eecb2-11e2-460d-9c48-6fedefd777e8","object":"video","model":"sora-2","status":"failed","progress":0,"created_at":1783032597,"size":"480x480","seconds":"4","quality":"standard","url":null,"remixed_from_video_id":null,"completed_at":null,"expires_at":null,"error":{"message":"Model generation returned no output. Error from scheduler: Error executing request e99eecb2-11e2-460d-9c48-6fedefd777e8: wan_s2v_session_id is required for step requests."},"file_path":"/workspace/outputs/e99eecb2-11e2-460d-9c48-6fedefd777e8.mp4","peak_memory_mb":null,"inference_time_s":null}],"object":"li
GET /v1/videos/{video_id}
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/videos/VIDEO_ID'
→ HTTP 404
{"detail":"Video not found"}
DELETE /v1/videos/{video_id}
curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/v1/videos/VIDEO_ID'
→ HTTP 404
{"detail":"Video not found"}
GET /v1/videos/{video_id}/content
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/videos/VIDEO_ID/content'
→ HTTP 404
{"detail":"Video not found"}
Images (/v1/images)
POST /v1/images/edits
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/v1/images/edits' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 422
{"detail":[{"type":"missing","loc":["body","prompt"],"msg":"Field required","input":null}]}
POST /v1/images/generations
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/v1/images/generations' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 422
{"detail":[{"type":"missing","loc":["body","prompt"],"msg":"Field required","input":{}}]}
GET /v1/images/{image_id}/content
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/images/IMAGE_ID/content'
→ HTTP 404
{"detail":"Image not found"}
Meshes (/v1/meshes)
POST /v1/meshes
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/v1/meshes' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 422
{"detail":"An input image is required for mesh generation"}
GET /v1/meshes
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/meshes'
→ HTTP 200
{"data":[],"object":"list"}
GET /v1/meshes/{mesh_id}
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/meshes/MESH_ID'
→ HTTP 404
{"detail":"Mesh not found"}
DELETE /v1/meshes/{mesh_id}
curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/v1/meshes/MESH_ID'
→ HTTP 404
{"detail":"Mesh not found"}
GET /v1/meshes/{mesh_id}/content
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/meshes/MESH_ID/content'
→ HTTP 404
{"detail":"Mesh not found"}
Avatar video — offline (audio→mp4)
POST /avatar/video/sessions
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/sessions' \
-H 'Content-Type: application/json' \
-d '{"prompt": "", "ref_image_path": "/workspace/data/examples/wan/Animate-0.jpeg", "width": 480, "height": 480, "fps": 16, "sample_rate": 16000}'
→ HTTP 200
{"session_id":"off-18ebae8ec504","state":"queued","queue_position":3,"block_duration_ms":750,"error":null,"scheduler_phase":"queued","audio_scheduler_phase":"idle","video_scheduler_phase":"idle","scheduler_detail":{"start_policy":"lookahead","wav2vec_window_ms":8000,"block_duration_ms":750,"audio_received_ms":0,"audio_final":false},"scheduler_history_tail":[{"t_ms":0,"phase":"queued","audio_phase":"idle","video_phase":"idle","detail":{"start_policy":"lookahead","wav2vec_window_ms":8000,"block_duration_ms":750,"audio_received_ms":0,"audio_final":false}}]}
GET /avatar/video/sessions/{session_id}
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/sessions/off-f9450ee61169'
→ HTTP 200
{"session_id":"off-f9450ee61169","state":"queued","queue_position":2,"audio_received_ms":0,"audio_final":false,"generated_blocks":0,"playable_blocks":0,"next_block_start_ms":0,"block_duration_ms":750,"error":null,"scheduler_phase":"queued","audio_scheduler_phase":"idle","video_scheduler_phase":"idle","scheduler_detail":{"start_policy":"lookahead","wav2vec_window_ms":8000,"block_duration_ms":750,"audio_received_ms":0,"audio_final":false},"scheduler_history_tail":[{"t_ms":0,"phase":"queued","audio_phase":"idle","video_phase":"idle","detail":{"start_policy":"lookahead","wav2vec_window_ms":8000,"b
DELETE /avatar/video/sessions/{session_id}
curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/sessions/off-f9450ee61169'
→ HTTP 200
{"session_id":"off-f9450ee61169","state":"cancelled","queue_position":2,"audio_received_ms":0,"audio_final":true,"generated_blocks":0,"playable_blocks":0,"next_block_start_ms":0,"block_duration_ms":750,"error":null,"scheduler_phase":"cancelled","audio_scheduler_phase":"cancelled","video_scheduler_phase":"cancelled","scheduler_detail":{"start_policy":"lookahead","wav2vec_window_ms":8000,"block_duration_ms":750,"audio_received_ms":0,"audio_final":false},"scheduler_history_tail":[{"t_ms":0,"phase":"queued","audio_phase":"idle","video_phase":"idle","detail":{"start_policy":"lookahead","wav2vec_win
POST /avatar/video/sessions/{session_id}/audio
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/sessions/off-f9450ee61169/audio' \
-H 'Content-Type: application/json' \
-d '{"seq": 0, "sample_rate": 16000, "pcm_f32_b64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}'
→ HTTP 400
{"detail":"cannot append audio after final"}
POST /avatar/video/sessions/{session_id}/audio/end
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/sessions/off-f9450ee61169/audio/end' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 200
{"session_id":"off-f9450ee61169","state":"cancelled","queue_position":2,"audio_received_ms":0,"audio_final":true,"generated_blocks":0,"playable_blocks":0,"next_block_start_ms":0,"block_duration_ms":750,"error":null,"scheduler_phase":"cancelled","audio_scheduler_phase":"audio_final","video_scheduler_phase":"cancelled","scheduler_detail":{"start_policy":"lookahead","wav2vec_window_ms":8000,"block_duration_ms":750,"audio_received_ms":0,"audio_final":true},"scheduler_history_tail":[{"t_ms":0,"phase":"queued","audio_phase":"idle","video_phase":"idle","detail":{"start_policy":"lookahead","wav2vec_wi
Avatar video — fMP4 streaming
GET /avatar/video/stream/replica/status
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/replica/status'
→ HTTP 200
{"ok":true,"replica_ready":true,"accepts_new_session":true,"worker":{"active_session_id":null,"busy":false,"queue_depth":0,"session_count":0,"worker_status_available":false},"stream_session_count":4,"stream_state_counts":{"active":4},"stream_sessions":[{"session_id":"stream-2f9d4b286e","engine_session_id":"stream-2f9d4b286e","state":"active","closed":false,"fragment_count":0,"total_bytes":0,"profile_enabled":false,"profile_records":0,"error":null},{"session_id":"stream-64f91e800f","engine_session_id":"stream-64f91e800f","state":"active","closed":false,"fragment_count":0,"total_bytes":0,"profil
POST /avatar/video/stream/sessions
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions' \
-H 'Content-Type: application/json' \
-d '{"prompt": "", "ref_image_path": "/workspace/data/examples/wan/Animate-0.jpeg", "width": 480, "height": 480, "fps": 16, "sample_rate": 16000}'
→ HTTP 200
{"session_id":"stream-2ee87e3460","state":"active","block_duration_ms":750,"audio_sample_rate":16000,"init_url":"/avatar/video/stream/sessions/stream-2ee87e3460/init.fmp4","fragments_url":"/avatar/video/stream/sessions/stream-2ee87e3460/fragments","file_url":"/avatar/video/stream/sessions/stream-2ee87e3460/file.mp4","status_url":"/avatar/video/stream/sessions/stream-2ee87e3460/status","audio_url":"/avatar/video/stream/sessions/stream-2ee87e3460/audio","audio_bin_url":"/avatar/video/stream/sessions/stream-2ee87e3460/audio.bin","audio_end_url":"/avatar/video/stream/sessions/stream-2ee87e3460/aud
DELETE /avatar/video/stream/sessions/{session_id}
curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
POST /avatar/video/stream/sessions/{session_id}/audio
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID/audio' \
-H 'Content-Type: application/json' \
-d '{"seq": 0, "sample_rate": 16000, "pcm_f32_b64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
POST /avatar/video/stream/sessions/{session_id}/audio.bin
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID/audio.bin' \
-H 'Content-Type: application/json' \
-d '{"seq": 0, "sample_rate": 16000, "pcm_f32_b64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
POST /avatar/video/stream/sessions/{session_id}/audio/end
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID/audio/end' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
GET /avatar/video/stream/sessions/{session_id}/file.mp4
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID/file.mp4'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
GET /avatar/video/stream/sessions/{session_id}/fragments
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID/fragments'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
GET /avatar/video/stream/sessions/{session_id}/init.fmp4
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID/init.fmp4'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
GET /avatar/video/stream/sessions/{session_id}/profile
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID/profile'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
GET /avatar/video/stream/sessions/{session_id}/status
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID/status'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
Avatar realtime
POST /avatar/realtime/reference
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/realtime/reference' \
-H 'Content-Type: application/json' \
-d '{"prompt": "", "ref_image_path": "/workspace/data/examples/wan/Animate-0.jpeg", "width": 480, "height": 480, "fps": 16, "sample_rate": 16000}'
→ HTTP 400
{"detail":"encode_ref_v3 requires ref_image_b64 in the payload."}
POST /avatar/realtime/sessions
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/realtime/sessions' \
-H 'Content-Type: application/json' \
-d '{"prompt": "", "ref_image_path": "/workspace/data/examples/wan/Animate-0.jpeg", "width": 480, "height": 480, "fps": 16, "sample_rate": 16000}'
→ HTTP 200
{"session_id":"wan-s2v-a5e07461f612","status":"unknown","slot_idx":null,"epoch":null,"lane":null,"retry_after_seconds":null,"n_bound":null,"n_idle":null,"n_bootstrapping":null,"n_cold":null,"summary":{},"error":"Error executing request wan-s2v-create-v3-b13c6c76: create_v3 requires a ref image — pass either EXTRA_REF_LATENT (pre-encoded tensor) or EXTRA_REF_IMAGE_B64 (b64 PNG/JPEG, will be VAE-encoded inline)."}
DELETE /avatar/realtime/sessions/{session_id}
curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/avatar/realtime/sessions/wan-s2v-2428aea68177'
→ HTTP 200
{"session_id":"wan-s2v-2428aea68177","destroyed":false,"error":null}
POST /avatar/realtime/sessions/{session_id}/audio
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/realtime/sessions/wan-s2v-2428aea68177/audio' \
-H 'Content-Type: application/json' \
-d '{"seq": 0, "sample_rate": 16000, "pcm_f32_b64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}'
→ HTTP 422
{"detail":[{"type":"missing","loc":["body","raw_waveform_b64"],"msg":"Field required","input":{"seq":0,"sample_rate":16000,"pcm_f32_b64":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}}]}
POST /avatar/realtime/sessions/{session_id}/start
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/realtime/sessions/wan-s2v-2428aea68177/start' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 200
{"session_id":"wan-s2v-2428aea68177","status":"UNKNOWN","started":false,"error":"Error executing request wan-s2v-start-2fca27b0: Session 'wan-s2v-2428aea68177' not found; cannot start."}
Avatar debug
POST /avatar/debug/sessions
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/debug/sessions' \
-H 'Content-Type: application/json' \
-d '{"prompt": "", "ref_image_path": "/workspace/data/examples/wan/Animate-0.jpeg", "width": 480, "height": 480, "fps": 16, "sample_rate": 16000}'
→ HTTP 200
{"session_id":"wan-s2v-0f13bfc210db","summary":{"session_id":"wan-s2v-0f13bfc210db","block_index":0,"block_frames":3,"cache_blocks":2,"cfg_scale":1.0,"audio_mode":"raw","finalized":false,"rope_state":{},"has_prompt_cache":false,"has_ref_cache":false,"age_seconds":0.00026869773864746094},"error":null}
DELETE /avatar/debug/sessions/{session_id}
curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/avatar/debug/sessions/wan-s2v-3818f43163b1'
→ HTTP 200
{"session_id":"wan-s2v-3818f43163b1","destroyed":true,"error":null}
POST /avatar/debug/sessions/{session_id}/finalize
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/debug/sessions/wan-s2v-3818f43163b1/finalize' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 200
{"session_id":"wan-s2v-3818f43163b1","summary":{},"error":"Error executing request wan-s2v-finalize-5a77e4c3: Session 'wan-s2v-3818f43163b1' not found; cannot finalize."}
POST /avatar/debug/sessions/{session_id}/step
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/debug/sessions/wan-s2v-3818f43163b1/step' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 200
{"session_id":"wan-s2v-3818f43163b1","block_index":0,"plan":{},"kv_plan":{},"latents_b64":null,"pixels_b64":null,"decode_kind":null,"error":"Error executing request wan-s2v-step-988814b7: Session 'wan-s2v-3818f43163b1' not found; create it first."}
wan_s2v — low-level session
POST /wan_s2v/session
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session' \
-H 'Content-Type: application/json' \
-d '{"prompt": "", "ref_image_path": "/workspace/data/examples/wan/Animate-0.jpeg", "width": 480, "height": 480, "fps": 16, "sample_rate": 16000}'
→ HTTP 200
{"session_id":"wan-s2v-857f24126dfb","summary":{"session_id":"wan-s2v-857f24126dfb","block_index":0,"block_frames":3,"cache_blocks":2,"cfg_scale":1.0,"audio_mode":"raw","finalized":false,"rope_state":{},"has_prompt_cache":false,"has_ref_cache":false,"age_seconds":0.00021982192993164062},"error":null}
POST /wan_s2v/session/v3
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/v3' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 200
{"session_id":"wan-s2v-ae89165e2ff5","status":"unknown","slot_idx":null,"epoch":null,"lane":null,"retry_after_seconds":null,"n_bound":null,"n_idle":null,"n_bootstrapping":null,"n_cold":null,"summary":{},"error":"Error executing request wan-s2v-create-v3-d5a91ce9: create_v3 requires a ref image — pass either EXTRA_REF_LATENT (pre-encoded tensor) or EXTRA_REF_IMAGE_B64 (b64 PNG/JPEG, will be VAE-encoded inline)."}
POST /wan_s2v/session/v3/encode_ref
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/v3/encode_ref' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 400
{"detail":"encode_ref_v3 requires ref_image_b64 in the payload."}
DELETE /wan_s2v/session/{session_id}
curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/wan-s2v-19811c550cff'
→ HTTP 200
{"session_id":"wan-s2v-19811c550cff","destroyed":true,"error":null}
POST /wan_s2v/session/{session_id}/audio
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/wan-s2v-19811c550cff/audio' \
-H 'Content-Type: application/json' \
-d '{"seq": 0, "sample_rate": 16000, "pcm_f32_b64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}'
→ HTTP 422
{"detail":[{"type":"missing","loc":["body","raw_waveform_b64"],"msg":"Field required","input":{"seq":0,"sample_rate":16000,"pcm_f32_b64":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}}]}
POST /wan_s2v/session/{session_id}/finalize
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/wan-s2v-19811c550cff/finalize' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 200
{"session_id":"wan-s2v-19811c550cff","summary":{},"error":"Error executing request wan-s2v-finalize-9e58a59a: Session 'wan-s2v-19811c550cff' not found; cannot finalize."}
GET /wan_s2v/session/{session_id}/pull
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/wan-s2v-19811c550cff/pull'
→ HTTP 200
{"session_id":"wan-s2v-19811c550cff","block_index":-1,"pixels_b64":null,"video_b64":null,"video_codec":null,"video_container":null,"video_mime":null,"video_fps":null,"video_crf":null,"audio_start_sec":0.0,"audio_end_sec":0.0,"is_silent_block":false,"audio_block_id":-1,"audio_start_sample":0,"audio_end_sample":0,"audio_source_kind":"unknown","real_samples":0,"silence_pad_samples":0,"consumed_chunk_id_start":-1,"consumed_chunk_id_end":-1,"source_start_sample":-1,"source_end_sample":-1,"empty":true,"error":null}
POST /wan_s2v/session/{session_id}/start
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/wan-s2v-19811c550cff/start' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 200
{"session_id":"wan-s2v-19811c550cff","status":"UNKNOWN","started":false,"error":"Error executing request wan-s2v-start-861a87d1: Session 'wan-s2v-19811c550cff' not found; cannot start."}
POST /wan_s2v/session/{session_id}/step
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/wan-s2v-19811c550cff/step' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 200
{"session_id":"wan-s2v-19811c550cff","block_index":0,"plan":{},"kv_plan":{},"latents_b64":null,"pixels_b64":null,"decode_kind":null,"error":"Error executing request wan-s2v-step-b3581e4b: Session 'wan-s2v-19811c550cff' not found; create it first."}
DELETE /wan_s2v/session/{session_id}/v3
curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/wan-s2v-19811c550cff/v3'
→ HTTP 200
{"session_id":"wan-s2v-19811c550cff","destroyed":false,"error":null}
wan_s2v — fMP4 streaming
GET /wan_s2v/stream/replica/status
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/replica/status'
→ HTTP 200
{"ok":true,"replica_ready":true,"accepts_new_session":true,"worker":{"active_session_id":null,"busy":false,"queue_depth":0,"session_count":0,"worker_status_available":false},"stream_session_count":5,"stream_state_counts":{"active":5},"stream_sessions":[{"session_id":"stream-2f9d4b286e","engine_session_id":"stream-2f9d4b286e","state":"active","closed":false,"fragment_count":0,"total_bytes":0,"profile_enabled":false,"profile_records":0,"error":null},{"session_id":"stream-64f91e800f","engine_session_id":"stream-64f91e800f","state":"active","closed":false,"fragment_count":0,"total_bytes":0,"profil
POST /wan_s2v/stream/sessions
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions' \
-H 'Content-Type: application/json' \
-d '{"prompt": "", "ref_image_path": "/workspace/data/examples/wan/Animate-0.jpeg", "width": 480, "height": 480, "fps": 16, "sample_rate": 16000}'
→ HTTP 200
{"session_id":"stream-46bd37be15","state":"active","block_duration_ms":750,"audio_sample_rate":16000,"init_url":"/wan_s2v/stream/sessions/stream-46bd37be15/init.fmp4","fragments_url":"/wan_s2v/stream/sessions/stream-46bd37be15/fragments","file_url":"/wan_s2v/stream/sessions/stream-46bd37be15/file.mp4","status_url":"/wan_s2v/stream/sessions/stream-46bd37be15/status","audio_url":"/wan_s2v/stream/sessions/stream-46bd37be15/audio","audio_bin_url":"/wan_s2v/stream/sessions/stream-46bd37be15/audio.bin","audio_end_url":"/wan_s2v/stream/sessions/stream-46bd37be15/audio/end","profile_url":"/wan_s2v/str
DELETE /wan_s2v/stream/sessions/{session_id}
curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
POST /wan_s2v/stream/sessions/{session_id}/audio
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID/audio' \
-H 'Content-Type: application/json' \
-d '{"seq": 0, "sample_rate": 16000, "pcm_f32_b64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
POST /wan_s2v/stream/sessions/{session_id}/audio.bin
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID/audio.bin' \
-H 'Content-Type: application/json' \
-d '{"seq": 0, "sample_rate": 16000, "pcm_f32_b64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
POST /wan_s2v/stream/sessions/{session_id}/audio/end
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID/audio/end' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
GET /wan_s2v/stream/sessions/{session_id}/file.mp4
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID/file.mp4'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
GET /wan_s2v/stream/sessions/{session_id}/fragments
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID/fragments'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
GET /wan_s2v/stream/sessions/{session_id}/init.fmp4
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID/init.fmp4'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
GET /wan_s2v/stream/sessions/{session_id}/profile
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID/profile'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
GET /wan_s2v/stream/sessions/{session_id}/status
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID/status'
→ HTTP 404
{"detail":"unknown session 'SESSION_ID'"}
wan_s2v — offline sessions
POST /wan_s2v/offline/sessions
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/offline/sessions' \
-H 'Content-Type: application/json' \
-d '{"prompt": "", "ref_image_path": "/workspace/data/examples/wan/Animate-0.jpeg", "width": 480, "height": 480, "fps": 16, "sample_rate": 16000}'
→ HTTP 200
{"session_id":"off-197cf6a753c0","state":"queued","queue_position":4,"block_duration_ms":750,"error":null,"scheduler_phase":"queued","audio_scheduler_phase":"idle","video_scheduler_phase":"idle","scheduler_detail":{"start_policy":"lookahead","wav2vec_window_ms":8000,"block_duration_ms":750,"audio_received_ms":0,"audio_final":false},"scheduler_history_tail":[{"t_ms":0,"phase":"queued","audio_phase":"idle","video_phase":"idle","detail":{"start_policy":"lookahead","wav2vec_window_ms":8000,"block_duration_ms":750,"audio_received_ms":0,"audio_final":false}}]}
GET /wan_s2v/offline/sessions/{session_id}
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/offline/sessions/SESSION_ID'
→ HTTP 404
{"detail":"\"offline session 'SESSION_ID' not found\""}
DELETE /wan_s2v/offline/sessions/{session_id}
curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/offline/sessions/SESSION_ID'
→ HTTP 404
{"detail":"\"offline session 'SESSION_ID' not found\""}
POST /wan_s2v/offline/sessions/{session_id}/audio
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/offline/sessions/SESSION_ID/audio' \
-H 'Content-Type: application/json' \
-d '{"seq": 0, "sample_rate": 16000, "pcm_f32_b64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}'
→ HTTP 404
{"detail":"\"offline session 'SESSION_ID' not found\""}
POST /wan_s2v/offline/sessions/{session_id}/audio/end
curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/offline/sessions/SESSION_ID/audio/end' \
-H 'Content-Type: application/json' \
-d '{}'
→ HTTP 404
{"detail":"\"offline session 'SESSION_ID' not found\""}
GET /wan_s2v/offline/sessions/{session_id}/chunks
curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/offline/sessions/SESSION_ID/chunks'
→ HTTP 404
{"detail":"\"offline session 'SESSION_ID' not found\""}