blender-motion-state-inspection
AFaffaan-m/ECC278k近 7 天新增 4,046 个 star
Canonical entrypoint for every AI chat request that asks to make, generate, plan, or edit a video, including promotional films, ads, short videos, product videos, reference-image videos, image-to-video, first/last-frame transitions, storyboard/keyframes, character talking-head videos, 宣传片, 广告片, 短视频, 视频, 口播视频, 分镜图, 图片转视频, and 商品宣传片. Do not invoke cosyvoice-ssml or tts-director as the first response to a video request. This skill must draft a script and shot table, generate storyboard contact-sheet preview images through image.generate, ask the user to confirm the script plus storyboard together, and only then call video generation.
Use this skill before calling Operate(resource="video", operation="generate", input={ ... }) for video work.
For AI chat, this skill is the single entrypoint for video generation. If the user says "做一个口播视频", "生成一个视频", "产品宣传片", "广告片", "数字人视频", or any similar video request, invoke video-director first. Do not start from cosyvoice-ssml; that skill is an internal digital-human TTS substep and must not drive the video workflow.
If this skill was loaded because the user attached an image and asked for a promotional film / 宣传片 / 视频, treat the attached image as a product or visual reference for the video workflow. Do not generate a replacement product image as an "analysis" step.
Treat the workflow as a gated state machine. Do not skip or reorder states:
plan_draft: Clarify the intended video mode from the user's goal and assets, then draft a concise but detailed video script and shot table.storyboard_preview: Immediately after the shot table exists, generate storyboard contact-sheet preview image(s) with Operate(resource="image", operation="generate", input={ ... }). The storyboard image is a preview of the planned shots, not a standalone product poster, replacement product render, cover image, or final video keyframe.user_review: Show the script, storyboard preview image(s), and explicit video specs together. Ask the user to confirm or revise the whole plan.production_prep: After confirmation, decide whether this should be a <=15s single upstream clip, a long video_sequence request, or a manual editor/project assembly. Only use a video project pack if the user explicitly asks for a project/package/editor workflow, or the task is already bound to an existing pack.tts_if_needed: If the confirmed task is a character talking-head / 口播 video, complete the TTS-first workflow below.video_generate: Only after confirmation and any required TTS audio is complete, call Operate(resource="video", operation="generate", input={ ... }).If the user has not yet confirmed the script, do not generate the video.
If the user has not yet seen and approved the storyboard preview image(s), do not generate the video.
If the shot table exists but no storyboard contact-sheet image has been generated yet, the next tool call must be image.generate for the storyboard preview, not video.generate, voice.speech, tts-director, or cosyvoice-ssml.
The storyboard contact-sheet preview is mandatory after the first shot script is written. It is not the same as final video keyframes; it is a quick visual proof of the planned shot sequence so the user can approve direction, composition, product placement, and continuity before video generation.
For product promotional videos from an attached/reference image:
image.generate call, if any, must be for a storyboard contact sheet after the script and shot table exist.image.generate just to "analyze", "extract", "enhance", or recreate the product reference.video.generate until the user confirms the storyboard direction.When the user wants a talking-head / 口播 / presenter / livestream welcome video using a character from the asset library, the character image is only the visual identity reference. It is not the speech track.
Keep these three inputs separate:
voiceId: the reusable cloned voice identity stored on the character asset. This is the primary voice field for future TTS calls.voiceId exists. Do not keep analyzing or presenting it once a ready voiceId has been found.Use this exact order:
Sound column must contain the actual spoken lines, not vague labels like “角色讲解”.voiceId / voice_id, treat that as the resolved voice and stop inspecting voice samples. Report the resolved voiceId, not the reference-audio filename.voiceId, call Operate(resource="voice", operation="clone", input={ ... }) first, wait for completion, and use the returned voiceId.voiceId and no usable voice sample, stop and ask the user to provide or choose a voice. Do not fall back to a generic voice silently.Operate(resource="voice", operation="speech", input={ ... }) with the full approved spoken script and the resolved voiceId.tts-director first with Operate(resource="skills", operation="invoke", input={ "name": "tts-director" }), then use its guidance to split the approved script into semantic beats and assign model-appropriate delivery controls.tts-director may activate cosyvoice-ssml only here, after the video-director workflow has confirmed this is a digital-human / VideoRetalk / asset-library talking-head video and the script plus role voice are resolved.speed for pace, pitch for tone, emotion for mood, expressive punctuation such as ~, ?, !, ……, and MiniMax text markers such as <#0.6#>, (laughs), (sighs), or (breath) inside input only where the spoken rhythm needs them."emotion":"happy" and speed:1.08 instead of making the character say “用开心快速的语气”.voice.speech call with ordered segments; the media runtime will generate each segment and merge the final audio. Do not make repeated voice.speech calls and then manually merge.drivingAudio.Audio 1: generated Jamba TTS speech for lip-sync / speaking rhythm.Operate(resource="video", operation="generate", input={ ... }), normally in reference-guided mode.This is mandatory because the video model needs a finished audio waveform aligned with the approved script. A character voiceId is not audio. A voice sample is not the approved spoken line. The spoken text inside the video prompt is not a substitute for TTS.
Forbidden shortcuts:
voiceId, voice sample audio, or “音色素材” as drivingAudio.generateAudio to create the character voice for talking-head work.Recommended TTS payload shape:
{
"voiceId": "voice_xxx",
"segments": [
{
"input": "完整、已确认的口播开场。<#0.5#>",
"speed": 0.98,
"pitch": 0,
"emotion": "calm"
},
{
"input": "自然地进入更有感染力的重点(laughs)。",
"speed": 1.05,
"pitch": 0,
"emotion": "happy"
}
],
"title": "Jamba welcome voiceover",
"waitForCompletion": true
}
Recommended video payload shape after TTS completes:
{
"generationMode": "reference-guided",
"referenceImages": ["/absolute/path/to/jamba.png"],
"drivingAudio": "/absolute/path/to/generated-jamba-tts.mp3",
"drivingAudioLabel": "Generated Jamba TTS speech from the approved script",
"storyboardShots": [
{
"time": "0-3s",
"picture": "Jamba faces camera in the livestream room and smiles naturally.",
"sound": "欢迎来到直播间,今天给大家准备了一个超实用的好物。",
"shot": "Medium close-up, stable presenter framing."
}
]
}
A video project pack is not the default path.
Create one only when:
Do not create one only because the request has multiple shots, long context, continuity risk, storyboard needs, or possible revisions.
When it is explicitly needed, create it with:
Operate(resource="video", operation="create", input={ "explicitProjectWorkflow": true, "title": "...", "duration": "...", "aspectRatio": "...", "mode": "..." })The project folder lives in:
manuscripts/video/<project-name>/It should be used to keep these files together:
manifest.jsonscript.mdassets.jsoneditor.project.jsonAfter the pack is created:
Otherwise keep the planning in chat, call video generate directly, and let the output live in the generated media library.
text-to-video -> wan2.7-t2v-videoreference-guided -> wan2.7-r2v-videofirst-last-frame -> wan2.7-i2v-video15 seconds.15 seconds, submit one video.generate request with either the final durationSeconds or explicit videoSegments; the media queue will generate <=15s segments and concatenate one final video asset.video.generate repeatedly just to bypass the upstream 15 second segment limit.1-3 seconds.5 seconds.text-to-video when the user only provides text and wants a fresh video shot.reference-guided when the user provides one or more reference images and wants the video to absorb subject elements, style cues, props, scene motifs, or composition hints from those images.first-last-frame only when two images have explicit start/end semantics, such as “from A to B”, “首帧/尾帧”, “开头/结尾”, or “起始状态/结束状态”.first-last-frame; stay with reference-guided semantics instead.单视频模式:
15 seconds.长视频队列模式:
15 seconds.video.generate request with durationSeconds > 15; the runtime will create a video_sequence queue job, split the generation into <=15s segments, wait for each segment, concatenate the segments, and return one final video asset.videoSegments when the storyboard needs scene-by-scene, beat-by-beat, reference-image, first/last-frame, or driving-audio control.videoSegments[] item must be <=15 seconds and should correspond to a coherent group of approved storyboard rows.waitForCompletion: true unless the user explicitly asks to run the long generation in the background.手动多视频工程模式:
ffmpeg; use 长视频队列模式 instead.If the request has multiple shots, clear continuity requirements, or a risk of visual drift, ask one more question after showing the contact-sheet preview:
If separate storyboard keyframes are generated, later video generation should preferentially use image-based modes, and for transition-heavy segments should prefer first-last-frame.
Every video task needs a storyboard contact-sheet preview after the script table and before user confirmation.
Use generated individual keyframes in addition to the contact sheet when the request is complex enough that video quality depends on stable keyframes.
Use storyboard-first when one or more of these is true:
When any of the above is true, do not silently continue to video generation after the contact sheet. Ask the user whether they also want separate image-generated storyboard keyframes before video generation.
When storyboard-first is used, follow this exact process:
The first storyboard image should be a single overall environment master frame.
It must contain:
This image acts as the environmental anchor for all later keyframes.
Do not start by generating an isolated close-up if the later sequence depends on environment continuity.
After writing the script table, generate the required storyboard effect image(s) before asking for final video approval.
Use the shot count to choose the grid:
1-4 shots -> four-panel grid.5-6 shots -> six-panel grid.7-9 shots -> nine-panel grid.9 shots -> split into multiple contact sheets; each generated image contains at most 9 storyboard panels.Rules:
9 storyboard panels.count: 1 and put every panel description inside prompt.imagePlanItems for storyboard contact sheets; imagePlanItems means separate image outputs unless the tool contract explicitly says otherwise.storyboardShots payload used later for video generation.Reference handling is mandatory:
image.generate or video.generate call that depends on prior context, inspect the Current session resources block. If the needed file is not obvious there, call Operate(resource="session", operation="list", input={ "kind": "image", "limit": 20 }) or Operate(action="session.resources.list", payload={...}) and use the returned reference / path value exactly.image.generate as referenceImages.referenceImages or subjectIds.Image 1: product shape and material reference, Image 2: character identity reference, Image 3: scene mood reference.session.resources.* results.Recommended contact-sheet image.generate payload shape:
{
"count": 1,
"generationMode": "reference-guided",
"aspectRatio": "16:9",
"prompt": "Image 1 is the product reference: preserve shape, material, logo position, and main color. Create one cinematic storyboard contact sheet with six panels arranged left-to-right, top-to-bottom. Each panel corresponds to one storyboard row: Panel 1 visual: ... Panel 2 visual: ... Panel 3 visual: ... Panel 4 visual: ... Panel 5 visual: ... Panel 6 visual: ... No visible labels, no captions, no table text.",
"referenceImages": ["/absolute/path/to/product.png"]
}
Use text-to-image only when there are no usable visual references. Use reference-guided whenever reference images, subject assets, product photos, or prior generated images exist.
When using image generation to build storyboard frames, consistency matters more than flourish.
You must:
The subject anchor should usually keep these elements stable:
The environment anchor should usually keep these elements stable:
Do not rewrite the whole scene in a different wording for each frame. Do not keep inventing new environment details frame by frame. Do not vary the character description unless that change is intentional.
If storyboard frames are generated:
This is mandatory when the storyboard is later used for video generation.
If those storyboard frames have already been saved into a video project pack, later video generation should use those keyframes as the main visual references. Do not keep reusing raw subject-library portraits or product stills as the primary visual input unless you truly need extra补充 angles or missing objects.
The pre-generation script draft must be shown as a Markdown table. Use these columns:
| Time | Picture | Sound | Shot |
|---|
Requirements:
视频时长视频比例Time: use compact ranges such as 0-2s, 2-4s, 4-6s.Picture: describe subject action, motion, camera movement, scene changes, and what must stay stable.Sound: describe spoken line, ambient sound, music feel, silence, or rhythm cue.Shot: describe shot scale / framing, such as close-up, medium shot, wide shot, push-in, pan, tilt.1-3s range.5s.After the table, do not ask for final video approval yet. Generate the storyboard contact-sheet preview first, then show the table and storyboard together with one short confirmation prompt, for example:
请确认这版视频脚本,我确认后再正式生成。If the user requests changes, revise the table, regenerate the storyboard contact-sheet preview when visual beats changed, and ask for confirmation again. If duration or aspect ratio is not yet specified, propose a concrete default before generating the storyboard preview and include it in the confirmation block so the user can approve or change it. If the script contains multiple shots, a named character, an important environment, or any continuity-sensitive sequence, also ask whether the user wants storyboard stills / keyframes first.
After the user confirms the video plan, the next assistant turn must either call video.generate or ask one blocking question required to build a valid payload. Do not reply that generation has started, is queued, or is complete until a video.generate tool result exists.
For chat/agent video creation, set waitForCompletion: true unless the user explicitly asks to run it in the background.
video.generate prompt, reconstruct the current approved plan from the conversation context. Use the latest user-confirmed version, not an earlier draft.video.generate, run this self-check:
storyboardShots or storyboardMarkdown?durationSeconds match the final storyboard time range?video.generate; do not proceed with an incomplete prompt.Image 1: approved storyboard contact-sheet reference, strong reference for shot order, composition, framing, and visual continuityImage 2: product reference, strong reference for shape, material, color, logo/details, and hardwareImage 3: Jamba portrait referenceImage 4: livestream background mood referenceVoice: Jamba voiceId for TTS = voice_xxxAudio 1: generated Jamba TTS speech from the approved scriptreference-guided video generation after storyboard approval, pass the approved storyboard image/keyframe path(s) in referenceImages whenever available. Do not keep using only the original product photo if an approved storyboard image exists.voiceId as Audio 1 directly. First synthesize the approved spoken script with TTS, then treat the generated audio asset as Audio 1.voiceId, use that voiceId as the default TTS voice for the spoken script unless the user explicitly asks to disable it or replace it. Do not surface the old reference-audio filename as the important result; the important result is the resolved voiceId.text-to-video, describe subject, camera, motion, environment, pacing, and visual style.reference-guided, describe the desired movement and cinematic behavior while preserving and combining the important elements from the provided reference images.first-last-frame, describe the transition between the first and last frame; do not rewrite the full scene unless the transition requires it.payload.storyboardMarkdown or payload.storyboardShots, so the host can compile the execution prompt from the actual approved beats.payload.storyboardShots should use one item per approved row with time, picture, sound, and shot.Operate(resource="video", operation="generate", input={ ... }).voiceId, use it directly for TTS and do not inspect or summarize reference audio unless troubleshooting voice binding.Operate(resource="voice", operation="clone", input={ ... }), wait for completion, and use the returned voiceId.Operate(resource="voice", operation="speech", input={ ... }) before the video tool:
input: the full approved spoken scriptvoiceId: the selected character asset's stored voice idspeed: optional speech speed, 0.5-2.0; use subtle defaults such as 0.95 for steady narration or 1.05-1.12 for energetic口播pitch: optional pitch, -12 to 12; keep 0 unless the character or user intent calls for a higher/lower toneemotion: optional MiniMax emotion: happy, sad, angry, fearful, disgusted, surprised, calm, fluent, whipser/whisper~, ?, !, ……, ?!, !! for tone, <#0.6#> for intentional pauses, and (laughs), (sighs), (breath), (chuckle) for light expression when usefultts-director with Operate(resource="skills", operation="invoke", input={ "name": "tts-director" })segments: use this for one long voice track with multiple emotional beats; submit once and let the media runtime merge the final audiotitle: a clear audio asset titleprojectId / boundManuscriptPath: include them when knownwaitForCompletion: true when the runtime supports it, because video generation needs the completed audio assetdrivingAudio; never use the character voiceId or raw voice sample as drivingAudio.text-to-video.reference-guided.referenceImages, then product/character identity references, then scene/style references. Label the storyboard reference as strong.首帧,尾帧 order for first-last-frame.drivingAudio and describe it explicitly as Audio 1 in the prompt preface.reference-guided, if a suitable finished audio asset exists, also pass it as the mode's voice reference input.voiceId for TTS, then pass the generated TTS audio as Audio 1. A ready voiceId supersedes any stored reference-audio filename for planning and reporting.video-project-path or video-project-id together with those packaged assets as the main visual condition for reference-guided.payload instead of stuffing everything into one shell-like command string.{
"generationMode": "reference-guided",
"referenceImages": [
"/absolute/path/to/approved-storyboard-contact-sheet.png",
"/absolute/path/to/product-or-character-reference.png"
],
"referenceImageLabels": [
"approved storyboard contact-sheet reference, strong reference for shot order, composition, framing, lighting direction, product placement, and continuity",
"product or character identity reference, strong reference for shape, material, color, face/body identity, and distinctive details"
],
"prompt": "Image 1 is the approved storyboard contact-sheet and must be followed as a strong reference for composition, shot order, framing, lighting direction, product placement, and continuity. Image 2 is the product/character identity reference and must preserve the visible identity details. Use professional cinematic camera language for every beat: specify angle, framing, lens feel, camera movement, pacing, and transition. If a person appears, describe posture, hand movement, gaze, body turn, prop interaction, and timing relative to the camera.",
"storyboardShots": [
{
"time": "0-2s",
"picture": "Jamba 手持戴森 V8 吸尘器,身体随节奏左右摇摆,吸尘器作为道具举起。",
"sound": "使用 Jamba 已绑定 voiceId 生成的 TTS 口播,轻快节奏感。",
"shot": "中景,人物全身入镜。"
},
{
"time": "2-4s",
"picture": "Jamba 一边跳舞一边用吸尘器做挥舞动作,身体转动,动作夸张有趣。",
"sound": "节奏感音乐 + Jamba voiceId 生成的 TTS 声音。",
"shot": "中近景,跟随人物移动。"
}
]
}
15 seconds, use the queue's long-video capability in one tool call. If the approved storyboard is clear enough to split automatically, pass the final durationSeconds and the approved storyboardShots:{
"generationMode": "reference-guided",
"durationSeconds": 45,
"referenceImages": [
"/absolute/path/to/approved-storyboard-contact-sheet.png",
"/absolute/path/to/product-or-character-reference.png"
],
"prompt": "Create one continuous 45-second final video from the approved storyboard. The runtime may split it into <=15 second generation segments, but the user-facing output should be one complete concatenated video. Preserve visual continuity across segment boundaries.",
"storyboardShots": [
{
"time": "0-5s",
"picture": "Opening product reveal with slow dolly-in.",
"sound": "Music intro.",
"shot": "Wide shot to medium close-up."
},
{
"time": "5-12s",
"picture": "Presenter enters and demonstrates the product.",
"sound": "Approved voiceover line.",
"shot": "Medium shot with slow lateral tracking."
}
],
"waitForCompletion": true
}
videoSegments when segment boundaries, references, mode, audio, or prompt details must be controlled. Each segment must be <=15 seconds:{
"generationMode": "reference-guided",
"durationSeconds": 45,
"videoSegments": [
{
"durationSeconds": 15,
"prompt": "Segment 1: opening reveal from storyboard rows 1-3. Keep the product centered and preserve the approved lighting.",
"referenceImages": ["/absolute/path/to/keyframe-1.png"]
},
{
"durationSeconds": 15,
"prompt": "Segment 2: demonstration beats from storyboard rows 4-6. Match the same room, product placement, and camera height.",
"referenceImages": ["/absolute/path/to/keyframe-2.png"]
},
{
"durationSeconds": 15,
"prompt": "Segment 3: closing call-to-action from storyboard rows 7-9. Continue the same visual identity and end on the approved hero frame.",
"referenceImages": ["/absolute/path/to/keyframe-3.png"]
}
],
"waitForCompletion": true
}
video-project-id / video-project-path; the host will use the confirmed project script as storyboard input.ffmpeg concatenation only for explicit editor/project assembly or imported clips. For normal AI-generated long videos, rely on the unified video generation queue.AFaffaan-m/ECC278k近 7 天新增 4,046 个 star
ANanthropics/skills181k近 7 天新增 1,119 个 star
SHShubhamsaboo/awesome-llm-apps141k近 7 天新增 808 个 star
HAharry0703/MoneyPrinterTurbo130k近 7 天新增 1,722 个 star
PApaperclipai/paperclip101k近 7 天新增 2,948 个 star