Signed-off-by: Alicia <115451386+congw729@users.noreply.github.com> Co-authored-by: Yueqian Lin <70319226+linyueqian@users.noreply.github.com>
4.5 KiB
4.5 KiB
Text-To-Video
Source https://github.com/vllm-project/vllm-omni/tree/main/examples/online_serving/text_to_video.
This example demonstrates how to deploy the Wan2.2 text-to-video model for online video generation using vLLM-Omni.
Start Server
Basic Start
vllm serve Wan-AI/Wan2.2-T2V-A14B-Diffusers --omni --port 8091
Start with Parameters
Or use the startup script:
bash run_server.sh
The script allows overriding:
MODEL(default:Wan-AI/Wan2.2-T2V-A14B-Diffusers)PORT(default:8091)BOUNDARY_RATIO(default:0.875)FLOW_SHIFT(default:5.0)CACHE_BACKEND(default:none)ENABLE_CACHE_DIT_SUMMARY(default:0)
API Calls
Method 1: Using curl
# Basic text-to-video generation
bash run_curl_text_to_video.sh
# Or execute directly (OpenAI-style multipart)
curl -s http://localhost:8091/v1/videos \
-H "Accept: application/json" \
-F "prompt=Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \
-F "width=832" \
-F "height=480" \
-F "num_frames=33" \
-F "negative_prompt=色调艳丽 ,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \
-F "fps=16" \
-F "num_inference_steps=40" \
-F "guidance_scale=4.0" \
-F "guidance_scale_2=4.0" \
-F "boundary_ratio=0.875" \
-F "seed=42" | jq -r '.data[0].b64_json' | base64 -d > wan22_output.mp4
Request Format
Simple Text-to-Video Generation
curl -X POST http://localhost:8091/v1/videos \
-F "prompt=A cinematic view of a futuristic city at sunset"
Generation with Parameters
curl -X POST http://localhost:8091/v1/videos \
-F "prompt=A cinematic view of a futuristic city at sunset" \
-F "width=832" \
-F "height=480" \
-F "num_frames=33" \
-F "negative_prompt=low quality, blurry, static" \
-F "fps=16" \
-F "num_inference_steps=40" \
-F "guidance_scale=4.0" \
-F "guidance_scale_2=4.0" \
-F "boundary_ratio=0.875" \
-F "flow_shift=5.0" \
-F "seed=42"
Generation Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
prompt |
str | - | Text description of the desired video |
negative_prompt |
str | None | Negative prompt |
n |
int | 1 | Number of videos to generate |
width |
int | None | Video width in pixels |
height |
int | None | Video height in pixels |
num_frames |
int | None | Number of frames to generate |
fps |
int | None | Frames per second for output video |
num_inference_steps |
int | None | Number of denoising steps |
guidance_scale |
float | None | CFG guidance scale (low-noise stage) |
guidance_scale_2 |
float | None | CFG guidance scale (high-noise stage, Wan2.2) |
boundary_ratio |
float | None | Boundary split ratio for low/high DiT (Wan2.2) |
flow_shift |
float | None | Scheduler flow shift (Wan2.2) |
seed |
int | None | Random seed (reproducible) |
lora |
object | None | LoRA configuration |
extra_body |
object | None | Model-specific extra parameters |
Response Format
{
"created": 1234567890,
"data": [
{ "b64_json": "<base64-mp4>" }
]
}
Extract Video
# Extract base64 from response and decode to video
cat response.json | jq -r '.data[0].b64_json' | base64 -d > wan22_output.mp4
Example materials
??? abstract "run_curl_text_to_video.sh"
sh --8<-- "examples/online_serving/text_to_video/run_curl_text_to_video.sh"
??? abstract "run_server.sh"
sh --8<-- "examples/online_serving/text_to_video/run_server.sh"