You think X, actually Y (three-beat ladder)
Template (segment lengths assume duration 10 → 30% / 30% / 40%; rescale for 5 or 15): Beat 1 YOU THINK {X}; Beat 2 ACTUALLY: IT’S {Y}; Beat 3 BUT WHAT REALLY DECIDES IS {Z} — X / Y / Z come from the user’s brief (you compress each to ≤6 words for on-screen legibility). Hard cuts and kinetic energy between beats. English subtitles with exact windows. Default duration is 10 when unspecified.
Dependencies: WERYAI_API_KEY + Node.js 18+. scripts/video_gen.js + WERYAI_VIDEO_API.md. No other Cursor skills required.
Prerequisites
- -
WERYAI_API_KEY must be set; Node 18+. Prefer public https image URLs; if the assembled scripts/video_gen.js supports local file paths, review/verify the script and explicitly consent before local read-and-upload to WeryAI. - Non-empty
model in every submit-* / wait JSON. - Each successful task submission may consume credits; re-submit creates new paid tasks.
Security, secrets, and API hosts
- -
WERYAI_API_KEY: Secret; never commit. - API hosts fixed in
video_gen.js. - Local image handling disclosure: Prefer public
https image URLs. If the assembled scripts/video_gen.js supports local file paths, it may read a local image and upload it to WeryAI to obtain a public URL; require review / verification and explicit consent before using that path. - Higher assurance: Prefer a short-lived or isolated environment; review
scripts/video_gen.js before production use. Verify whether the runtime can read local image files and upload them to WeryAI, and obtain explicit consent before using that path.
Pre-submit gate (mandatory)
⚠️ No paid submit without explicit user confirmation. Do not call submit-text, submit-image, submit-multi-image, or wait until the user has explicitly approved the parameter table (including full expanded prompt with X / Y / Z filled and timed caption windows). Never infer consent from silence or vague “continue.” Explicit means clear intent such as confirm / go / approved / yes, generate (or equivalent).
Parameter confirmation table (before any submit): model, duration, aspect_ratio, resolution (Seedance only), generate_audio, negative_prompt (Kling only), image / images (if used), and the entire expanded prompt (not a summary).
Prompt expansion (mandatory)
- - Duration: Default 10; 5 or 15 when allowed and requested.
- Timeline scaling: Keep 30% / 30% / 40% of total runtime for the three beats (adjust seconds in the written prompt); or another explicit split the user approves.
User must supply (or approve) X, Y, Z concepts—if they only give a topic, propose three beats in the confirmation table before submit.
Visuals: Three distinct looks per beat (e.g. office runner → chess flip → neon brain schematic); arrows reversing, color grade shift each beat; motion throughout.
Typography: Bold sans, outline, lower third; ALL CAPS optional for punch—keep lines short.
Negatives (Kling): illegible text, watermark.
Confirmation: The full prompt including filled X/Y/Z inside the timed block appears only in the pre-submit table; see ## Pre-submit gate (mandatory) — wait for explicit approval before submit-* or wait.
Niche checklist
- - Avoid demeaning groups; critique ideas, not people.
- If user’s Z is vague, default to SKILL / LUCK / COGNITION style abstractions they confirm.
Workflow
- 1. Choose path: text-to-video, single image, or multi-image (SEEDANCE20 only, ≤3 URLs).
- Extract or draft X, Y, Z; if the user only gave a topic, propose three beats and get their OK on concepts before expanding the full cinematic prompt.
- Expand prompt (mandatory): Build the full production
prompt (three distinct looks, motion, timed English captions per beat, negatives for Kling). Validate length against prompt_length_limit for the chosen model. - Pre-submit gate: Show the parameter confirmation table with the complete expanded
prompt. Stop until the user explicitly confirms or requests edits. - Submit (async, default): After explicit confirmation, run
submit-text, submit-image, or submit-multi-image (same JSON shape as wait; see WERYAI_VIDEO_API.md). Do not start a long blocking wait in the same turn unless the user already asked to block until the video is ready. - Immediate notify: On successful accept (e.g.
taskId / batchId returned), immediately tell the user the id(s), short status (e.g. queued), and ask whether to continue with status polling or wait (block-until-done). - Continue (user-driven): Only after they agree, poll
status --task-id <id> at reasonable intervals or run wait --json '…' with the same payload — per user choice. - Return results:
[Video](url) when URLs exist; otherwise explain errorCode / errorMessage. Never wrap playable links in code fences.
CLI reference
After confirmation — async submit, then status (user opts in to polling):
~~~sh
node scripts/videogen.js submit-text --json '{"model":"KLINGV30PRO","prompt":"…","duration":10,"aspectratio":"9:16","generateaudio":true,"negative_prompt":"illegible text, watermark, garbled captions"}'
node scripts/videogen.js submit-image --json '{"model":"SEEDANCE20","prompt":"…","image":"https://…","duration":10,"aspectratio":"9:16","resolution":"720p","generate_audio":true}'
node scripts/videogen.js status --task-id ID>
~~~
Block until done — only if the user explicitly chose wait:
~~~sh
node scripts/videogen.js wait --json '{"model":"SEEDANCE20","prompt":"…","duration":10,"aspectratio":"9:16","resolution":"720p","generate_audio":true}'
~~~
Full reference (submit-multi-image, stdout fields, errors): WERYAI_VIDEO_API.md.
Definition of done
Video or a clear error. Pre-submit: full expanded prompt with three non-overlapping time ranges (scaled to duration) and concrete English for each beat was explicitly user-confirmed before submit. After submit: user was notified with task id(s) and chose status vs blocking wait. Playable URLs must be [label](url) only — not inside code blocks.
Boundaries (out of scope)
- - Not financial or medical advice—rhetorical template only.
resources/WERYAI_VIDEO_API.md for CLI; no negative_prompt on Seedance.- Multi-image only SEEDANCE20, max 3.
Example prompts
- - INLINECODE64
- INLINECODE65
- INLINECODE66
- INLINECODE67
Model and API constraints (frozen for this skill)
Text-to-video
| modelkey | durations | aspectratios | resolutions | audio | negativeprompt | prompt limit |
|---|
| KLINGV30PRO | 5, 10, 15 | 9:16, 1:1, 16:9 | (omit) | yes | yes | 2000 |
| KLINGV30_STA |
5, 10, 15 | 9:16, 1:1, 16:9 |
(omit) | yes | yes | 2000 |
| SEEDANCE
20 | 5, 10, 15 | 9:16, 1:1, 16:9 | 480p, 720p | yes | no | 2000 |
Image-to-video
| modelkey | durations | aspectratios | resolutions | audio | negativeprompt | image slots |
|---|
| KLINGV30PRO | 5, 10, 15 | 9:16, 16:9, 1:1 | (omit) | yes | yes | single INLINECODE68 |
| KLINGV30_STA |
5, 10, 15 | 9:16, 16:9, 1:1 |
(omit) | yes | yes | single
image |
| SEEDANCE
20 | 5, 10, 15 | 9:16, 1:1, 16:9 | 480p, 720p | yes | no | up to
3 images |
Recommended models
| Tier | modelkey | Default duration |
|---|
| ⭐ Best | KLINGV30PRO | 10 |
| 👍 Good |
KLING
V30_STA | 10 |
| ⚡ Fast | SEEDANCE
20 | 10 (
resolution:
720p) |
Default parameters
| Field | Value |
|---|
| aspect_ratio | 9:16 |
| duration |
10 |
| generate_audio | true |
| resolution | 720p (Seedance) |
| negative_prompt | Kling:
illegible text, garbled captions, watermark |
Text-to-video (primary)
Lock X/Y/Z with user → expand timed caption block → pre-submit table → submit-text → notify task id → user picks status or wait.
Image-to-video (optional)
Single hero → three visual skins across beats → submit-image (or submit-multi-image for Seedance, ≤3) → same notify → user-driven polling as above.
Tips
- - Translate Chinese user input to English captions unless they specify on-screen language.
- Z lands best when it feels one level meta above Y.
Packaged as think-x-actually-y-video-gen.
技能名称: think-x-actually-y-video-gen
详细描述:
你以为X,其实是Y(三拍阶梯式结构)
模板(片段时长假设duration为10 → 30% / 30% / 40%;若为5或15则按比例缩放): 第一拍 你以为{X};第二拍 其实:是{Y};第三拍 但真正决定的是{Z} — X / Y / Z 来源于用户需求(每个压缩至≤6个词,确保屏幕可读性)。各拍之间采用硬切和动态能量转换。英文字幕需精确时间窗口。未指定时,默认duration为10。
依赖项: WERYAIAPIKEY + Node.js 18+。scripts/videogen.js + WERYAIVIDEOAPI.md。无需其他Cursor技能。
前置条件
- - WERYAIAPIKEY 必须设置;Node 18+。优先使用公开https图片URL;如果整合的scripts/video_gen.js支持本地文件路径,请审查/验证脚本,并在本地读取并上传至WeryAI前获得明确同意。
- 每个submit-* / wait JSON中的model不能为空。
- 每个成功的任务提交可能消耗积分;重新提交将创建新的付费任务。
安全、密钥与API主机
- - WERYAIAPIKEY:保密;切勿提交。
- API主机固定于videogen.js中。
- 本地图片处理声明:优先使用公开https图片URL。如果整合的scripts/videogen.js支持本地文件路径,它可能读取本地图片并上传至WeryAI以获取公开URL;使用该路径前需审查/验证并获得明确同意。
- 更高保障:优先使用短期或隔离环境;在生产环境使用前审查scripts/video_gen.js。验证运行时能否读取本地图片文件并上传至WeryAI,并在使用该路径前获得明确同意。
提交前检查(强制)
⚠️ 未经用户明确确认,不得进行付费提交。 在用户明确批准参数表(包括完整展开的prompt,其中X / Y / Z已填充,并包含定时字幕窗口)之前,不要调用submit-text、submit-image、submit-multi-image或wait。切勿从沉默或模糊的“继续”中推断同意。明确意味着清晰的意图,如确认 / 开始 / 已批准 / 是的,生成(或等效表达)。
参数确认表(任何提交前): model、duration、aspectratio、resolution(仅Seedance)、generateaudio、negative_prompt(仅Kling)、image / images(如使用),以及整个展开的prompt(非摘要)。
提示词扩展(强制)
- - 时长: 默认10;允许且要求时可为5或15。
- 时间线缩放: 保持总运行时间的30% / 30% / 40%用于三拍(在书面提示词中调整秒数);或用户批准的另一个明确分割。
用户必须提供(或批准)X、Y、Z概念——如果他们只给出一个主题,在提交前于确认表中提出三拍。
视觉效果: 每拍三种不同外观(例如办公室跑者 → 国际象棋翻转 → 霓虹大脑示意图);每拍箭头反转、色调转变;全程动态。
排版: 粗体无衬线、轮廓、下方三分之一;全大写可选以增强冲击力——保持短行。
负面提示(Kling): 难以辨认的文字、水印。
确认: 包含在定时块内填充了X/Y/Z的完整prompt仅出现在提交前表中;参见## 提交前检查(强制) — 在submit-*或wait前等待明确批准。
细分检查清单
- - 避免贬低群体;批评想法,而非人。
- 如果用户的Z模糊,默认使用技能 / 运气 / 认知风格的抽象概念,由用户确认。
工作流程
- 1. 选择路径:文本转视频、单图或多图(仅SEEDANCE20,≤3个URL)。
- 提取或起草X、Y、Z;如果用户只给出主题,提出三拍并在扩展完整电影提示词前获得他们对概念的同意。
- 扩展提示词(强制): 构建完整的制作prompt(三种不同外观、动态、每拍定时英文字幕、Kling的负面提示)。根据所选model的promptlengthlimit验证长度。
- 提交前检查: 显示参数确认表,包含完整展开的prompt。停止直到用户明确确认或请求修改。
- 提交(异步,默认): 在明确确认后,运行submit-text、submit-image或submit-multi-image(与wait相同的JSON结构;参见WERYAIVIDEOAPI.md)。除非用户已要求阻塞直到视频就绪,否则不要在同一个回合中启动长时间阻塞的wait。
- 即时通知: 成功接受后(例如返回taskId / batchId),立即告知用户ID、简短状态(例如排队中),并询问是否继续使用status轮询或wait(阻塞直到完成)。
- 继续(用户驱动): 仅在他们同意后,以合理间隔轮询status --task-id ,或根据用户选择运行wait --json …,使用相同的有效负载。
- 返回结果:当URL存在时返回Video;否则解释errorCode / errorMessage。切勿将可播放链接包裹在代码块中。
CLI参考
确认后 — 异步提交,然后status(用户选择轮询):
~~~sh
node scripts/videogen.js submit-text --json {model:KLINGV30PRO,prompt:…,duration:10,aspectratio:9:16,generateaudio:true,negative_prompt:illegible text, watermark, garbled captions}
node scripts/videogen.js submit-image --json {model:SEEDANCE20,prompt:…,image:https://…,duration:10,aspectratio:9:16,resolution:720p,generate_audio:true}
node scripts/videogen.js status --task-id ID>
~~~
阻塞直到完成 — 仅当用户明确选择wait时:
~~~sh
node scripts/videogen.js wait --json {model:SEEDANCE20,prompt:…,duration:10,aspectratio:9:16,resolution:720p,generate_audio:true}
~~~
完整参考(submit-multi-image、标准输出字段、错误):WERYAIVIDEO_API.md。
完成定义
Video 或明确的错误。提交前: 完整展开的prompt,包含三个不重叠的时间范围(按duration缩放)和每拍的具体英文,在提交前已明确获得用户确认。提交后: 用户已收到任务ID通知,并选择了status或阻塞wait。可播放URL必须仅为label — 不在代码块内。
边界(范围外)
- - 非财务或医疗建议——仅为修辞模板。
- resources/WERYAIVIDEOAPI.md 用于CLI;Seedance无negativeprompt。
- 多图仅SEEDANCE2_0,最多3张。
示例提示词
- - X effort success, Y choices, Z cognition—office to chess to abstract mind
- X cheap price, Y hidden fees, Z trust—ecommerce vibes
- Product hero image URL → three-beat reversal with same windows
- X free time, Y discipline, Z identity—gym / calendar / mirror visual metaphors
模型与API约束(本技能固定