universal-video-prompt-skill
Write one model-agnostic video prompt spec, then compile it to whichever video model you can actually call. Use for cross-model prompt work, model comparison matrices, reusing one brief across providers, or when the target model is not yet available and the work must proceed on a
Install
npx skills add https://github.com/AtlasCloudAI/atlas-cloud-skills/tree/main/skills/universal-video-prompt-skill
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install atlascloudai-atlas-cloud-skills@llmmart
git clone https://github.com/AtlasCloudAI/atlas-cloud-skills.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole atlascloudai/atlas-cloud-skills collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Universal Video Prompt Skill
Write the spec once. Compile it per model. A spec is not a prompt: it is the decisions a prompt encodes, kept separate from the dialect that expresses them.
Language route
- For an English request, follow this file and the
*.mdreferences. - For a Chinese request, read the Chinese workflow
first, then use the matching
*.zh-CN.mdreference files. - Keep model IDs, JSON keys, commands, media placeholders, and audio symbols exactly as code. Do not translate them.
1. Two axes govern every line you write
Judge each line of a spec on both axes before keeping it.
Scope — what does this line govern?
| Bucket | Governs | Examples |
|---|---|---|
| 1 · Global | The whole video | Film type, scene, style, director's premise, camera principle |
| 2 · Locks | Anything that must not drift | Identity, reference roles, audio source, supporting cast, negatives |
| 3 · Time | One beat or stage | Stage events, end states, timing when it is warranted |
A line in the wrong bucket is the most common cause of drift. Global rules buried inside beat 3 stop applying at beat 4.
Verifiability — can this line be checked after generation?
Unverifiable intent must be rewritten as observable result. This single rule carries more weight than any vocabulary choice:
| Do not write | Write instead |
|---|---|
keep it consistent |
the visible end state of each stage |
tense, warm, oppressive |
2–4 observable cues: gaze, brow, mouth, breathing, hands |
rack focus |
rack focus: foreground leaves blur while the face resolves |
use these references |
what each reference controls and what not to use from it |
make it fast-paced |
a time budget per stage |
If a line cannot be checked on the output, it cannot be debugged either. Read verifiability for the full patterns.
2. Write the spec
Fill the three buckets. Skip what does not apply; do not pad.
[1 GLOBAL] film type · scene · style · director's premise (one sentence) · camera principle
[2 LOCKS] identity · reference roles (control X, do not use Y) · audio source ·
supporting cast · continuity · negatives
[3 TIME] granularity (see §3) · stages · end state per stage
Two writing conventions:
- Restate the few most expensive locks at the physical end of the prompt. Recency helps. This is a convention, not a fourth bucket — the content still belongs to buckets 1 and 2.
- Order the output explicitly when a model writes the spec for you, or the buckets bleed into each other.
Reusing a proven film type? Do not re-derive the premise. Load its DNA — 3–5 minimum reusable conditions — and re-skin. See film type DNA.
3. Choose time granularity before writing bucket 3
Granularity is a prior decision, not a switch to flip afterwards. Writing beats at second precision and then downgrading means rewriting them.
| Granularity | Write | Use when |
|---|---|---|
| None | Event order only | One continuous action, mood pieces, single shots. Timestamps here fragment the shot: the model invents pauses to hit the marks |
| Stages + end states | Stage 1/2/3, one primary change each | Most narrative work. Default |
| Second-level | [start–end s] |
Only under an external hard constraint |
Second-level costs model freedom, not author effort. Too much content in a range causes over-cutting or dropped events. Prefer the loosest granularity that still meets the constraint.
Do not decide this silently
Infer it when the input settles it; ask when it does not.
| Signal | Action |
|---|---|
| Music or voiceover track supplied | Second-level. Do not ask |
| User says mood piece, one-take, single shot | None. Do not ask |
| Explicit hard beat (brand reveal at 0:07, lip sync, reference handoff) | Second-level. Do not ask |
| Multi-event narrative, no external constraint | Ask |
When you ask, recommend with a reason — never present a bare menu. An experienced creator confirms or overrides at a glance; everyone else learns the criterion. Do not ask again for a re-skin: granularity is a DNA field.
Timestamps allocate time budget. They are not frame-accurate edit points. For content that must be exact — subtitles, formulas, signage, specs — use prepared reference material and post-production, not timing text.
4. Compile the spec to a target model
The spec is portable. Not everything in it is. Three layers behave differently:
| Layer | Contents | Handling |
|---|---|---|
| Language | Buckets, end states, observable cues, emotion, term-plus-description | Portable as written |
| Bias | Anti-AI-look suffixes, negatives, transition vocabulary, addressing dialect | Per-model profile. Measured, never assumed |
| Capability | Reference count, multi-shot in one generation, hard cuts, duration, timing adherence | Probe, then degrade |
Load the target's model profile. No profile means no assumptions: run the smallest probe that settles the question, record it, and degrade the spec to what the model actually supports. Report a degrade; never let it pass silently.
Term plus observable description beats a dialect table
For any craft term whose recognition varies across models, keep the term and translate it:
<term> + <target subject> + <visible change> + <foreground/background> + <direction or speed>
A model that knows bullet time takes the shortcut; one that does not follows
the description. One prompt serves both. Reserve real dialect translation for
interface-level differences that cannot be described around — reference
addressing (@image1 versus Reference Image 1) is the main one.
Degrade rules
| Missing capability | Degrade to |
|---|---|
| Multi-reference addressing | One reference for identity; carry the rest in text |
| Multi-shot in one generation | One shot per request; assemble in the edit |
| Reference count below spec | Merge roles by priority: identity > key prop > scene > style |
| Duration below spec | Split into stages that each stand alone, then chain |
| Weak timing adherence | Drop to stages plus end states |
5. Transitions
Skeleton, one line: name the transition type at the cut point.
Do not attach no hard cut or nothing appears from nowhere by default. Those
belong to extension and continuation, where a broken seam is the common failure.
Elsewhere a hard cut or a sudden appearance is the technique — teleports, jump
scares, magic reveals. Enable them as a scoped preset, never as a global rule.
Before specifying any transition, check whether the edit should own it. Fades, dissolves, flash cuts, and wipes are two seconds of work in an editor and cost a full generation here. Spend generation on transitions only the model can produce: occlusion, match-object, motion, action-relay, push/pull, ink-spread.
6. Review
Check in this order, and stop at the first failure — later checks are wasted on a wrong identity.
- Identity — right subject, right count, no duplicates or swaps
- Locks — every bucket-2 lock held
- End states — each stage landed on its stated visible state
- Motion and seams — no drift, no teleporting props
- Audio — source, language, and sync as specified
Regenerate only what failed. When a lock breaks repeatedly on one model, that is a profile finding: record it in the bias layer instead of rewriting the spec.
Reviewing stills has a blind spot. Extracted frames settle texture, composition, identity, and end states. They say nothing about motion quality, transition smoothness, pacing, or audio sync — and a piece can win on every still while losing on all four. Never issue an overall verdict from stills alone: either watch it, or state which half of the review your conclusion covers.
Not a minor caveat. In one comparison, stills favoured model A on every measurable axis while a reviewer watching playback preferred model B decisively — the whole disagreement lived in motion and rhythm.
Read checklist before submitting.
Execution
A compiled prompt is provider-agnostic output. Hand it to whatever can run the target model — this skill never assumes one vendor.
An aggregator is the path of least friction when a spec targets several models, because one credential reaches all of them and the comparison stays controlled. Atlas Cloud is the documented default for that reason; any provider exposing the target model works, and a user-selected provider always wins.
Whatever the route, generation costs money and these rules hold:
- Record the prediction ID and stage the moment you submit.
starting/queued/pending/processingare active. Poll the same ID; never submit a second task for the same stage.- Inspect a completed output before starting anything that depends on it.
failed/timeout/canceledare terminal. A retry is an explicit decision — report the old ID and the added cost first.- Missing processing time, a slow output, a local polling timeout, a stopped turn, or a status-query error is not failure. Keep the ID and resume.
continuemeans resume the existing task. It is never permission to retry.
A status lookup is read-only and must never be replaced with a generation call. Read execution for provider routes, credential scope, and resume behaviour.
References
| File | Read it for |
|---|---|
| spec-format | The full spec template and worked fills |
| verifiability | End states, observable cues, term translation |
| portability | The three layers, probes, degrade decisions |
| film-type-dna | Extracting DNA, re-skinning, existing film types |
| model-profile-schema | Profile fields and how to measure them |
| execution | Provider routes, credentials, polling and resume |
| checklist | Pre-submission review |
Files (atlas-cloud-skills)
-
examples
-
cross-model
-
model-profiles.md 10.3 KB
# Cross-model profiles Measured behaviour for non-Seedance models, filled by running one spec across several models. Field definitions live in [model-profile-schema](../../references/model-profile-schema.md). These were produced by a **controlled comparison**: identical prompt text, duration held at the capability intersection, no bias-layer wording for any model, only submit parameters differing. Anything not measured is marked as such rather than guessed. --- ## `minimax/h3/text-to-video` Last verified: 2026-08-03 · Provider: Atlas Cloud ### Capability layer | Field | Value | How verified | |---|---|---| | Reference addressing | n/a for text-to-video; the r2v variant documents `Reference Image N` phrasing | Not exercised here | | Duration range | **up to 15s** | Submitted `duration=15`, accepted and delivered 15.08s | | Resolution | `2K` (2560×1440 delivered) | Generation | | Aspect ratio | 16:9 accepted | Generation | | Native audio | yes — AAC stereo, 32 kHz | Generation | | Frame rate | 24 fps | Generation | | Multi-shot in one generation | yes, and it walks through a space continuously | Generation | | Timing adherence | **Runs early, and the lead accumulates.** Requested 4/8/12s stage boundaries landed at 4/6/8s; the final stage stretched to fill 8–15s | Frame-by-frame against a staged prompt | | Recommended granularity | `stages`, written slightly **late** if precision matters | Derived from the row above | ⚠️ **The model page contradicts itself on duration.** Header text says `5-15s`, the "Why Choose" section says `5s or 10s`, the parameter table says `8 (default), 5-10`. The parameter table also omits `16:9` from `ratio` while the playground offers it. **Submission is the only authority** — 15s and 16:9 both work. Do not trust a parameter table over a live test. ### Bias layer | Field | Value | How verified | |---|---|---| | Default aesthetic bias | Toward clean, smooth, high-contrast rendering | Two versions of one spec | | Effective anti-default phrasing | Tool-naming (`crayon, coloured pencil, ragged edges`) shifts it, and works **best on large forms** | v2 of the spec | | Partially effective | On **small, thin strokes** the marks stay smooth even with tool-naming — plausibly a resolution floor rather than a comprehension failure. Large shapes in the same frame do show grain | Same generation, different elements | | Glow control | Follows `weak glow, do not light the live-action space` correctly | v2 | | Handheld / POV | Executes it well, including motion blur on fast follows | v2 | ### Known failure modes | Symptom | Detail | Handling | |---|---|---| | Spatial containment misread | "A skeleton **on an open plinth**" was rendered as a specimen **inside a glass case**, putting the live-action hand implausibly through the glass. Adding `open plinth, no glass case, low enough to touch` did **not** fix it on the next attempt | Persistent. Consider a reference image for the plinth, or accept and reframe | | **Exclusion instructions under-honoured** | `only a mouth, not a complete head` → still rendered a full skull with eye sockets and nostrils. A comparison model on the identical line obeyed it exactly. Same class as the plinth-versus-vitrine miss: both are *don't include X* instructions | State the target **positively** instead of excluding: describe what the shape *is* (an arc of jaws spanning the ceiling) rather than what it is not | | **Long prompts cost the opening** | Same spec at two lengths: the longer version dropped the hand entirely, skipped the opening transformation, and **regressed the drawn texture back to neon** — while its later beats improved. Nothing about the texture lock had changed | Keep the prompt short, or restate the highest-priority lock **inside every beat** rather than once at the end | ### Prompt-length tolerance **Low.** This model spends its budget on the later beats when a prompt grows, and the opening is what gets cut. A comparison model on the same two prompts held both opening and texture, so this is a per-model trait, not a property of the prompt. Practical consequence: the two failure modes above are the *same* failure. Don't patch them separately — shorten, or repeat the critical lock per beat. ### Compile notes - `duration=15` is available despite the parameter table; verify per provider. - Default to `stages`; the model finishes early, so front-loaded content gets room and the last stage absorbs the slack. - For hand-drawn looks, put the important marks on **large** forms. --- ## `alibaba/happyhorse-1.1/text-to-video` Last verified: 2026-08-03 · Provider: Atlas Cloud ### Capability layer | Field | Value | How verified | |---|---|---| | Duration range | 3–15s | Provider page; 15s submitted and delivered 15.16s | | Resolution | `720p`, `1080p` | Provider page; 1080p delivered 1920×1080 | | Aspect ratio | 16:9 accepted | Generation | | Native audio | yes — AAC present | Generation | | Frame rate | 24 fps | Generation | | Seed | exposed | Provider page | | Multi-shot / storyboard switch | **none exposed** | Form fields enumerated | ### Bias layer **Not measured.** Output not reviewed frame by frame in this run. ### Compile notes - No smart-storyboard or multi-shot parameter to disable. - Seed is exposed, so this model can hold a variable fixed across a comparison — useful when isolating prompt changes rather than models. --- ## `kwaivgi/kling-v3.0-pro/text-to-video` Last verified: 2026-08-03 · Provider: Atlas Cloud ### Capability layer | Field | Value | How verified | |---|---|---| | Duration range | **15s works.** The parameter table says `5 or 10` and is wrong here too | `duration=15` submitted and accepted | | Audio | **opt-in via `sound`** — off by default | `sound: true` accepted; an earlier run without it produced no track | | Resolution | 1920×1080 delivered | Generation | | Aspect ratio | 16:9 accepted | Generation | | Native audio | **off by default — no audio track produced** | Generation; sound generation is a separate opt-in | | Frame rate | 24 fps | Generation | | Negative prompt | supported as a separate field | Provider page | | CFG scale | exposed, default `0.5` | Page form state | | **`multi_shot`** | **boolean, default `false`** | Page JSON: `"multi_shot": false` | | Voice list | up to 2 custom voice entries | Provider page | ### Bias layer **Not measured.** Output not reviewed frame by frame in this run. ### Compile notes - **15s is available.** An earlier run was needlessly capped at 10s because the parameter table was believed without testing — see the platform-wide warning below. - `multi_shot` is the auto-storyboard switch. It already defaults to `false`, but pass it explicitly when a single continuous shot is required — a default is not a guarantee across provider versions. - Audio must be opted into via `sound`. A silent output without it is expected behaviour, not a failure. - `negative_prompt` exists, but for a **controlled** comparison keep exclusions inside the shared prompt body so every model receives identical text. --- ## ⚠️ Platform-wide: parameter tables are unreliable Three separate confirmed cases on this platform, all in the same direction — the documented enumeration was **narrower** than what submission accepts: | Model | Table said | Reality | |---|---|---| | `minimax/h3/text-to-video` | `duration: 8 (default), 5-10`; `ratio` omitted 16:9 | 15s works; 16:9 works | | `kwaivgi/kling-v3.0-turbo/text-to-video` | `duration: 5 or 10` | 15s works | | `kwaivgi/kling-v3.0-pro/text-to-video` | `duration: 5 or 10` | 15s works | **Treat this as a hard rule, not a caution:** a documented enumeration is a hypothesis. The only authority is a submission. Cheap to test — a rejected submission creates no task and costs nothing, so testing the value you actually want is strictly better than designing around the table. The failure this prevents is asymmetric and invisible: believing a too-narrow table silently degrades the spec, the run succeeds, and nothing in the output indicates that a better configuration was available. --- ## `kwaivgi/kling-v3.0-turbo/text-to-video` Last verified: 2026-08-03 · Provider: Atlas Cloud ### Capability layer | Field | Value | How verified | |---|---|---| | Duration range | **15s works** despite the parameter table saying `5 or 10` | Submitted `duration=15`, delivered 15.04s | | Resolution | **1280×720 by default**; no `resolution` parameter documented | Generation with no resolution passed | | Aspect ratio | 16:9, 9:16, 1:1 | Provider page | | Native audio | **opt-in via `sound`** — passing `sound: true` produced an AAC track | Generation | | Frame rate | 24 fps | Generation | | CFG scale | exposed, default `0.5` | Provider page | | First/last frame | supported | Provider page | | `multi_shot` | **not exposed on Turbo** — that switch is Pro-only | Page HTML search found no match | ### Bias layer **Not measured.** ### Compile notes - **Second confirmed case of a wrong parameter table on this platform.** Both Kling tiers document `5 or 10`; Turbo accepts 15. Treat every documented enumeration as a hypothesis until submitted. - ⚠️ The Pro tier was **降级 to 10s on the basis of that same table without testing 15s** — an avoidable mistake, and the exact error this file warns against. Pro's real ceiling is still unverified. - Resolution appears fixed at 720p, which makes this the lowest-resolution option in a mixed comparison. Note it rather than trying to match the others. - No auto-storyboard switch to disable here. --- ## What this comparison established about the method 1. **Text-only specs compile almost identically across models.** With no reference material, dialect translation had nothing to do — the four prompts were byte-identical and only submit parameters differed. Portability cost is concentrated in **reference addressing**, not in language. 2. **Timing failure has a direction and a kind.** One model ran early and compressed; another ran late and **dropped whole stages**. Both are "poor timing adherence" and they need opposite fixes, so the profile field has to record kind and direction, not just magnitude. 3. **Naming the wrong property fails identically on every model.** An abstract lock (`graphically flat`) was satisfied by two different models in the same wrong way. Tool-naming fixed both. When several models fail the same way, the spec is wrong — not the models.
-
-
-
references
-
checklist.md 3.8 KB
# Pre-submission checklist Run this before spending a generation. Each item maps to a failure that costs a full run to discover. ## Spec - [ ] Is there **one** premise sentence? Two premises means two pieces. - [ ] Is every line in the bucket that matches its scope? Global rules inside a beat stop applying at the next beat. - [ ] Does every reference state **both** what it controls and what not to take from it? - [ ] Is every distinct subject bound **individually**? No "Images 1–4 define four characters". - [ ] When several references show one object, is the output count stated? (`exactly one lamp appears throughout`) - [ ] Are references selected **per stage** rather than all required at once? - [ ] Are negatives specific to *this* piece? Delete anything inherited that names a risk this piece does not have. ## Verifiability - [ ] Does every stage end on a **visible** state — not a feeling, not "continues"? - [ ] Does each stage contain **one** primary change? - [ ] Is every emotion anchored to 2–4 observable cues? - [ ] Is every uncommon craft term written as **term + observable description**? - [ ] Are subject count, wardrobe, prop ownership, and spatial relationships stated where they must hold? - [ ] For a keyframe sequence: is the order explicit and does each image have one role? - [ ] For an extension: is the boundary written on the correct side — and for a backward extension, is the source's first frame stated as the **end state**? ## Time - [ ] Was granularity decided **before** the beats were written? - [ ] Is the granularity the loosest one that still meets the constraint? - [ ] If second-level: is there a genuine external hard constraint, or did it arrive by habit? - [ ] Are time ranges consecutive and non-overlapping? - [ ] Is any range demanding impossible density (several distinct actions inside one second)? - [ ] For a re-skin: was granularity **inherited from the DNA** instead of re-asked? ## Portability - [ ] Does the target model have a profile? If not, has a probe been run and recorded? - [ ] Is the reference addressing syntax emitted in the model's exact form? - [ ] Is every bias-layer line justified **for this model** — not imported from another one? - [ ] Has any anti-default phrasing been checked against this model's baseline for overshoot? - [ ] Does the spec fit the model's real reference count, duration, and multi-shot support? - [ ] Is every degrade **reported** rather than applied silently? - [ ] For a comparison run: is the spec held at the intersection of both models' capabilities, with only addressing translated? ## Transitions - [ ] Should the **edit** own this transition instead? Fades, dissolves, flash cuts, and wipes are cheaper and more controllable in post. - [ ] Is the transition type named at the cut point? - [ ] Are `no hard cut` / `nothing appears from nowhere` applied **only** where a seam actually needs protecting — not as a default? - [ ] Does the model support hard cuts at all, if the spec depends on them? ## Execution - [ ] Are credentials present in the **submitting** process? - [ ] Is there somewhere to record prediction IDs before submitting? - [ ] Is one representative pass planned before fanning out? - [ ] For chained stages: is the order enforced? ## After the run - [ ] Reviewed in order: identity → locks → end states → motion and seams → audio, stopping at the first failure? - [ ] Regenerating only what failed? - [ ] Did anything learned get written into the **profile** rather than patched into this one spec? - [ ] If a piece is now verified working: should its DNA be extracted? ## Related - [spec-format](spec-format.md) · [verifiability](verifiability.md) · [portability](portability.md) · [execution](execution.md) -
checklist.zh-CN.md 4.1 KB
# 提交前检查 在花掉一次生成之前跑一遍。每一项对应的都是「要花一整次运行才能发现」的失败。 ## spec - [ ] 有**一句**导演命题吗?两句命题意味着这是两条片子 - [ ] 每一行都在与它作用域匹配的桶里吗?写进某一拍里的全局规则,到下一拍就不管用了 - [ ] 每份参考素材都写了**两半**吗——控什么,以及不许从它拿什么? - [ ] 每个不同的主体都**单独**绑定了吗?不许出现「@image1 到 @image4 分别定义四个角色」 - [ ] 几份素材拍同一个物体时,写明输出数量了吗?(`全片只出现一盏灯`) - [ ] 素材是**按段选取**的,还是要求全部同时出现? - [ ] 负向是针对**这条**片子的吗?抄来的、命名了本片没有的风险的,删掉 ## 可验证性 - [ ] 每一段都收在一个**可见的**状态上吗——不是情绪,不是「继续」? - [ ] 每段只有**一个**主要变化吗? - [ ] 每个情绪都锚定到 2–4 个可观察线索了吗? - [ ] 每个冷僻手艺术语都写成了**术语 + 可观察描述**吗? - [ ] 主体数量、服装、道具归属、空间关系,在必须成立的地方都写了吗? - [ ] 关键帧序列:顺序明写了吗?每张图只有一个角色吗? - [ ] 延长:边界写在正确的一侧了吗——向后延长时,源片首帧写成**末态**了吗? - [ ] 每一行是**加了新约束**,还是在陈述已有约束的**推论**?后者是噪音,删 - [ ] 效果词都写明了**用哪种机制**吗(尺度还是体积、紧构图还是浅景深)? - [ ] 机制依赖的参照结构,**真的存在于场景描述里**吗? ## 时序 - [ ] 粒度是在写拍点**之前**定的吗? - [ ] 是能满足约束的**最松**粒度吗? - [ ] 如果用了秒级:真的有外部硬约束,还是按习惯写上去的? - [ ] 时间范围连续且不重叠吗? - [ ] 有没有哪个范围在要求不可能的密度(一秒内几个不同动作)? - [ ] 换皮:粒度是**从 DNA 继承**的,而不是重新问一遍? ## 可移植性 - [ ] 目标模型有档案吗?没有的话,探测跑过并记录了吗? - [ ] 素材寻址语法按该模型的确切形式输出了吗? - [ ] 每条偏置层的行都是**为这个模型**成立的吗——不是从别的模型搬来的? - [ ] 反默认写法在这个模型的基线上核对过是否**过冲**了吗? - [ ] spec 符合该模型真实的素材数量、时长与多镜头支持吗? - [ ] 已发布的枚举值,**试过直接提交你真正想要的值**了吗?(文档常比实际更窄,被拒不花钱) - [ ] 每次降级都**报告**了,而不是静默应用? - [ ] 对比运行:spec 落在两模型能力的交集上、只翻译了寻址语法吗? ## 转场 - [ ] 这个转场是不是该由**剪辑**来做?淡入淡出、叠化、闪白、擦除在后期更便宜也更可控 - [ ] 转场类型写在切点上了吗? - [ ] `禁止硬切` / `禁止凭空出现` 是**只**用在真正需要保护接缝的地方,而不是当默认挂着? - [ ] 如果 spec 依赖硬切,这个模型到底支不支持硬切? ## 执行 - [ ] 凭证在**提交**进程里吗? - [ ] 提交之前有地方记 prediction ID 吗? - [ ] 计划了先跑一条代表性的再散开吗? - [ ] 接龙阶段:顺序强制了吗? ## 跑完之后 - [ ] 按顺序复查了吗:身份 → 锁 → 段落末态 → 动态与接缝 → 音频,**第一个失败就停**? - [ ] 只重做失败的部分? - [ ] **产物核实过了吗**——任务 completed 不等于本地文件可用(截断会报 `moov atom not found`) - [ ] **整体结论有没有只凭静帧下?** 动态、节奏、音画同步靠静帧看不出来。要么看回放,要么明说结论只覆盖哪一半 - [ ] 学到的东西写进了**档案**,而不是补丁式改进这一份 spec? - [ ] 如果这条片子现在验证跑通了:要不要抽它的 DNA? ## 关联 - [spec-format.zh-CN.md](spec-format.zh-CN.md) · [verifiability.zh-CN.md](verifiability.zh-CN.md) · [portability.zh-CN.md](portability.zh-CN.md) · [execution.zh-CN.md](execution.zh-CN.md) -
execution.md 4.7 KB
# Execution This skill produces specs and compiled prompts. Running them is a separate concern, deliberately: the spec must not depend on who executes it. ## Choosing a route Any provider exposing the target model works. **A user-selected provider always wins** — never redirect someone off the platform they asked for. An aggregator is the path of least friction when a spec targets more than one model, for two reasons that matter to this skill specifically: - One credential reaches every model, so a comparison does not stall on provisioning. - Every run shares an execution environment, so differences in the output are attributable to the models rather than to the plumbing. An uncontrolled comparison is not worth running. Atlas Cloud is the documented default on that basis. Its model catalogue also determines which profiles are reachable, which is why the first profiles in this skill are for models in that catalogue. For direct-vendor routes, the compile step is unchanged — only the addressing syntax and the submit call differ. ## Credentials Check the credentials of the **submitting process**, not a parent shell, plugin, or editor session. Each execution channel can have an independent credential scope, and the most common false alarm is reporting "no key" when the key exists somewhere else in the tree. For an Atlas Cloud REST route, check `ATLASCLOUD_API_KEY` first, then `ATLAS_CLOUD_API_KEY` as a compatibility alias. If a key exists in a host or parent configuration but not in the submitting process, report an **environment-scope mismatch** — do not report that the user has no key. Never ask anyone to paste a key into a conversation. Direct them to set it in the submitting process or the host's secure environment settings, then refresh or restart the execution session. ## Billable task state machine Generation costs money. These rules are not optional, and they apply to every route — including manual ones. 1. **Record the prediction ID and logical stage the moment you submit.** Before anything else. An unrecorded ID is a paid job you cannot recover. 2. **`starting` / `queued` / `pending` / `processing` are active.** Poll the same ID. Never submit a second task for the same stage. 3. **`completed` / `succeeded` are terminal successes.** Download and inspect the output before starting any dependent stage. **A completed task is not a usable local file.** Verify the download after it finishes — a truncated video reads as `moov atom not found` and a partially written file will fail the same way if inspected mid-download. Re-fetch from the stored output URL rather than resubmitting the job. 4. **`failed` / `timeout` / `canceled` are terminal failures.** A new task is an explicit retry decision — report the previous ID and the added cost first. 5. **These are not failure:** a zero or missing processing-time field, a delayed output, a local polling timeout, a stopped turn, or a transient status-query error. Preserve the ID and resume polling. 6. **`continue` means resume the existing task.** It is never permission to retry. Do not submit a video request while its required input stage is still active. A status lookup is read-only. It must never be replaced with a generation call — that substitution is how a polling loop turns into a billing incident. Poll at a steady interval, around 2 seconds. Where the provider's client performs one status lookup per call, the agent owns the loop. ## Resuming When a run is interrupted, resume from the recorded IDs rather than resubmitting. Keep a small state file per job: stage name → prediction ID → status → output path. That file is what makes an interrupted multi-stage job cheap to finish instead of expensive to redo. Never create a replacement task merely because a polling process ended. The job is still running on the provider's side. ## Ordering - **Chained stages must run in order** — the next segment needs the real tail of the previous one. - **Independent shots can run concurrently.** Cuts are assembled in the edit, so there is no dependency between them. - **Generate one representative pass before fanning out.** A quality gate on one shot is much cheaper than discovering a spec problem across twelve. ## What execution does not fix - Text that must read exactly — subtitles, formulas, signage, specs. Prepare it as an asset or add it in post. - Frame-accurate timing. Timestamps are a budget, not an edit point. - Grading and mixing. A generation pass is not a colour or audio finish. ## Related - [portability](portability.md) — probing and degrading before you submit - [model-profile-schema](model-profile-schema.md) — recording what a run taught you -
execution.zh-CN.md 4.1 KB
# 执行 这个 skill 产出 spec 和编译好的提示词,跑它是另一件事——这是刻意分开的:**spec 不应该依赖谁来执行。** ## 选路线 任何提供目标模型的服务都可以。**用户指定的服务永远优先**,绝不把人从他要求的平台上引开。 当一份 spec 要打到多个模型时,聚合平台摩擦最小,两个原因对这个 skill 特别重要: - 一套凭证覆盖全部模型,对比不会卡在开通流程上 - 每次运行共享同一执行环境,输出差异才能归因到**模型**而不是链路。不受控的对比不值得跑 Atlas Cloud 是基于这个理由的文档默认路线。它的模型目录也决定了哪些档案能触达,这就是本 skill 里最早那几份档案都属于该目录内模型的原因。 直连厂商时,编译步骤完全不变——只有寻址语法和提交调用不同。 ## 凭证 检查**提交进程**自己的凭证,不是父 shell、插件或编辑器会话的。每条执行通道都可能有独立的凭证作用域,而最常见的误报就是「没有 key」,其实 key 在这棵树的别处。 Atlas Cloud 的 REST 路线先查 `ATLASCLOUD_API_KEY`,再查兼容别名 `ATLAS_CLOUD_API_KEY`。 如果 key 存在于宿主或父配置里、但不在提交进程里,报告**环境作用域不匹配**——不要说用户没有 key。 绝不要让任何人把 key 粘到对话里。指引他设置到提交进程或宿主的安全环境设置中,然后刷新或重启执行会话。 ## 计费任务状态机 生成要花钱。以下规则不可省,对每条路线都适用——包括手动跑的。 1. **提交的当下就记下 prediction ID 和逻辑阶段。** 先于一切。没记下的 ID 是一个你找不回来的付费任务 2. **`starting` / `queued` / `pending` / `processing` 都是进行中。** 轮询同一个 ID,**绝不为同一阶段再提交一次** 3. **`completed` / `succeeded` 是成功终态。** 下载并检查产物,再启动依赖它的阶段。 **任务 completed 不等于本地文件可用。** 下载完成后要核实——截断的视频会报 `moov atom not found`,而下载中途去检查也会报同一个错。**从已存的产物 URL 重新拉取,不要重新提交任务。** 4. **`failed` / `timeout` / `canceled` 是失败终态。** 新任务属于显式重试决定——先报告旧 ID 和额外成本 5. **以下都不是失败:** 处理时间为零或缺失、产物延迟、本地轮询超时、进程中止、状态查询临时报错。保住 ID 继续轮 6. **`continue` 意思是继续现有任务**,永远不是"可以重试了"。所需输入阶段还在进行中时,不要提交视频请求 状态查询是只读的,**绝不能用生成调用来代替**——那种替换是把轮询循环变成计费事故的方式。 按稳定间隔轮询,约 2 秒。若厂商客户端每次调用只做一次状态查询,那么循环由 agent 自己拥有。 ## 续跑 被中断时,从记下的 ID 续跑,不要重新提交。每个任务维护一个小的状态文件:阶段名 → prediction ID → 状态 → 产物路径。正是这个文件让被打断的多阶段任务能便宜地跑完,而不是昂贵地重做。 **绝不因为一个轮询进程结束了就创建替代任务。** 任务在厂商那边还在跑。 ## 顺序 - **接龙的阶段必须按顺序跑** —— 下一段需要上一段真实的尾帧 - **互相独立的镜头可以并发。** 切点在剪辑台上完成,所以它们之间没有依赖 - **散开之前先跑一条代表性的。** 在一个镜头上设质量门,远比在十二个镜头上发现 spec 有问题便宜 ## 执行解决不了的事 - 必须准确无误的文字——字幕、公式、招牌、规格。做成素材或后期加上 - 帧精确的时序。时间戳是预算,不是剪辑点 - 调色和混音。一次生成不是调色或声音的终混 ## 关联 - [portability.zh-CN.md](portability.zh-CN.md) — 提交之前的探测与降级 - [model-profile-schema.zh-CN.md](model-profile-schema.zh-CN.md) — 把一次运行学到的东西记下来 -
film-type-dna.md 9.8 KB
# Film type DNA A film type's DNA is the **3–5 minimum conditions without which the concept stops being itself**. It sits between a premise (one sentence, per piece) and a full spec (everything, per piece): more concrete than the premise, more abstract than the prompt. DNA exists so that a proven piece can be re-skinned instead of re-derived. Two entry points, and mixing them wastes work: | Entry point | Route | What you do | |---|---|---| | New concept | Write a spec from scratch | Derive your own premise | | Proven film type, new subject | Re-skin | Load the DNA, swap the skin, tick each condition | ## Extracting DNA Ask of every candidate line: **remove this — does the concept still exist?** - Still exists → it is skin, not DNA. Leave it out. - Stops existing → DNA. ### The removal test needs a second question "Does the concept still exist" is too weak on its own. A re-skin can satisfy every stated condition, stay internally coherent, and still lose the thing that made anyone want to watch. So ask both: 1. Remove this — does the concept still **hold together**? 2. Remove this — is the reason someone wanted to watch it **still there**? A condition that survives (1) but fails (2) is DNA that got misfiled as skin. This is the most expensive mistake in the whole method, because the resulting piece is defensible on paper and flat on screen — there is nothing to point at in review. The tell: you compensate. If a re-skin makes you add new devices to recover an effect the original got for free, you removed DNA. Constraints on the result: - **3–5 conditions.** More than five means skin has leaked in. - **Each is a condition, not a description.** `bright room` is a description; `the second medium must not be self-luminous, so the room has to be bright enough for it to read` is a condition — it explains what it protects. - **State what it protects.** A condition whose reason is unrecorded gets "optimised away" by the next person. DNA is not a style guide. It says nothing about palette, subject, or setting — those are exactly what re-skinning changes. ## Re-skinning 1. Load the DNA. 2. Swap the skin: subject, setting, palette, second medium, era. 3. **Tick each condition explicitly.** For each one, name how the new skin satisfies it. A condition you cannot tick means either the skin does not fit the film type, or you have found a real sixth condition. 4. Do not re-derive the premise. Adapt the DNA's own logic to the new skin. 5. Carry the granularity field over — it is DNA, not a per-piece choice. Failing to tick conditions is the usual cause of a re-skin that "looks right but feels wrong": every surface changed, and one invariant quietly broke. ## Granularity belongs to DNA Time granularity is a property of the film type, not a per-piece decision: - A performance or music-driven piece is second-level by nature — it is locked to an external track. - A mood piece is `none` by nature — timestamps fragment it. - Most narrative types are `stages`. Recording it in the DNA is what lets a re-skin skip the question. Ask on a from-scratch spec; inherit on a re-skin. ## Film types Each entry: DNA conditions, granularity, and what is skin. --- ### Live-action × luminous hand-drawn VFX A real-world scene into which a second, self-luminous, non-photoreal medium spreads. **DNA** 1. **Handheld POV, and the camera arrives late.** The drawing moves first; the camera then swings, tilts, or pushes after it. One continuous shot, walking through one space — no cuts. A stabilised or locked-off camera turns the piece from *chasing* something into *watching* something, and the immersion is the product. 2. **A live-action hand touches the drawing, and the drawing is born from that contact.** This is what establishes that both media occupy one physical space. Skip it and the drawn layer reads as a projection or a hologram composited on top. Under POV the hand is the camera operator's own, which also removes any need to explain who is drawing. 3. **The drawn medium shows its tool.** Crayon, chalk, coloured pencil, coarse brush: visible stroke direction, uneven fill, ragged edges, line weight trembling frame to frame. Glow is **weak** — enough to read as luminous, never enough to light the live-action space, which keeps its own real colour and texture. Smooth vector outlines and neon-tube looks break this. 4. **Drawn forms parasitise existing structures in the real space, and the host changes constantly.** Desk, wall, door, fridge; plinth, vitrine, label, fossil wall. Each transformation moves to a new host, so the camera keeps travelling. Write transformations as *collapsing into* the next form, never as one thing vanishing and another appearing. 5. **The last beats escalate from one small creature to the whole space.** The room itself becomes the drawing — a ceiling-spanning mouth, every picture frame turning into an eye. Without this the piece just stops. **Granularity**: `stages` — the chain gives natural stage boundaries and there is no external track. Note that stages here are **dense**: a 15s piece carries a dozen or more transformations, two or three per stage. **Skin**: the space (a lived-in room, an after-hours museum, a night park), what gets drawn, palette, which structures act as hosts, what the final escalation becomes. **Notes**: condition 3 needs the medium named by tool, not by abstraction — see the second worked failure below. Condition 5 is what a 15s version compresses and a 30s version can actually deliver. > **Worked failure 1 — trading away condition 3.** > An earlier re-skin replaced the luminous medium with an absorbing one (ink), > which forced the inverse lighting: a bright daylit room, so black could read as > black. Internally that is airtight. But weak glow on a bright ground has nothing > to read against, the camera also went locked-off (breaking condition 1), and the > piece came out elegant instead of surreal. No review note could name what was > missing — the concept still held together (removal test 1) while the reason to > watch was gone (removal test 2). > > The absorbing-medium version is a legitimate film type; it is simply a > *different* one, needing its own DNA. > **Worked failure 2 — a lock that was verifiable but measured the wrong thing.** > A later attempt locked the drawn layer as "graphically flat, never rendered as a > photoreal creature." That is a perfectly checkable instruction, and two > different models both satisfied it — by producing smooth neon-tube vector > outlines with even fill. Flat: yes. Hand-drawn: not at all, and neon tubes are > explicitly what this film type excludes. > > The fix was to stop naming an abstract property and name the tool instead: > crayon, chalk, coloured pencil, coarse brush, visible stroke direction, uneven > fill, ragged edges. **Verifiable is not sufficient — the lock has to measure the > property that makes the concept work.** See > [verifiability](verifiability.md#pick-the-property-that-carries-the-concept). --- ### Performance / music-driven A subject performing to an existing or implied track. **DNA** 1. **The audio track is the master clock.** Every visual beat is placed against it, never the reverse. 2. **Mouth and body sync are separate obligations.** Lip alignment and rhythmic body motion fail independently; lock them separately. 3. **The performance space stays coherent across cuts.** Same room, same light logic, or the cuts read as different shoots. 4. **One performer identity holds absolutely.** Any drift reads as a different person, which no amount of styling recovers. **Granularity**: `second-level` — non-negotiable; the external track *is* the hard constraint. **Skin**: genre, choreography, wardrobe, set, palette, camera energy. --- ### Action / VFX set-piece A physical event carrying the piece. **DNA** 1. **Physical causality is visible.** Impact, mass, and reaction are shown, not implied. Effects without visible cause read as decoration. 2. **Spatial continuity across the action.** Screen direction and relative positions hold; crossing the axis mid-action destroys legibility. 3. **The effect obeys one material logic.** Metal stays rigid, cloth stays cloth. Naming the material behaviour in the negatives is usually required. 4. **One escalation, one release.** Sustained maximum intensity flattens. **Granularity**: `stages` — unless a specific hit must land on a musical beat. **Skin**: subject, effect type, setting, palette, scale. **Notes**: heavy-VFX and large-scale segments generally do **better** with text-driven staging than with a storyboard grid — over-specification suppresses the camera priors that make these shots work. Verify per model; record it in the profile. --- ### Anime / stylised 2D **DNA** 1. **The render style holds absolutely** — no drift toward 3D or photoreal. Usually needs an explicit negative. 2. **Motion follows animation timing, not live-action timing.** Holds, snaps, and smears; not uniform interpolation. 3. **Line and shading logic stays consistent** across every cut. 4. **Stillness earns the motion.** Continuous movement reads as cheap animation. **Granularity**: `stages`. **Skin**: subject, genre, palette, era, setting. --- ## Adding a film type Only after a piece is **verified working** — DNA extracted from an unverified concept is a guess wearing a contract's clothing. Then: 1. Extract 3–5 conditions by the removal test. 2. State what each protects. 3. Record granularity. 4. Name what is skin. 5. Note per-model findings separately — those belong in [model-profile-schema](model-profile-schema.md), not here. DNA is model-independent; if a condition only holds on one model, it is a profile finding, not DNA. ## Related - [spec-format](spec-format.md) — the spec a DNA gets re-skinned into - [portability](portability.md) — model-dependent findings go in the profile -
film-type-dna.zh-CN.md 8.2 KB
# 片型 DNA 一个片型的 DNA 是**去掉哪几条这个概念就不再是它自己的 3–5 条最小条件**。它介于导演命题(一句话,每片一个)和完整 spec(全部内容,每片一份)之间:比命题具体,比提示词抽象。 DNA 存在的意义是让一条已跑通的片子可以**换皮**而不必重憋。两条入口,混着走等于白费功夫: | 入口 | 路线 | 做什么 | |---|---|---| | 新概念 | 从零写 spec | 自己憋导演命题 | | 已跑通的片型、换新题材 | 换皮 | 载入 DNA,换皮,逐条打勾 | ## 抽 DNA 对每个候选条件问:**去掉这条,这个概念还存在吗?** - 还存在 → 它是皮,不是 DNA,别写进去 - 不存在了 → 是 DNA ### removal test 需要问第二个问题 「概念还存在吗」单靠自己太弱。一次换皮可以满足所有写下来的条件、内部自洽,却把当初让人想看的东西丢掉。所以两个都要问: 1. 去掉这条,这个概念还**成立**吗? 2. 去掉这条,**当初让人想看它的那个理由**还在吗? 通过第 1 问但没通过第 2 问的条件,就是被误判成皮的 DNA。这是整套方法里代价最高的错误,因为做出来的片子在纸面上无可指摘、在屏幕上一片平淡——复盘时找不到可指的地方。 **判断信号:你开始补偿。** 如果换皮之后你需要新增手法去救原版本免费就有的效果,那你删掉的是 DNA。 ## 换皮 1. 载入 DNA 2. 换皮:主体、场景、配色、第二媒介、年代 3. **逐条明确打勾。** 对每一条说明新皮怎么满足它。打不上勾意味着要么这张皮不适合这个片型,要么你发现了真正的第六条 4. 不要重憋导演命题。把 DNA 自己的逻辑适配到新皮上 5. 粒度字段照抄——它属于 DNA,不是每片一选 不打勾是「看着都对但感觉不对」的常见成因:所有表面都换了,某个不变量悄悄破了。 ## 粒度属于 DNA 时序粒度是片型的属性,不是每片一决定: - 表演类/音乐驱动天生是秒级——它锁在一条外部音轨上 - 氛围片天生是「不写」——时间戳会把它切碎 - 大多数叙事片型是分段 把它记在 DNA 里,换皮时才能跳过这个问题。从零写 spec 时问,换皮时继承。 ## 片型 每个条目:DNA 条件、粒度、什么是皮。 --- ### 实拍 × 自发光手绘 VFX 一个真实场景,被一种自发光、非写实的第二媒介蔓延进来。 **DNA** 1. **第二媒介自发光,环境是暗的或背光的。** 超现实感来自这一对——不是来自「画」,而是来自「画本身就是光源」。它不能被一个同样自洽的反面替换掉。 2. **实拍的手触碰手绘物,手绘物从这个接触点诞生。** 这是确立「两种媒介同处一个物理空间」的东西。跳过它,手绘层就读成叠在上面的投影或全息。在 POV 下这只手就是拍摄者自己的手,顺带也消掉了「谁在画」这个问题。 3. **手绘媒介要看得见工具。** 蜡笔、粉笔、彩铅、粗笔刷:看得见排线方向、涂色不均、毛边、线宽逐帧微抖。**辉光要弱**——足以读成发光,绝不足以照亮实拍空间,实拍侧保持自己真实的颜色与质感。光滑的矢量描边和霓虹灯管感会破这条。 4. **手绘物寄生在真实空间已有的结构上,而且宿主不断更换。** 桌、墙、门、冰箱;展台、展柜、展牌、化石墙。每次变形换一个宿主,镜头因此一直在走。变形要写成**一边崩解一边变成下一个**,绝不写成一个消失、另一个出现。 5. **最后几拍从一个小生物升格为整个空间。** 房间本身变成那幅画——横跨天顶的一张嘴、每个画框都变成一只眼睛。没有这一步,片子只是停下来,不是收束。 **粒度**:分段——变形链天然给出段落边界,且无外部音轨。注意这里的段落是**密的**:15 秒装十几次变形,每段两三次。 **皮**:空间(有生活感的房间、闭馆后的博物馆、夜间公园)、画什么、配色、哪些结构当宿主、最后升格成什么。 **注意**:条件 3 要按**工具**命名媒介,不要按抽象属性命名——见下面第二个失败案例。条件 5 是 15 秒版要压缩、30 秒版才真正放得开的那一条。 > **失败案例 1 —— 把条件 3 换掉了。** > 一次早期换皮把自发光媒介换成了吸光媒介(水墨),于是被迫反转布光:明亮的白天书房,好让黑读得出来。内部逻辑无懈可击。但弱辉光在亮底上没有东西可读,镜头同时也变成了固定机位(破了条件 1),成片出来是雅致而不是超现实。复盘时没人能说出缺了什么——概念还成立(第 1 问过了),想看它的理由没了(第 2 问没过)。 > > 吸光媒介那一版是个合法的片型,只是**另一个**片型,需要它自己的 DNA。 > **失败案例 2 —— 一条可验证、但测错了维度的锁。** > 后来一次尝试把手绘层锁成「保持平面图形,绝不渲染成写实生物」。这是一条完全可检查的指令,而且**两个不同的模型都严格满足了它**——给出的是光滑的霓虹管矢量描边加均匀填充。平面?是的。手绘?完全不是,而霓虹管恰恰是这个片型明确排除的东西。 > > 修法是停止命名抽象属性、改成命名工具:蜡笔、粉笔、彩铅、粗笔刷,看得见排线方向、涂色不均、毛边。**可验证不是充分条件——锁必须测那条真正让概念成立的属性。** 见 [verifiability.zh-CN.md](verifiability.zh-CN.md)。 --- ### 表演 / 音乐驱动 一个主体对着一条已有或隐含的音轨表演。 **DNA** 1. **音轨是主时钟。** 每个视觉拍点都对着它放,绝不反过来 2. **口型与身体同步是两件独立的义务。** 唇形对齐和身体律动会各自失败,要分别锁 3. **表演空间跨切点保持一致。** 同一个房间、同一套光逻辑,否则切点读成两次拍摄 4. **表演者身份绝对不漂。** 任何漂移都读成换了个人,靠造型救不回来 **粒度**:秒级——不可协商,外部音轨**就是**那条硬约束。 **皮**:曲风、编舞、服装、置景、配色、镜头能量。 --- ### 动作 / VFX 大场面 一个物理事件承载整条片子。 **DNA** 1. **物理因果看得见。** 冲击、质量、反作用要演出来而不是暗示。没有可见成因的特效读成装饰 2. **动作全程空间连续。** 屏幕方向与相对位置保持住;动作中途越轴会摧毁可读性 3. **特效服从单一材料逻辑。** 金属保持刚性、布保持布性。通常需要在负向里点明材料行为 4. **一次升级、一次释放。** 全程顶格的强度会变平 **粒度**:分段——除非某个具体的击中必须落在音乐拍点上。 **皮**:主体、特效类型、场景、配色、尺度。 **注意**:重特效与大场面段落通常**更适合文字驱动的 staging,而不是喂故事板网格**——过度指定会压掉让这类镜头成立的运镜先验。逐模型验证,结论记进档案。 --- ### 动画 / 风格化 2D **DNA** 1. **渲染风格绝对不漂**——不许滑向 3D 或写实。通常需要一条显式负向 2. **运动遵循动画节奏,不是实拍节奏。** 有停顿、有速度突变、有拖影;不是均匀插值 3. **线条与上色逻辑跨每个切点保持一致** 4. **静才换来动。** 持续运动读成廉价动画 **粒度**:分段。 **皮**:主体、类型、配色、年代、场景。 --- ## 添加新片型 只在一条片子**已验证跑通之后**——从未验证的概念里抽出来的 DNA,是一个穿着契约外衣的猜测。然后: 1. 用 removal test(两问)抽出 3–5 条 2. 写明每条保护的是什么 3. 记录粒度 4. 点明什么是皮 5. 逐模型的发现另记——那属于 [model-profile-schema.zh-CN.md](model-profile-schema.zh-CN.md),不属于这里。DNA 与模型无关;一条只在某个模型上成立的条件,是档案发现,不是 DNA ## 关联 - [spec-format.zh-CN.md](spec-format.zh-CN.md) — DNA 换皮之后落进的那份 spec - [portability.zh-CN.md](portability.zh-CN.md) — 模型相关的发现放进档案 -
model-profile-schema.md 6.7 KB
# Model profile schema A profile is what makes this skill adjust to a model instead of merely describing one. This file defines the **fields**; each model gets its own filled instance. Two rules govern every entry: 1. **Record the measurement, not the impression.** `timing drifts` is unusable; `requested beats land ~2s late across a 15s piece` compiles into a decision. 2. **Unknown is a valid value.** An empty field prompts a probe. A guessed field silently corrupts every compile and every comparison built on it. ## Template ```markdown # Model profile: <provider>/<model> Last verified: <date> · Verified by: <who> · Provider: <what you called> ## Capability layer | Field | Value | How verified | |---|---|---| | Reference addressing syntax | | | | Max references (image / video / audio) | | | | Multi-shot in one generation | yes / no / partial | | | Hard cut support | yes / no | | | Duration range | | | | Resolution options | | | | Native audio | native / reference / none | | | Timing adherence | | | | Recommended granularity | none / stages / second-level | | | First frame / first-and-last frame | | | | Extension or chaining | | | | Video editing | | | ## Bias layer | Field | Value | How verified | |---|---|---| | Default aesthetic bias | | | | Effective anti-default phrasing | | | | Ineffective or overshooting phrasing | | | | Negative-lock behaviour | | | | Transition vocabulary recognised | | | | Language sensitivity | | | ## Known failure modes - <what breaks, under what conditions, and the workaround if there is one> ## Compile notes - <anything the compiler must do for this model specifically> ``` ## Field definitions ### Capability layer **Reference addressing syntax** — the exact token that binds a reference. The one thing that must be translated rather than described. Record the literal form. **Max references** — per type, and the combined ceiling if one exists. Note the *stable* range separately from the documented maximum when the provider publishes both; stability usually degrades before the hard limit. **Multi-shot in one generation** — can one request produce ordered shots with cuts? `partial` means it works but unreliably; say what makes it fail. **Hard cut support** — separate from multi-shot. Some models produce multiple shots but always bridge them with movement. **Duration range** — and whether duration is set by parameter or inferred from inputs. Note any task type that locks it. **Native audio** — `native` generates sound, `reference` only accepts audio input, `none` means audio lines should be stripped at compile time. **Timing adherence** — the measurement, with the piece length it was measured on. Direction matters: consistently late is correctable by writing earlier; inconsistent is not correctable at all. **Recommended granularity** — the conclusion drawn from timing adherence. This is the field the compiler reads. **First frame / first-and-last frame** — supported, and whether it locks aspect ratio or duration. **Extension or chaining** — supported, the ceiling, and whether it nests. **Video editing** — supported, scope granularity, what it locks. ### Bias layer **Default aesthetic bias** — where the model lands with no styling instruction. Be concrete: `smoothed beauty-filter faces`, `CG-looking surfaces`, `over-saturated grade`. This is what anti-default phrasing has to fight. **Effective anti-default phrasing** — what measurably shifted the output on *this* model. **Ineffective or overshooting phrasing** — equally valuable, and the field people skip. A phrase that overshoots is worse than one that does nothing, and this is where you record that a technique imported from another model backfired. **Negative-lock behaviour** — do negatives get respected? Which kinds fail? **Transition vocabulary recognised** — which named transitions land unqualified. Everything else needs term-plus-description. **Language sensitivity** — does prompt language change results? Which language is strongest? Note if a term only works in one language. ## Filled example: `bytedance/seedance-2.0` ```markdown # Model profile: bytedance/seedance-2.0 Last verified: 2026-08-03 · Provider: Atlas Cloud ## Capability layer | Field | Value | How verified | |---|---|---| | Reference addressing syntax | `@image1`, `@image2`, … | Generation | | Max references (image / video / audio) | 9 images | Provider docs | | Multi-shot in one generation | yes — ordered segments with cuts | 15s multi-segment generation | | Hard cut support | yes | Same | | Duration range | 4–15s | Provider docs | | Native audio | native | Generation with audio enabled | | Timing adherence | Requested beats land ~2s late across a 15s piece; segment *order* holds | Controlled 15s run against a timestamped prompt | | Recommended granularity | stages | Derived from the row above | | Extension or chaining | via tail-frame chaining | — | ## Bias layer | Field | Value | How verified | |---|---|---| | Default aesthetic bias | Strong cinematic priors; interprets sparse prompts well | A/B against an over-specified variant | | Effective anti-default phrasing | Explicit flatness lock when a 2D medium must stay graphic | Iteration on a hand-drawn VFX piece | | Ineffective or overshooting phrasing | Storyboard-grid over-specification — suppresses good camera priors and scores *worse* than a text-only version | A/B on the same segment | | Negative-lock behaviour | Respected; front-load them | Iteration | ## Known failure modes - Small UI text and signage render with character-level errors. Use post-production for anything that must read exactly. - Enumerated menu items get partially dropped; only some list entries render. - Explicit camera-move instructions are sometimes ignored while the rest of the segment lands. Re-state the move as the segment's primary intent if it matters. ## Compile notes - Emit `@imageN`. Do not emit bracketed or spelled-out reference labels. - Default to `stages`; when second-level is genuinely required, write beats ~2s early and verify. - Prefer text-driven staging over feeding a storyboard grid. ``` ## Where profiles come from Profiles are the output of comparison work, not a prerequisite for it. Running the same spec across models **is** how these fields get filled — which means a comparison matrix is a data-collection exercise whose deliverable is the filled table, not only the videos. The highest-information single test: run one spec at `stages` and at `second-level`, measure the drift, and fill three fields at once — timing adherence, recommended granularity, and usually one failure mode. ## Related - [portability](portability.md) — how the compiler consumes these fields - [checklist](checklist.md) — pre-submission review -
model-profile-schema.zh-CN.md 7.4 KB
# 模型档案字段定义 档案是让这个 skill **随模型调整**而不只是描述模型的东西。本文件定义**字段**;每个模型有自己填好的一份实例。 两条规则贯穿每一项: 1. **记测量值,不记印象。** 「时序有漂移」没法用;「15 秒的片子里请求的拍点整体晚约 2 秒」可以编译成决策 2. **「未知」是合法值。** 空字段会触发一次探测;猜出来的字段会静默污染每一次编译和每一份基于它的对比 ## 模板 ```markdown # 模型档案:<厂商>/<模型> 最后核实:<日期> · 核实人:<谁> · 服务:<你调的是哪个> ## 能力位层 | 字段 | 值 | 如何核实 | |---|---|---| | 素材寻址语法 | | | | 素材数量上限(图 / 视频 / 音频) | | | | 一次生成能否多镜头 | 能 / 不能 / 部分 | | | 是否支持硬切 | 能 / 不能 | | | 时长范围 | | | | 分辨率选项 | | | | 原生音频 | 原生 / 仅参考 / 无 | | | 时序遵循度 | | | | 建议粒度 | 不写 / 分段 / 秒级 | | | 首帧 / 首尾帧 | | | | 延长或接龙 | | | | 视频编辑 | | | | prompt 长度耐受性 | | | ## 偏置层 | 字段 | 值 | 如何核实 | |---|---|---| | 默认审美偏置 | | | | 有效的反默认写法 | | | | 无效或过冲的写法 | | | | 负向锁行为 | | | | 可识别的转场词汇 | | | | 语言敏感性 | | | ## 已知失败模式 - <什么会坏、在什么条件下坏、有没有绕法> ## 编译注记 - <针对这个模型必须做的特殊处理> ``` ## 字段说明 ### 能力位层 **素材寻址语法** —— 绑定素材的那个确切 token。唯一必须翻译而不能用描述替代的东西。**照字面记。** **素材数量上限** —— 分类型记,如果有总上限也记。厂商同时给出「稳定范围」和「文档上限」时分开记——稳定性通常在硬上限之前就开始下降。 **一次生成能否多镜头** —— 一次请求能否产出带切点的有序镜头?`部分` 意味着能用但不稳,要写清什么条件下会失败。 **是否支持硬切** —— 与多镜头分开。有些模型能出多个镜头,但总是用运动把它们连起来。 **时长范围** —— 以及时长是靠参数设定还是从输入推断。哪些任务类型会锁死它,也要记。 **原生音频** —— `原生` 会生成声音,`仅参考` 只接受音频输入,`无` 表示编译时应删掉音频行。 **时序遵循度** —— 记测量值,并附上测量时的片长。**方向很重要**:稳定偏晚可以靠提前写来补偿;不稳定则根本没法补偿。 **建议粒度** —— 从时序遵循度推出的结论。这是编译器实际读的那个字段。 **prompt 长度耐受性** —— 提示词变长时,这个模型会牺牲什么。实测存在极大的模型间差异:有的模型加长后开头整段丢失且质感锁被稀释,另一个模型在同样两份提示词上全部保住。 ### 偏置层 **默认审美偏置** —— 不给任何风格指令时它落在哪。要具体:`磨皮美颜脸`、`CG 感表面`、`过饱和的调色`。这就是反默认写法要打的东西。 **有效的反默认写法** —— 在**这个**模型上实测让输出移动了的写法。 **无效或过冲的写法** —— 同样有价值,而且是最常被跳过的字段。过冲的写法比毫无作用的写法更糟,而这里正是记录「从别的模型搬来的技巧反而起了反作用」的地方。 **负向锁行为** —— 负向会被尊重吗?哪一类会失效? **可识别的转场词汇** —— 哪些具名转场不加限定就能落地。其余的都需要术语 + 描述双写。 **语言敏感性** —— 提示词语言会改变结果吗?哪种语言最强?某个术语只在一种语言里生效,也记下来。 ## 填好的示例:`bytedance/seedance-2.0` ```markdown # 模型档案:bytedance/seedance-2.0 最后核实:2026-08-03 · 服务:Atlas Cloud ## 能力位层 | 字段 | 值 | 如何核实 | |---|---|---| | 素材寻址语法 | `@image1`、`@image2`… | 生成实测 | | 素材数量上限 | 9 张图 | 厂商文档 | | 一次生成能否多镜头 | 能——带切点的有序段落 | 15 秒多段生成 | | 时长范围 | 4–15s | 厂商文档 | | 原生音频 | 有 | 开启音频的生成 | | 时序遵循度 | 15 秒的片子里请求拍点**整体晚约 2 秒**;段落**顺序稳** | 对着带时间戳的提示词做的受控 15 秒实测 | | 建议粒度 | **分段** | 由上一行推出 | | prompt 长度耐受性 | **高。** 加长版本保住了手、开场变形、手绘质感,还吃下了新增拍点 | 同一份 spec 的 v3 | ## 偏置层 | 字段 | 值 | 如何核实 | |---|---|---| | 默认审美偏置 | 镜头先验很强;稀疏提示词理解得好,会合理即兴 | 与过度指定版本做 A/B | | 有效的反默认写法 | **按工具命名,不要命名抽象属性。** `蜡笔/彩铅/粗笔刷,看得见排线方向、涂色不均、毛边` 给出了真正的手绘笔触 | 同一份手绘 VFX spec 的受控 A/B | | 无效或过冲的写法 | **`保持平面图形、绝不写实` —— 被精确满足、且毫无用处。** 模型用光滑的霓虹管矢量描边加均匀填充满足了它:平面,但完全不手绘。在同一份 spec 上只把这一条锁换成工具名,结果直接反转 | 同上 | | 无效或过冲的写法 | **喂故事板网格过度指定,比纯文字 staging 更差** —— 会压掉让重特效镜头成立的运镜先验 | 同一段落的 A/B | | 负向锁行为 | 会被尊重。前置 | 迭代 | | 参考图与文字的优先级 | **图赢。** 构图参考会覆盖写出来的构图 | 迭代 | ## 已知失败模式 | 症状 | 细节 | 处理 | |---|---|---| | 小字出错 | UI 标签与招牌出现字符级错误,小字乱码 | 需要完全准确的文字走后期 | | 列表项漏画 | 枚举的菜单项只画出一部分 | 减少条目数,或文字走后期 | | 运镜被忽略 | 写明的运镜被跳过,段落其余部分正常 | 把运镜改写成该段的主要意图,或接受并重新构图 | | 时间轴漂移 | 整条时间轴后移,15 秒里约 2 秒 | 用分段;若必须秒级,把拍点写早并核实 | | **超载时丢段** | 15 秒装**四段**时只渲染了第 1 段和第 4 段——中间两段**整个跳过**,不是延迟。改成五段更短、每段事件更密之后**没有**复现 | 把 15 秒里约 4 个不同状态变化当作上限。需要更多就缩短每段、提高密度,或拆成多次请求 | ## 编译注记 - 输出 `@imageN`。绝不用方括号或拼写形式的素材标签 - 默认 `分段` - 重特效与大场面段落优先文字驱动 staging,不要喂故事板网格 - 构图参考与写出来的构图冲突时,删掉写的那份——它反正会输,只是增加噪音 ``` ## 档案从哪来 档案是对比工作的**产出**,不是它的前提。把同一份 spec 跑过多个模型**就是**这些字段被填满的方式——也就是说,一个对比矩阵是一次数据采集,它的交付物是那张填好的表,不只是那些视频。 信息量最高的单次测试:同一份 spec 分别用 `分段` 和 `秒级` 各跑一遍,量偏差,一次填满三个字段——时序遵循度、建议粒度,通常还附带一个失败模式。 ## 关联 - [portability.zh-CN.md](portability.zh-CN.md) — 编译器怎么消费这些字段 - [checklist.zh-CN.md](checklist.zh-CN.md) — 提交前检查 -
portability.md 6.5 KB
# Portability A spec is portable. Not every line in it is. Sort each line into one of three layers, because each needs different handling — and only one of them can be written once and trusted everywhere. | Layer | What it is | Handling | Where it lives | |---|---|---|---| | **Language** | Structure and observable description | Portable as written | The spec | | **Bias** | What counteracts a model's defaults | Measured per model | The model profile | | **Capability** | What the interface can physically accept | Probe, then degrade | The model profile | The most common cross-model mistake is treating a bias-layer line as a language-layer line — copying an anti-AI-look suffix that worked on one model into a prompt for another, and assuming it still helps. ## Language layer — portable - Bucket structure and scope discipline - End states, in all three forms - Observable emotional cues - Term-plus-description double writing - Reference roles stated as *controls X, do not use Y* - Event-triggered progression These depend on the model reading language, nothing more. Write once. ## Bias layer — measured, never assumed Every generative model has defaults it returns to. Bias-layer text exists to counteract *that model's* defaults, which means it does not transfer: | Line | Why it is bias-layer | |---|---| | `retain real fine pores and skin texture` | Counteracts a smoothing/beauty default. On a model that already renders coarse skin it overshoots and the face looks dirty | | `no subtitles, no BGM` | Only needed where unrequested subtitles and music actually appear | | Specific transition vocabulary | Recognition varies; some terms are culturally scoped | | `@image1` vs `Reference Image 1` | Interface addressing syntax | | Negative lists generally | The failure modes differ per model | Two of these deserve special handling. ### Anti-default suffixes: overshoot is a real failure Do not port an anti-default phrase without checking the target's baseline. The test is cheap: generate once with the phrase and once without, on the same spec. If the version *without* it is already at or past the target, the phrase is counterproductive on this model. Record both results in the profile — the "ineffective or overshooting" field exists for this. ### Addressing syntax: the one thing that must be translated This is the only common case where description cannot substitute. If the model expects a particular token to bind a reference, that token has to be emitted correctly or the binding is lost. Keep the mapping in the profile and translate at compile time; leave the surrounding sentence structure alone. ## Capability layer — probe, then degrade These are not misunderstandings; they are hard limits on what the interface takes. | Capability | Why it matters | |---|---| | Reference addressing and count | Determines how much of a multi-reference spec survives | | Multi-shot in one generation | Determines whether cuts belong in the prompt or the edit | | Hard cut support | Same | | Duration ceiling | Determines stage count per request | | Timing adherence | Determines whether second-level granularity is honest | | Audio: native, reference, or none | Determines whether audio lines belong in the prompt at all | ### Probing No profile means no assumptions. Run the smallest test that settles the question, then record it. Order probes cheapest-first and stop as soon as the spec is satisfiable: 1. **Read what is published** — reference limits, durations, resolutions. Verify against the live model page rather than a doc example; treat a 200 response as inconclusive until the page content confirms the model exists. ⚠️ **A published enumeration is a hypothesis, not a limit.** Documented ranges are frequently narrower than what submission accepts, and pages contradict themselves — the same page has been observed stating three different duration ranges in three places. **Submit the value you actually want and let the API answer.** A rejected submission creates no task and costs nothing, so testing beats designing around the table. This error is asymmetric: believing a too-narrow table silently degrades the spec, the run then succeeds, and nothing in the output reveals that a better configuration was available. Nobody notices. 2. **One minimal generation** for anything behaviour-dependent — timing adherence and multi-shot cannot be read off a spec sheet. 3. **Record immediately**, including failures. An unrecorded probe gets re-run by the next person at full cost. For timing adherence specifically, the probe that pays: run the same spec at `stages` and at `second-level`, then measure the drift between requested and delivered beats. That single comparison decides the model's default granularity. ### Degrading | Missing capability | Degrade to | |---|---| | Multi-reference addressing | One reference for identity; carry everything else in text | | Multi-shot in one generation | One shot per request; assemble the cuts in the edit | | Reference count below spec | Merge roles by priority: identity > key prop > scene > style | | Duration below spec | Split into stages that each stand alone, then chain via boundary frames | | Weak timing adherence | Drop to stages plus end states | | No native audio | Remove audio lines from the prompt; plan a post-production pass | | Single-image I2V only | Keep the start frame as the sole visual lock; the rest becomes text | **Always report a degrade.** A silently degraded spec looks like a spec that ran as written, which makes the output impossible to interpret and quietly corrupts any comparison built on it. ## Comparing models fairly If the point is to compare rather than to ship, degrading defeats the purpose — you end up comparing two different specs. For a controlled comparison: - Hold the spec at the **intersection** of both models' capabilities. Do not use a 30-reference spec to compare a 30-reference model against a 9-reference one. - Translate only the addressing syntax. Leave every other word identical. - Keep bias-layer lines **out** of a comparison, or run them as a separate variable. An anti-default suffix tuned for model A is a handicap for model B. - Record what you had to hold back. A comparison whose constraints are unstated reads as a general verdict when it is a narrow one. ## Related - [model-profile-schema](model-profile-schema.md) — the fields to record - [verifiability](verifiability.md) — the language-layer patterns in full - [spec-format](spec-format.md) — where each layer's content sits in a spec -
portability.zh-CN.md 5.6 KB
# 可移植性 spec 可移植,它内部的行不都可移植。把每一行归到三层里,因为每层需要不同的处理——而且只有一层能写一次、到处放心用。 | 层 | 是什么 | 处理 | 存放在 | |---|---|---|---| | **语言层** | 结构与可观察描述 | 照写即可 | spec 里 | | **偏置层** | 用来反掉某个模型默认倾向的词 | 逐模型实测 | 模型档案里 | | **能力位层** | 接口物理上能接受什么 | 先探测,再降级 | 模型档案里 | 跨模型最常见的错误是**把偏置层的行当成语言层的行**——把在某个模型上有效的反默认后缀,照抄给另一个模型并假设它照样有用。 ## 语言层——可移植 - 三桶结构与作用域纪律 - 末态,三种形态都算 - 可观察的情绪线索 - 术语 + 描述双写 - 参考素材角色写成「控 X,不许拿 Y」 - 事件触发的推进 这些只依赖模型读得懂语言,别无所求。写一次即可。 ## 偏置层——实测,绝不假设 每个生成模型都有它会回归的默认值。偏置层的文字存在的意义就是反掉**那个模型的**默认值,所以它不迁移: | 写法 | 为什么属于偏置层 | |---|---| | `保留真实的微毛孔和皮肤纹理` | 反的是磨皮/美颜默认值。在本来就渲染粗糙皮肤的模型上会**过冲**,脸会脏 | | `不要字幕、不要 BGM` | 只在真的会冒出多余字幕和音乐的地方才需要 | | 具体的转场词汇 | 识别度不一,有些词有文化范围 | | `@image1` 与 `参考图 1` | 接口寻址语法 | | 负向清单整体 | 各模型的翻车模式不同 | 其中两类需要特别处理。 ### 反默认后缀:过冲是真实的失败 不要在没确认目标模型基线的情况下照搬反默认短语。测试很便宜:同一份 spec,带这句跑一次、不带跑一次。如果**不带**的那版已经达到或超过目标,这句话在这个模型上是反作用的。**两个结果都记进档案**——「无效或过冲」这个字段就是为此存在的。 ### 寻址语法:唯一必须翻译的东西 这是描述无法替代的常见情形。模型期待某个特定 token 来绑定素材时,那个 token 必须正确输出,否则绑定丢失。把映射存在档案里,编译时翻译,**周围的句子结构不要动**。 ## 能力位层——先探测,再降级 这些不是理解偏差,是接口能接受什么的硬限制。 | 能力 | 为什么重要 | |---|---| | 素材寻址与数量 | 决定多素材 spec 能保住多少 | | 一次生成能否多镜头 | 决定切点写在提示词里还是剪辑台上 | | 是否支持硬切 | 同上 | | 时长上限 | 决定每次请求装几段 | | 时序遵循度 | 决定秒级粒度是否诚实 | | 音频:原生/参考/无 | 决定音频行该不该出现在提示词里 | ### 探测 没有档案就不做假设。跑能解决问题的最小测试,然后记录。按成本从低到高,spec 一旦可满足就停: 1. **读已发布的规格** —— 素材上限、时长、分辨率。以实际模型页为准而不是文档样例;状态码 200 不算确认,要看页面内容确认模型真的存在。 ⚠️ **已发布的枚举值是假设,不是限制。** 文档写的范围经常比实际能提交的更窄,而且页面自己会打架——实测见过同一页三处写了三个不同的时长范围。**直接提交你真正想要的值,让 API 来回答。** 被拒不创建任务、不花钱,所以试一次严格优于照表设计。 这个错误是不对称的:信了过窄的文档 → spec 被静默降级 → 运行成功 → 输出里没有任何迹象表明本来能有更好的配置。没人会注意到。 2. **一次最小生成** —— 凡是依赖行为的项都靠它:时序遵循度和多镜头能力读不出来,只能跑出来。 3. **立刻记录,包括失败。** 没记录的探测会被下一个人按全价重跑一遍。 时序遵循度最值的一次探测:同一份 spec 分别用 `分段` 和 `秒级` 各跑一遍,量请求拍点与实际拍点的偏差。这一次对照就能定下该模型的默认粒度。 ### 降级 | 缺什么能力 | 降级成 | |---|---| | 多素材寻址 | 一张图锁身份,其余全部走文字 | | 一次多镜头 | 一镜一次请求,切点在剪辑台上完成 | | 素材数量不够 | 按优先级合并角色:身份 > 关键道具 > 场景 > 风格 | | 时长不够 | 拆成各自成立的段落,再用边界帧接龙 | | 时序遵循度差 | 降到分段 + 末态 | | 无原生音频 | 删掉音频行,另做后期 | | 只支持单图 I2V | 首帧作为唯一视觉锁,其余走文字 | **降级必须报告。** 静默降级的 spec 看起来跟按原样跑完的一样,导致输出无法解释,也会悄悄污染任何建立在它之上的对比。 ## 公平对比 如果目的是对比而不是交付,降级会毁掉对比本身——你比的会是两份不同的 spec。受控对比要做到: - spec 落在两个模型能力的**交集**上。不要用 30 素材的 spec 去比一个 30 素材模型和一个 9 素材模型 - **只翻译寻址语法**,其余每个字保持一致 - 偏置层的行**排除在对比之外**,或者作为独立变量单独跑。为 A 模型调过的反默认后缀,对 B 模型就是让分 - 记录你为此收着没写的东西。约束未说明的对比,读起来像普适结论,实际只是个窄结论 ## 关联 - [model-profile-schema.zh-CN.md](model-profile-schema.zh-CN.md) — 该记哪些字段 - [verifiability.zh-CN.md](verifiability.zh-CN.md) — 语言层的完整写法 - [spec-format.zh-CN.md](spec-format.zh-CN.md) — 各层内容在 spec 里的位置 -
spec-format.md 5.9 KB
# Spec format A spec records the decisions a prompt encodes, kept separate from the dialect that expresses them. Write the spec first, compile second. The same spec should survive a change of model without being rewritten. ## The template ```text [1 GLOBAL] film type: what kind of piece this is scene: where and when style: visual treatment, palette, light behaviour premise: ONE sentence — the single idea the piece exists to deliver camera principle: the governing rule, not a shot list [2 LOCKS] identity: who or what must stay the same, and by what invariants reference roles: per input — what it controls AND what not to take from it audio source: native, supplied track, or silent supporting cast: positions and what they may not do continuity: what must hold across the whole piece negatives: specific risks only [3 TIME] granularity: none | stages | second-level (decide before writing below) stage 1..n: one primary change each end state per stage: what is visibly true when the stage ends ``` Drop any field that does not apply. An empty field is better than a padded one — every line you add competes for the model's attention. ## Field notes ### Premise (bucket 1) One sentence. If it takes two, the piece is two pieces. The premise is what you would keep if you could keep only one line — it is also the tie-breaker when locks conflict. A weak premise reads like a genre label (`a cinematic product video`). A working premise names the specific idea (`ink refuses to glow, so the room must be bright enough for black to read as black`). ### Reference roles (bucket 2) Always two halves. What the input controls, and what must not leak from it: ```text Image 1 controls the potter's face, hairstyle, and green apron. Do not use its background. Video 1 controls the pacing of the throwing motion. Do not use the person's identity, clothing, or setting. ``` Name every subject and bind it individually. Never write "Images 1–4 define four characters respectively" — that states no mapping at all. When several images show one object from different angles, say so explicitly and state the output count: `All four images define one lamp. Exactly one lamp appears throughout.` ### Negatives (bucket 2) Specific risks, not a standing blocklist. A negative earns its place when it names something this piece is actually likely to produce and would be expensive to redo. Inheriting someone else's negative list is how prompts get long without getting better. Negatives are also model-dependent — see [portability](portability.md). ### End states (bucket 3) The single highest-leverage field in the whole spec. See [verifiability](verifiability.md). ## Two writing conventions These govern where text sits, not what it says. **Restate the few most expensive locks at the physical end.** Recency helps. This is not a fourth bucket — the content still belongs to buckets 1 and 2, and appears there first. Restate two or three items, not the whole list. **Order the output explicitly** when a model writes the spec for you. Without a stated order the buckets bleed: global rules end up inside beat 3, locks get restated as events. Name the sections and their sequence in the instruction. ## Worked fill (abbreviated) ```text [1 GLOBAL] film type: live-action × hand-drawn VFX, 15s scene: bright study, daytime, window light from the left style: real footage plus a second medium that spreads across surfaces premise: ink does not glow, it absorbs — so the room must be bright enough for black to read as black camera principle: locked-off wide, one slow push-in at the final transformation [2 LOCKS] identity: one pair of hands only; no face enters frame reference roles: Image 1 controls the ink-painting palette and brush texture. Do not use its composition or subject placement. audio source: native — paper friction, brush contact, room tone continuity: the second medium stays flat and graphic; it never becomes a photoreal creature negatives: no wall drips, no blood-like runs, no scale conflict between painted mountains and painted figures [3 TIME] granularity: stages (multi-event, no external hard beat) stage 1: brush tip touches paper, a dot spreads end state: one wet black dot on otherwise blank paper stage 2: the dot becomes lines, lines become a fish end state: an orange-red fish occupies the paper's centre, still flat and graphic stage 3: painted forms spread past the paper onto the wall end state: the wall carries a continuous green-blue landscape; a vermilion seal sits in the lower right ``` Note what is absent: no shot durations, no camera vocabulary per stage, no adjective stacking. The premise carries the look; the end states carry the structure. ## Common failures | Symptom | Cause | Fix | |---|---|---| | Style holds early, drifts late | Global rule written inside stage 1 | Move it to bucket 1 | | Model invents pauses | Second-level granularity on a continuous action | Drop to stages or none | | Reference bleeds background | Role stated one-sided | Add the "do not use" half | | Two subjects merge or swap | Bound as a group, not individually | One binding line per subject | | Long prompt, weak result | Adjective stacking substituting for a premise | Write the one sentence | | Piece ends unresolved | No end state on the final stage | State the closing visible state | ## Related - [verifiability](verifiability.md) — how to write each field so it can be checked - [portability](portability.md) — which fields survive a model change - [film-type-dna](film-type-dna.md) — reuse a proven spec instead of writing one -
spec-format.zh-CN.md 5.2 KB
# spec 格式 spec 记录的是一条提示词背后的决策,与表达这些决策的方言分开存放。先写 spec,再编译。同一份 spec 换模型时不应该需要重写。 ## 模板 ```text [① 全局] 片型: 这是哪一类片子 场景: 在哪里、什么时候 风格: 视觉处理、配色、光的行为 导演命题: 一句话——这条片子存在的那个念头 运镜原则: 管住全片的规则,不是镜头清单 [② 锁] 身份: 谁或什么必须保持不变,靠哪些不变量 参考角色: 每份素材——控什么,以及不许从它拿什么 音频源: 原生、外部音轨、还是静音 配角调度: 位置,以及不许做什么 连续性: 整条片子必须成立的东西 负向: 只写具体风险 [③ 时序] 粒度: 不写 | 分段 | 秒级 (写下面的内容之前先定) 第 1..n 段:每段一个主要变化 每段末态: 这一段结束时什么是可见的 ``` 用不到的字段直接不写。**空着比凑字数好**——每多一行都在跟别的行抢注意力。 ## 字段说明 ### 导演命题(桶①) 一句话。要写两句说明这是两条片子。命题是「只能留一行时你会留的那行」,也是锁与锁冲突时的裁决依据。 弱的命题读起来像类型标签(`一条电影感的产品片`)。有效的命题点出那个具体的念头(`墨不发光、它靠吸,所以房间必须亮到能让黑读出来`)。 ### 参考素材角色(桶②) 永远两半。控什么,以及不许从它漏什么: ```text @image1 控陶艺师的脸、发型和绿色围裙。不要用它的背景。 @video1 控拉坯动作的节奏。不要用视频里人的身份、衣服或场景。 ``` **每个主体单独命名、单独绑定。** 绝不要写「@image1 到 @image4 分别定义四个角色」——那等于什么映射都没说。 几张图拍同一个物体的不同角度时,要明说,并写明输出数量:`四张图定义的是同一盏灯。全片只出现一盏灯。` ### 负向(桶②) 写具体风险,不是常备黑名单。一条负向值得留,当它命名的是**这条片子真的可能产出、而且重做很贵**的东西。抄别人的负向清单,是提示词变长却没变好的主要原因。 负向也是模型相关的,见 [portability.zh-CN.md](portability.zh-CN.md)。 ### 末态(桶③) 整份 spec 里杠杆最大的字段。见 [verifiability.zh-CN.md](verifiability.zh-CN.md)。 ## 两条书写约定 这两条管的是文字放在哪,不是写什么。 **把两三条最贵的锁在物理结尾复述一次。** 近因效应有用。这不是第四个桶——内容仍属桶①②,并且先在那里出现过。复述两三条,不是整张清单。 **当由模型替你写 spec 时,明写输出顺序。** 不指定顺序,桶与桶会串味:全局规则跑进第 3 拍,锁被当成事件重述。把段落名称和顺序写进指令里。 ## 填写示例(节选) ```text [① 全局] 片型: 实拍 × 手绘 VFX,15s 场景: 明亮的书房,白天,窗光从左侧进来 风格: 实拍画面加一种在表面蔓延的第二媒介 导演命题: 墨不发光、它靠吸,所以房间必须亮到能让黑读出来 运镜原则: 固定机位,仅在最后一次异变处缓推一次 [② 锁] 身份: 只有一双手;脸不入画 参考角色: @image1 控彩墨的配色与笔触质感。不要用它的构图或主体位置。 音频源: 原生——纸的摩擦、笔尖接触、房间声 连续性: 第二媒介始终保持平面与图形化,绝不变成写实生物 负向: 不许墙上流挂、不许像血迹、画中山与画中人不许尺度冲突 [③ 时序] 粒度: 分段(多事件、无外部硬拍点) 第 1 段: 笔尖触纸,一个点散开 末态:空白纸面上一个湿的黑点 第 2 段: 点变成线,线变成鱼 末态:一条橙红的鱼占据纸面中央,仍然平面、仍然图形化 第 3 段: 画出来的形体越过纸面蔓延到墙上 末态:整面墙是连续的青绿山水;右下角一枚朱红印章 ``` 注意里面**没有**什么:没有每镜时长、没有逐段的运镜词汇、没有形容词堆。命题承载观感,末态承载结构。 ## 常见失败 | 症状 | 成因 | 修法 | |---|---|---| | 风格前面守住、后面漂了 | 全局规则被写进了第 1 段里 | 移到桶① | | 模型造出多余的停顿 | 对连续动作用了秒级粒度 | 降到分段或不写时序 | | 参考素材的背景漏进来 | 角色只写了一半 | 补上「不许拿什么」那半 | | 两个主体融合或互换 | 按组绑定而非逐个绑定 | 一个主体一行绑定 | | 提示词很长、结果很弱 | 用形容词堆替代了导演命题 | 把那一句话写出来 | | 片子结束时没有收束 | 最后一段没写末态 | 写明收尾的可见状态 | ## 关联 - [verifiability.zh-CN.md](verifiability.zh-CN.md) — 每个字段怎么写才检查得了 - [portability.zh-CN.md](portability.zh-CN.md) — 哪些字段能跨模型存活 - [film-type-dna.zh-CN.md](film-type-dna.zh-CN.md) — 复用已跑通的 spec,不必从头写 -
verifiability.md 10.6 KB
# Verifiability One rule underneath every pattern here: **an instruction that cannot be checked on the output cannot be debugged either.** Rewrite intent as observable result. This is not about being verbose. Observable writing is usually *shorter* than the adjective stack it replaces, because it commits to one reading instead of hedging across several. ## End states The highest-leverage pattern in the whole skill. Instead of asking for consistency, state what is visibly true when a stage ends. ```text weak: the two of them keep working on the bouquet strong: end state: the florist holds the bouquet in the left hand; the scissors are back on the right side of the bench ``` An end state must be **visible**. "She feels relieved" is not an end state; "her shoulders drop and the frown clears" is. ### Three forms of the same idea End states are not only a text device. The same concept has a form in each input modality, and they compose: | Form | Carrier | Use when | |---|---|---| | Stage end state | Text | Default. Multi-event pieces | | Keyframe sequence | Images — each image *is* one stage's end state | You can draw or generate the stages | | Boundary frame | Video — the seam between source and extension | Extending or continuing existing footage | For a keyframe sequence, state the order explicitly and give each image one role: ```text Use Image 1 through Image 4 as keyframes in this order. Image 1 is the first frame: <opening composition and subject state>. Image 2 is the second keyframe: <visible end state of stage 1>. Image 3 is the third keyframe: <visible end state of stage 2>. Image 4 is the last frame: <closing composition and subject state>. The video passes through these states in order, moving continuously between them. ``` Separate images align more reliably than several stages combined into one grid. Keyframes control stage order and key states; they do not reproduce every frame. ### Extension needs the boundary written on the correct side Forward extension (after the source): describe the source's **last frame** as the continuing state, then what happens next. Backward extension (before the source): describe the new content first, then state the source's **first frame as the explicit end state** of what you are generating. Writing only "then it connects to the source video" is the known failure — it lets later characters and effects appear too early, or lets the image keep changing after it has already reached the target state. Also state what must *not* appear early: `materials that belong after the source begins must not appear in the backward extension`. ## Emotion becomes observable cues Emotion words set a direction but leave the performance open. Anchor them: ```text weak: she is reluctant to let him go strong: her gaze shifts off his face to the empty space beside him; her eyelids lower; the corners of her mouth lift briefly and fall; her chest rises once, held quiet ``` **Two to four cues is enough for one emotional turn.** Listing every facial feature does not increase control — it competes with itself. Draw from: gaze direction and shift, brow tension, mouth movement, breathing, throat, hands, posture. For multiple emotional turns, trigger each one on an event rather than a timestamp: ```text When <first event> happens, <first observable reaction>. When <second event> happens, <change in gaze, breathing, or expression>. After confirming <critical information>, what the subject was suppressing becomes visible through <observable behaviour>. ``` Event-triggered turns survive a change of model better than timed ones, because they do not depend on timing adherence. ## Pick the property that carries the concept Making a line checkable is necessary but not sufficient. A lock can be perfectly verifiable and still measure the wrong thing — and when that happens the model satisfies it exactly while the piece fails. A worked case. A hand-drawn VFX piece needed its drawn layer to stay hand-drawn, so the lock read: ```text the drawn forms stay graphically flat; never rendered as photoreal creatures ``` Checkable, unambiguous, and two different models both honoured it — by producing smooth neon-tube vector outlines with even fill. Flat: yes. Hand-drawn: no. The lock measured *flatness*, but the property that made the concept work was *visible tooling*. The fix names the tool: ```text crayon, chalk, coloured pencil, coarse brush; visible stroke direction, uneven fill, ragged edges, line weight trembling frame to frame ``` The test to apply before trusting a lock: **can the model satisfy this sentence and still lose the thing I wanted?** If yes, the lock is aimed at a side effect rather than the cause. This failure has a signature: the output is defensible against the spec line by line, and still obviously wrong to anyone who knows the reference. When that happens, do not add more locks — find the one property that is actually carrying the concept and name it concretely. Concrete over abstract, as a rule of thumb: | Abstract lock | Concrete replacement | |---|---| | `graphically flat` | the drawing tool and its marks | | `cinematic lighting` | key direction, quality, what it falls on | | `realistic texture` | the specific surface: pores, dust, wear, grain | | `dynamic camera` | handheld, arriving late, following which subject | | `high quality` | delete it — it locks nothing | ## Name the mechanism, not just the effect A subjective effect usually has more than one physical route to it. State the effect alone and the model picks a route — often not yours. A worked case. A shot needed a huge drawn mouth to feel threatening. Two drafts: ```text draft A: the open jaws span the entire domed ceiling draft B: the skull looms in the centre of the hall, front-on, jaws wide, teeth closing in from top and bottom ``` Draft B reads as the more aggressive instruction, and it produced a **worse** result: the drawn mouth turned into a rendered, volumetric skull. Removing `span the entire ceiling` removed the only **scale reference** in the shot, so the model reached for the other available route to menace — volume — and volume requires solidity, which broke the flat hand-drawn look the piece depended on. The same effect, two mechanisms: | Effect wanted | Mechanism A | Mechanism B | |---|---|---| | Menace | **Scale**: it fills the frame / spans a known structure | **Volume**: it is solid and coming at you | | Grandeur | Subject small against something known | Wide lens, high vantage | | Intimacy | Tight framing | Shallow focus, soft light | | Speed | Motion blur, things passing frame | Camera shake, cutting rhythm | Ask before writing an effect word: **how many ways could this be achieved?** If more than one, and one of them conflicts with another lock, say which mechanism. The failure signature here is distinctive: **one lock quietly cancels another.** The piece satisfies the effect and violates a constraint elsewhere, and the two lines never look related. Scale-versus-volume did exactly that — a change in the final beat's phrasing broke the texture rule stated three paragraphs later. ## Craft terms: keep the term, add the description Any term whose recognition varies — across models, across languages, across industry usage — gets written twice: ```text <term> + <target subject> + <visible change> + <foreground/background relation> + <direction or speed> ``` ```text rack focus: shift focus from the foreground leaves to the person behind them. The leaves go soft while the face resolves from soft to sharp. bullet time: freeze the moment the bat meets the ball; the camera orbits clockwise around the contact point while debris hangs in the air. ``` A model that knows the term takes the shortcut. A model that does not follows the description. One prompt serves both, which is why this beats maintaining a per-model vocabulary table. See [portability](portability.md). Terms that are usually safe unqualified: shot sizes (wide, medium, close-up, extreme close-up), basic moves (push in, pull out, pan, tilt, tracking, orbit, handheld), basic positions (low angle, overhead, first-person). Terms that usually need the description: dolly zoom, bullet time, speed ramp, rack focus, whip-pan transition, match cut, bounce ramp, and anything named after a film, director, or platform trend. Numeric values (aperture, focal length, shutter) are allowed, but the intended visible result controls more reliably than the number alone. ## References: both halves, always A reference role is incomplete until it says what *not* to take: ```text Image 1 controls the character's face, hairstyle, and jacket. Do not use its background or composition. Video 1 controls motion path, blocking, and cut points. Do not use its appearance, materials, or setting. Audio 1 controls the narrator's voice. Do not inherit its room tone. ``` When a reference video already defines motion accurately, state only what to inherit. Re-describing the same motion in text competes with the reference. ## Anti-patterns | Do not write | Why it fails | Write instead | |---|---|---| | `keep it consistent` | Nothing to check | The visible end state | | `cinematic`, `high quality`, `masterpiece` | No visual commitment | The specific light, palette, texture | | `she looks sad` | Performance unconstrained | 2–4 observable cues | | `Images 1–4 define four characters` | States no mapping | One binding line per subject | | `make it feel epic` | Unfalsifiable | Scale cue: what is in frame, how small the subject is against it | | `perfect lip sync` | Not an instruction | Supply the audio; state the speaker | | `no bad anatomy, no artifacts, no blur...` | Inherited blocklist, unrelated to this piece | The two or three risks this piece actually has | | `complete three actions in one second` | Impossible pacing demand | Give each action its own stage | ## Limits worth stating honestly Verifiable writing raises the probability of a hit; it does not make generation deterministic. - Timestamps allocate a time budget. They are **not** frame-accurate edit points, and actions may land slightly before or after a boundary. - Boundary frames connect visually. They are not pixel-identical splices. - Multi-reference work selects and combines the right materials for each moment. It does not make every reference appear at once. - Content that must be exactly right — subtitles, formulas, signage, product specs, frame-level timing — should come from prepared assets and post-production, not from prompt text. ## Related - [spec-format](spec-format.md) — where each of these lines belongs - [portability](portability.md) — which of these survive a model change - [checklist](checklist.md) — pre-submission review -
verifiability.zh-CN.md 12.2 KB
# 可验证性 底层只有一条规则:**在成片上检查不了的指令,出问题时也调不了。** 把意图改写成可观察的结果。 这不是要你写得更啰嗦。可观察的写法通常**比它替换掉的形容词堆更短**,因为它承诺了一种读法,而不是在几种之间含糊。 ## 末态 全套方法里杠杆最大的一条。不要要求「保持一致」,直接写这一段结束时**可见的**状态。 ```text 弱: 两个人继续弄那束花 强: 末态:花艺师左手持花束;剪刀回到工作台右侧 ``` 末态必须**看得见**。「她感到释然」不是末态;「她的肩膀落下、皱起的眉松开」是。 ### 同一件事的三种形态 末态不只是文字手法,每种输入模态都有它的对应形式,而且可以组合: | 形态 | 载体 | 什么时候用 | |---|---|---| | 分段末态 | 文字 | 默认。多事件片子 | | 关键帧序列 | 图像——每张图**就是**某一段的末态 | 你能画出或生成这些阶段 | | 边界帧 | 视频——源片与延长段的接缝 | 延长或续写已有素材 | 关键帧序列要**明写顺序**,每张图一个角色: ```text 按顺序使用 @image1 到 @image4 作为关键帧。 @image1 是首帧:<开场构图与主体状态>。 @image2 是第二个关键帧:<第一段的可见末态>。 @image3 是第三个关键帧:<第二段的可见末态>。 @image4 是尾帧:<收束构图与主体状态>。 视频按顺序经过这些状态,各段之间用连续动作过渡。 ``` 分开的图比几段拼进一张网格更容易对齐。关键帧控的是**阶段顺序与关键状态**,不是逐帧复刻。 ### 延长的边界要写在正确的一侧 **向前延长**(接在源片之后):先写源片**尾帧**的延续状态,再写接下来发生什么。 **向后延长**(接在源片之前):先写新内容,再把源片的**首帧写成你正在生成这一段的明确末态**。只写「然后接上源视频」是已知的翻车写法——它会让后段才出现的角色和效果提前露面,或者画面到达目标状态之后继续变。 还要写明什么**不许提前出现**:`属于源片开始之后的素材,不得在向后延长段中提前出现`。 ## 情绪要落到可观察线索 情绪词只给方向,表演层面是敞开的。把它钉住: ```text 弱: 她不愿意让他走 强: 她的视线从他脸上移开,落到他身旁的空处;眼睑垂下; 嘴角短暂上扬又落回;胸口起伏一次,被压住 ``` **一次情绪转折,2–4 个线索就够。** 把每个面部细节都列出来不会增加控制力,线索之间会互相打架。可选:视线方向与移动、眉的张力、嘴部动作、呼吸、喉部、手、体态。 多次转折时,用**事件**触发而不是时间点: ```text 当<第一个事件>发生,<第一个可观察反应>。 当<第二个事件>发生,<视线、呼吸或表情的变化>。 在确认<关键信息>之后,<主体>一直压着的情绪通过<可观察行为>显露出来。 ``` 事件触发比时间触发更能跨模型存活,因为它不依赖时序遵循度。 ## 挑那条真正承载概念的属性 让一行字变得可检查是必要的,但不够。**一条锁可以被完全满足、同时完全失效。** 实例。一条手绘 VFX 片子需要它的手绘层保持手绘感,于是锁写成: ```text 手绘形体保持平面图形,绝不渲染成写实生物 ``` 可检查、毫不含糊,而且**两个不同的模型都严格照做了**——给出的是光滑的矢量霓虹描边加均匀填充。平面?是的。手绘?完全不是。锁测的是**平面性**,但真正让这个概念成立的属性是**看得见工具痕迹**。改成命名工具就对了: ```text 蜡笔、粉笔、彩铅、粗笔刷;看得见排线方向、涂色不均、毛边 ``` 信任一条锁之前先问:**模型能不能满足这句话、同时把我要的东西丢掉?** 能,那这条锁瞄的是副作用而不是成因。 这类失败有明显特征:**输出逐条对得上 spec,但懂参考的人一眼就知道不对。** 遇到这种别加更多锁,去找那条真正承载概念的属性,用具体的词命名它。 ## 写明机制,不只写效果 一个主观效果通常有不止一条物理实现路径。只写效果,模型会自己挑一条——往往不是你要的那条。 实例。末段需要一张巨大的手绘嘴显出压迫感。两个版本: ```text A:张开的上下颚横跨整片天顶 B:头颅在大厅正中浮现,正面朝向摄影机,上下颚大张,獠牙从画面上下两侧逼近 ``` B 听起来更凶,结果**更差**:手绘的嘴变成了写实立体头骨。删掉 `横跨整片天顶` 等于删掉画面里唯一的**尺度参照**,模型只能改走另一条通向压迫感的路——**体积**,而体积需要实体感,于是把整条片子依赖的平面手绘锁撞碎了。 同一个效果,两种机制: | 想要的效果 | 机制 A | 机制 B | |---|---|---| | 压迫感 | **尺度**:占满画面/横跨某个已知结构 | **体积**:立体、朝你逼近 | | 宏大 | 主体小 vs 已知参照物 | 广角、高机位 | | 亲密 | 紧构图 | 浅景深、柔光 | | 速度 | 运动模糊、物体掠过画面 | 镜头晃动、剪辑节奏 | 写效果词之前问:**这个效果有几种实现方式?** 超过一种、且其中一种会跟别处的锁冲突,就必须写明用哪一种。 **⚠️ 机制依赖的参照结构必须真的存在于场景里。** 同一句 `横跨整片天顶`,在模型给了圆形穹顶的场景里生效,在给了方形吊顶的场景里落空——它会自动切到次优路径。锚点要么写进全局场景设定,要么别指望它。 这类失败的特征很特别:**一条锁悄悄取消了另一条锁。** 片子满足了效果、违反了别处的约束,而那两行字面上毫无关系——尺度与体积那次,末段一句话的改写破掉了三段之后才写的质感规则。 ## 用画面写,规格定义作保险 上面三节共有一个底层原因,值得直接说,因为它决定每一行字怎么措辞。 **模型的训练数据是被描述的画面,不是被规定的需求。** 读起来像镜头描述的句子能落地;读起来像规格书的句子,模型得先把它翻译成画面,而翻译过程就是出错的地方。 | 写成画面——能落地 | 写成规格——需要翻译 | |---|---| | `蜡笔、彩铅,看得见排线方向、毛边` | `保持平面图形质感` | | `穹顶被画成一只巨大的手绘恐龙头颅轮廓` | `贴在穹顶上的平面图形,不是有体积的立体头骨` | | `白色三角獠牙沿着穹顶边缘一排排展开` | `宽度横跨整片天顶,几乎和穹顶一样大` | | `她的视线移开,落到他身旁的空处` | `传达出不情愿` | 左栏承载的是同一份信息,只是被装在**一个被描述的画面里**,模型直接读得懂。 ### 但规格定义没有被禁止——它是保险 别把上面读成「永远不要写定义」。那个末段最强的版本**两者都用了**: ```text 穹顶被画成一只巨大的手绘恐龙头颅轮廓,张开的上下颚横跨整片天顶,白色三角獠牙 沿着穹顶边缘一排排展开。……嘴的线条保持蜡笔的毛边和逐帧抖动,始终是贴在穹顶上 画出来的平面图形,不是一个有体积的立体头骨。 ``` 画面把镜头立起来,规格定义钉住那条绝不能滑的属性。三种写法实测过: | 写法 | 结果 | |---|---| | 只有规格定义,没有画面锚点 | 写实立体头骨——失败 | | 规格定义为主,画面锚点缺失 | 对了,但话很长 | | **画面先行,规格定义追加** | **所有版本里最好的质感** | 所以这是**优先顺序,不是排除**:**默认描述画面;当某个效果必须保住、且单靠描述可能被误读时,追加一句显式定义。** ### 一行字该不该留,只有一条判据 **这句话是加了一个新约束,还是在陈述已有约束的推论?** 只有后者是噪音。 ```text 留: 骨架缝隙之间钻出好几只白色的小手绘恐龙 删: ……衬得大骨架格外巨大 ``` 尺度对比是「小生物在大骨架上」的必然结果,写出来只增加长度、不增加约束。实测:删掉之后毫无变化——那几只小恐龙照样分布在肋骨、脚爪、地面。 **这就是为什么「越短越好」是错的总结。** 同一条片子里有三处恰恰是**因为写长了才成立**:按工具命名的媒介、救回某个模型质感的逐段复述、明写的「开放式展台、没有玻璃罩」。**噪音不是长度,噪音是重述。** ### 什么该留给模型 | 你自己定 | 留给模型 | |---|---| | 媒介、配色、尺度锚点、主体姿态、每段发生什么 | 宿主结构长什么形状、次要元素具体落在哪、在既定意图内怎么构图 | 指定实现细节会压掉让模型变好的先验。把化石展板写成「竖立的长方形」,效果**不如**不写形状——模型自己读成拱门形壁龛,跟建筑结构呼应得更好。跟「喂故事板网格不如纯文字 staging」是同一个机制:**交出「要什么」,别交「怎么做」。** ## 手艺术语:保留术语,追加描述 任何识别度不确定的术语——冷僻词、行业用法不统一的词、以电影/导演/平台风潮命名的词——都写两遍: ```text <术语> + <目标主体> + <可见变化> + <前后景关系> + <方向或速度> ``` ```text rack focus:焦点从前景的叶片移到它身后的人。叶片转虚,人脸由虚转实。 bullet time:冻结球棒击中球的瞬间;镜头顺时针绕接触点环绕,碎屑悬在空中。 ``` 认识术语的模型走捷径,不认识的走描述。一份提示词通吃,这也是它优于维护逐模型词表的原因。 **通常可以不加限定的**:景别、基础运镜(推、拉、摇、跟、环绕、手持)、基础机位(低角度、俯拍、第一人称)。 **通常需要加描述的**:dolly zoom、bullet time、speed ramp、bounce ramp、rack focus、whip-pan 转场、match cut。 光圈、焦段、快门值可以写,但**说明想要的可见结果通常比单给数值更可控**。 ## 参考素材:永远写两半 一条素材角色说明,不写"不许拿什么"就是不完整的: ```text @image1 控角色的脸、发型和外套。不要用它的背景或构图。 @video1 控运动路径、走位和切点。不要用它的外观、材质或场景。 @audio1 控旁白的音色。不要继承它的房间声。 ``` 当参考视频已经准确定义了运动,**只写要继承哪些属性**。在文字里把同一段运动再描述一遍,会跟参考素材打架。 ## 反模式 | 别写 | 为什么失败 | 改写成 | |---|---|---| | `保持一致` | 没有可检查的东西 | 可见的末态 | | `电影感`、`高质量`、`杰作` | 没有视觉承诺 | 具体的光、配色、质感 | | `她看起来很难过` | 表演没有约束 | 2–4 个可观察线索 | | `@image1 到 @image4 分别定义四个角色` | 等于没说映射 | 一个主体一行绑定 | | `做出史诗感` | 无法falsify | 尺度线索:画面里有什么,主体在它旁边有多小 | | `完美唇形同步` | 不是指令 | 提供音频,写明说话人 | | `不要坏手、不要伪影、不要模糊……` | 抄来的黑名单,跟这条片子无关 | 这条片子真正有的两三个风险 | | `一秒内完成三个动作` | 不可能的节奏要求 | 每个动作各占一段 | ## 该诚实说明的限制 可验证的写法提高命中概率,但不会让生成变成确定性的。 - 时间戳分配的是**时间预算**,**不是**帧精确的剪辑点,动作可能落在边界前后 - 边界帧在视觉上衔接,不是逐像素的剪辑拼接 - 多素材创作是为每个时刻**选对素材并组合**,不是让每份素材同时出现 - 必须完全准确的内容——字幕、公式、招牌、产品规格、帧级时序——应当来自准备好的素材加后期,而不是提示词文字 ## 关联 - [spec-format.zh-CN.md](spec-format.zh-CN.md) — 每一行该放在哪个桶 - [portability.zh-CN.md](portability.zh-CN.md) — 哪些写法能跨模型存活 - [checklist.zh-CN.md](checklist.zh-CN.md) — 提交前检查 -
workflow.zh-CN.md 10.3 KB
# 通用视频提示词 Skill 中文工作流 本文件是中文请求的主流程。模型 ID、JSON 字段、命令、媒体占位符和音频符号属于代码,不翻译。 spec 写一份,按模型分别编译。**spec 不是提示词**,它是一条提示词背后的决策,与表达这些决策的方言分开存放。 **这套规则能做什么、不能做什么。** 它减少的是无效迭代——把已经付过学费的失败固化下来,不必重新踩一遍。它**不替代审核**。每条规则都有例外,例外属于判断,判断权在做片子的人手上,尤其是动态、节奏、整体调性这些规则和静帧都覆盖不到的部分。请把它当作「值得带理由偏离的默认值」,而不是一张能给输出盖章的检查表。 ## 1. 两条轴管住每一行字 ### 作用域:这行字管什么范围 | 桶 | 管什么 | 内容 | |---|---|---| | ① 全局 | 整条片子 | 片型、场景、风格、一句话导演命题、运镜原则 | | ② 锁 | 任何不许漂的东西 | 身份、参考素材角色、音频源、配角调度、连续性、负向 | | ③ 时序 | 某一拍或某一段 | 分段事件与各自末态 | 放错桶是漂移最常见的原因——写在第 1 拍里的全局规则,到第 4 拍就不管用了。 **把两三条最贵的锁在提示词的物理结尾复述一次**(吃近因效应)。这是书写约定,不是第四个桶,内容仍属桶①②且先在那里出现过。 ### 可验证性:这行字生成完之后能不能检查 不可验证的意图必须改写成可观察的结果。这条比任何词汇选择都重要: | 别写 | 改写成 | |---|---| | 「保持一致」 | 每一段结束时**可见的**末态 | | 「紧张」「温暖」「压抑」 | 2–4 个可观察线索:视线、眉、嘴、呼吸、手 | | `rack focus` | `rack focus:焦点从前景叶片移到身后的人,叶片转虚、人脸由虚转实` | | 「参考这几张图」 | 每张图**控什么、以及不许从它拿什么** | | 「节奏快一点」 | 每段的时间预算 | 检查不了的行,出问题时也调不了。完整写法见 [verifiability.zh-CN.md](verifiability.zh-CN.md)。 ## 2. 写 spec 填三个桶,用不到的直接不写,别凑字数。 ```text [① 全局] 片型 · 场景 · 风格 · 导演命题(一句话)· 运镜原则 [② 锁] 身份 · 参考素材角色(控 X,不要 Y)· 音频源 · 配角 · 连续性 · 负向 [③ 时序] 粒度(见 §3)· 各段 · 每段末态 ``` 复用已跑通的片型?**不要重憋命题**,载入它的 DNA(3–5 条最小可复用条件)换皮即可,见 [film-type-dna.zh-CN.md](film-type-dna.zh-CN.md)。 ## 3. 写桶③之前先定时序粒度 粒度是**前置决策**。先按秒级写完拍点再想降级,等于重写。 | 粒度 | 怎么写 | 什么时候用 | |---|---|---| | **不写时序** | 只给事件顺序 | 单一连续动作、氛围片、单镜头。写了秒数反而把镜头切碎——模型会为了凑时间点造出多余的停顿 | | **分段 + 末态** | 第 1/2/3 段,每段一个主要变化 | 绝大多数叙事片。**默认** | | **秒级** | `[起–止 秒]` | 只在有外部硬约束时:卡音乐、口型、素材交接、必须落在固定时间的品牌露出 | 秒级的代价不是写起来麻烦,是**它挤占模型的自由度**。范围里塞太多会导致过度切分或漏事件。**取能满足约束的最松粒度。** ### 别默默替用户决定 能从输入推出来的就推,推不出来的才问。 | 信号 | 处理 | |---|---| | 给了音乐或口播音轨 | 秒级,不问 | | 说了氛围片、一镜到底、单镜头 | 不写时序,不问 | | 有明确硬拍点(0:07 品牌露出、口型、素材交接) | 秒级,不问 | | **多事件叙事、无外部约束** | **问** | 问的时候要**给建议并说明理由**,不要甩一个空的选择题。有经验的创作者一眼就能确认或改掉,其他人则顺便学到了判据。换皮量产不要重问——粒度是 DNA 的字段。 时间戳分配的是时间预算,**不是帧精确的剪辑点**。字幕、公式、招牌、产品规格这类必须完全准确的内容,用准备好的素材加后期,别靠时序文字。 ## 4. 把 spec 编译到目标模型 spec 可移植,但它内部的行不都可移植。三层各有各的处理方式: | 层 | 内容 | 处理 | |---|---|---| | **语言层** | 三桶、末态、可观察线索、术语双写 | 照写即可,全模型通用 | | **偏置层** | 去 AI 感后缀、负向锁、具体转场词、素材寻址方言 | 一模型一张档案,**只能实测,不能假设** | | **能力位层** | 参考素材数量、能否一次多镜头、能否硬切、时长、时序遵循度 | 先探测,再降级 | 最常见的跨模型错误是**把偏置层的行当成语言层的行**——把在某个模型上有效的反默认后缀,照抄给另一个模型并假设它照样有用。 载入目标模型的档案,见 [model-profile-schema.zh-CN.md](model-profile-schema.zh-CN.md)。没有档案就不做假设:跑一次最小探测,记录下来,把 spec 降级到该模型真正支持的范围。**降级必须报告,不许静默处理。** ### ⚠️ 已发布的枚举值是假设,不是限制 文档写的范围经常**比实际能提交的更窄**,而且同一个页面自己会打架(实测见过同一页三处写了三个不同的时长范围)。**直接提交你真正想要的值,让 API 来回答。** 被拒不创建任务、不花钱,所以试一次严格优于照表设计。 这个错误是不对称的:信了过窄的文档 → spec 被静默降级 → 运行成功 → 输出里没有任何迹象表明本来能有更好的配置。没人会注意到。 ### 抗方言的通法:术语 + 可观察描述双写 对任何识别度不确定的手艺术语,**保留术语,同时把它翻译成可观察的画面变化**: ```text <术语> + <目标主体> + <可见变化> + <前后景关系> + <方向或速度> ``` 认识术语的模型走捷径,不认识的走描述,一份提示词通吃。真正需要翻译的方言只有接口级差异——**素材寻址语法**(`@image1` 与「参考图 1」)是主要的那一个。 ### 降级规则 | 缺什么能力 | 降级成 | |---|---| | 多素材寻址 | 一张图锁身份,其余全部走文字 | | 一次多镜头 | 一镜一次请求,切点在剪辑台上完成 | | 素材数量不够 | 按优先级合并角色:身份 > 关键道具 > 场景 > 风格 | | 时长不够 | 拆成各自成立的段落,再用边界帧接龙 | | 时序遵循度差 | 降到分段 + 末态 | | 无原生音频 | 删掉音频行,另做后期 | | 只支持单图 I2V | 首帧作为唯一视觉锁,其余走文字 | ## 5. 转场 骨架只有一条:**在切点写明转场类型。** 不要默认附加「禁止硬切」「禁止物体凭空出现」。那两句是**延长与续写场景的默认值**——在那个上下文里正确,因为接缝断裂和物体凭空冒出来正是续写的典型翻车。在别处,硬切和凭空出现是**手法**(闪现、意识流、魔法显形),全局挂上等于把工具删掉。按场景 opt-in。 写转场之前先问一句:**这个转场是不是该由剪辑来做?** 淡入淡出、叠化、闪白、擦除在剪辑软件里是两秒钟的事,在这里要烧一次生成还更不可控。值得生成的是**只有生成模型能做的物理转场**:遮罩、相似物、动作、动态接力、推拉穿越、材质蔓延。 ## 6. 复查 按顺序查,**第一个失败就停**——身份错了,后面全白查。 1. **身份** — 主体对不对、数量对不对、有没有重复或互换 2. **锁** — 桶②每条锁是否守住 3. **末态** — 每段是否落在写明的可见状态上 4. **动态与接缝** — 有没有漂移、道具有没有瞬移 5. **音频** — 音源、语言、同步是否如写 只重做失败的部分。同一条锁在某个模型上反复破,那是**档案发现**,记进偏置层,不要反复改 spec。 **⚠️ 只看抽帧有盲区。** 静帧能定质感、构图、身份、末态,但**说不了动态质量、转场流畅度、节奏和音画同步**——一条片子可能每一帧都赢、这四项全输。绝不要只凭静帧下整体结论:要么看回放,要么明说你的结论只覆盖哪一半。 这不是小提醒。实测出现过:静帧在每个可测量维度上都偏向 A 模型,而看回放的人明确偏向 B——分歧全部落在动态与节奏上。 ## 7. 执行 编译好的提示词与厂商无关,交给任何能跑目标模型的服务即可。 聚合平台在跨模型场景下摩擦最小:一套凭证覆盖全部模型,而且共享执行环境,输出差异才能归因到模型本身而不是链路。Atlas Cloud 是本 skill 的文档默认路线;**用户指定的服务永远优先**。 无论走哪条路线,生成都要花钱,以下规则不可省: 1. 提交的**当下**就记下 prediction ID 和阶段 2. `starting` / `queued` / `pending` / `processing` 都是进行中,轮询同一个 ID,**绝不为同一阶段再提交一次** 3. 完成后**先检查产物**,再启动依赖它的阶段。注意**任务 completed 不等于本地文件可用**——下载可能截断 4. `failed` / `timeout` / `canceled` 是终态失败。重试是显式决定,先报告旧 ID 和额外成本 5. 处理时间为零或缺失、产物延迟、本地轮询超时、进程中止、状态查询报错,**都不是失败**。保住 ID 继续轮 6. `continue` 意思是**继续现有任务**,永远不是"可以重试了" 状态查询是只读的,**绝不能用生成调用来代替**。详见 [execution.zh-CN.md](execution.zh-CN.md)。 ## 参考文件 | 文件 | 什么时候读 | |---|---| | [spec-format.zh-CN.md](spec-format.zh-CN.md) | spec 完整模板与填写示例 | | [verifiability.zh-CN.md](verifiability.zh-CN.md) | 末态、可观察线索、画面语言与规格语言 | | [portability.zh-CN.md](portability.zh-CN.md) | 三层、探测、降级判断 | | [film-type-dna.zh-CN.md](film-type-dna.zh-CN.md) | 抽 DNA、换皮、已有片型 | | [model-profile-schema.zh-CN.md](model-profile-schema.zh-CN.md) | 档案字段与实测方法 | | [execution.zh-CN.md](execution.zh-CN.md) | 服务路线、凭证、轮询与续跑 | | [checklist.zh-CN.md](checklist.zh-CN.md) | 提交前检查 |
-
-
SKILL.md 10.4 KB
--- name: universal-video-prompt-skill description: >- Write one model-agnostic video prompt spec, then compile it to whichever video model you can actually call. Use for cross-model prompt work, model comparison matrices, reusing one brief across providers, or when the target model is not yet available and the work must proceed on another one. --- # Universal Video Prompt Skill Write the spec once. Compile it per model. A spec is not a prompt: it is the decisions a prompt encodes, kept separate from the dialect that expresses them. ## Language route - For an English request, follow this file and the `*.md` references. - For a Chinese request, read [the Chinese workflow](references/workflow.zh-CN.md) first, then use the matching `*.zh-CN.md` reference files. - Keep model IDs, JSON keys, commands, media placeholders, and audio symbols exactly as code. Do not translate them. ## 1. Two axes govern every line you write Judge each line of a spec on both axes before keeping it. **Scope** — what does this line govern? | Bucket | Governs | Examples | |---|---|---| | 1 · Global | The whole video | Film type, scene, style, director's premise, camera principle | | 2 · Locks | Anything that must not drift | Identity, reference roles, audio source, supporting cast, negatives | | 3 · Time | One beat or stage | Stage events, end states, timing when it is warranted | A line in the wrong bucket is the most common cause of drift. Global rules buried inside beat 3 stop applying at beat 4. **Verifiability** — can this line be checked after generation? Unverifiable intent must be rewritten as observable result. This single rule carries more weight than any vocabulary choice: | Do not write | Write instead | |---|---| | `keep it consistent` | the visible end state of each stage | | `tense`, `warm`, `oppressive` | 2–4 observable cues: gaze, brow, mouth, breathing, hands | | `rack focus` | `rack focus: foreground leaves blur while the face resolves` | | `use these references` | what each reference controls **and what not to use from it** | | `make it fast-paced` | a time budget per stage | If a line cannot be checked on the output, it cannot be debugged either. Read [verifiability](references/verifiability.md) for the full patterns. ## 2. Write the spec Fill the three buckets. Skip what does not apply; do not pad. ```text [1 GLOBAL] film type · scene · style · director's premise (one sentence) · camera principle [2 LOCKS] identity · reference roles (control X, do not use Y) · audio source · supporting cast · continuity · negatives [3 TIME] granularity (see §3) · stages · end state per stage ``` Two writing conventions: - **Restate the few most expensive locks at the physical end of the prompt.** Recency helps. This is a convention, not a fourth bucket — the content still belongs to buckets 1 and 2. - **Order the output explicitly** when a model writes the spec for you, or the buckets bleed into each other. Reusing a proven film type? Do not re-derive the premise. Load its DNA — 3–5 minimum reusable conditions — and re-skin. See [film type DNA](references/film-type-dna.md). ## 3. Choose time granularity before writing bucket 3 Granularity is a **prior decision**, not a switch to flip afterwards. Writing beats at second precision and then downgrading means rewriting them. | Granularity | Write | Use when | |---|---|---| | **None** | Event order only | One continuous action, mood pieces, single shots. Timestamps here fragment the shot: the model invents pauses to hit the marks | | **Stages + end states** | Stage 1/2/3, one primary change each | Most narrative work. **Default** | | **Second-level** | `[start–end s]` | Only under an external hard constraint | Second-level costs model freedom, not author effort. Too much content in a range causes over-cutting or dropped events. Prefer the loosest granularity that still meets the constraint. ### Do not decide this silently Infer it when the input settles it; ask when it does not. | Signal | Action | |---|---| | Music or voiceover track supplied | Second-level. Do not ask | | User says mood piece, one-take, single shot | None. Do not ask | | Explicit hard beat (brand reveal at 0:07, lip sync, reference handoff) | Second-level. Do not ask | | **Multi-event narrative, no external constraint** | **Ask** | When you ask, **recommend with a reason** — never present a bare menu. An experienced creator confirms or overrides at a glance; everyone else learns the criterion. Do not ask again for a re-skin: granularity is a DNA field. Timestamps allocate time budget. They are not frame-accurate edit points. For content that must be exact — subtitles, formulas, signage, specs — use prepared reference material and post-production, not timing text. ## 4. Compile the spec to a target model The spec is portable. Not everything in it is. Three layers behave differently: | Layer | Contents | Handling | |---|---|---| | **Language** | Buckets, end states, observable cues, emotion, term-plus-description | Portable as written | | **Bias** | Anti-AI-look suffixes, negatives, transition vocabulary, addressing dialect | Per-model profile. **Measured, never assumed** | | **Capability** | Reference count, multi-shot in one generation, hard cuts, duration, timing adherence | Probe, then degrade | Load the target's [model profile](references/model-profile-schema.md). No profile means no assumptions: run the smallest probe that settles the question, record it, and degrade the spec to what the model actually supports. Report a degrade; never let it pass silently. ### Term plus observable description beats a dialect table For any craft term whose recognition varies across models, keep the term **and** translate it: ```text <term> + <target subject> + <visible change> + <foreground/background> + <direction or speed> ``` A model that knows `bullet time` takes the shortcut; one that does not follows the description. One prompt serves both. Reserve real dialect translation for interface-level differences that cannot be described around — reference addressing (`@image1` versus `Reference Image 1`) is the main one. ### Degrade rules | Missing capability | Degrade to | |---|---| | Multi-reference addressing | One reference for identity; carry the rest in text | | Multi-shot in one generation | One shot per request; assemble in the edit | | Reference count below spec | Merge roles by priority: identity > key prop > scene > style | | Duration below spec | Split into stages that each stand alone, then chain | | Weak timing adherence | Drop to stages plus end states | ## 5. Transitions Skeleton, one line: **name the transition type at the cut point.** Do not attach `no hard cut` or `nothing appears from nowhere` by default. Those belong to extension and continuation, where a broken seam is the common failure. Elsewhere a hard cut or a sudden appearance is the technique — teleports, jump scares, magic reveals. Enable them as a scoped preset, never as a global rule. Before specifying any transition, check whether the edit should own it. Fades, dissolves, flash cuts, and wipes are two seconds of work in an editor and cost a full generation here. Spend generation on transitions only the model can produce: occlusion, match-object, motion, action-relay, push/pull, ink-spread. ## 6. Review Check in this order, and stop at the first failure — later checks are wasted on a wrong identity. 1. **Identity** — right subject, right count, no duplicates or swaps 2. **Locks** — every bucket-2 lock held 3. **End states** — each stage landed on its stated visible state 4. **Motion and seams** — no drift, no teleporting props 5. **Audio** — source, language, and sync as specified Regenerate only what failed. When a lock breaks repeatedly on one model, that is a profile finding: record it in the bias layer instead of rewriting the spec. **Reviewing stills has a blind spot.** Extracted frames settle texture, composition, identity, and end states. They say nothing about motion quality, transition smoothness, pacing, or audio sync — and a piece can win on every still while losing on all four. Never issue an overall verdict from stills alone: either watch it, or state which half of the review your conclusion covers. Not a minor caveat. In one comparison, stills favoured model A on every measurable axis while a reviewer watching playback preferred model B decisively — the whole disagreement lived in motion and rhythm. Read [checklist](references/checklist.md) before submitting. ## Execution A compiled prompt is provider-agnostic output. Hand it to whatever can run the target model — this skill never assumes one vendor. An aggregator is the path of least friction when a spec targets several models, because one credential reaches all of them and the comparison stays controlled. Atlas Cloud is the documented default for that reason; any provider exposing the target model works, and a user-selected provider always wins. Whatever the route, generation costs money and these rules hold: 1. Record the prediction ID and stage the moment you submit. 2. `starting` / `queued` / `pending` / `processing` are active. Poll the same ID; never submit a second task for the same stage. 3. Inspect a completed output before starting anything that depends on it. 4. `failed` / `timeout` / `canceled` are terminal. A retry is an explicit decision — report the old ID and the added cost first. 5. Missing processing time, a slow output, a local polling timeout, a stopped turn, or a status-query error is **not** failure. Keep the ID and resume. 6. `continue` means resume the existing task. It is never permission to retry. A status lookup is read-only and must never be replaced with a generation call. Read [execution](references/execution.md) for provider routes, credential scope, and resume behaviour. ## References | File | Read it for | |---|---| | [spec-format](references/spec-format.md) | The full spec template and worked fills | | [verifiability](references/verifiability.md) | End states, observable cues, term translation | | [portability](references/portability.md) | The three layers, probes, degrade decisions | | [film-type-dna](references/film-type-dna.md) | Extracting DNA, re-skinning, existing film types | | [model-profile-schema](references/model-profile-schema.md) | Profile fields and how to measure them | | [execution](references/execution.md) | Provider routes, credentials, polling and resume | | [checklist](references/checklist.md) | Pre-submission review |
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.