opencode-skills-collection 4.0.73 → 4.0.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "updatedAt": "2026-09-25T02:13:20.897Z",
3
+ "updatedAt": "2026-09-26T02:19:01.177Z",
4
4
  "entries": [
5
5
  "00-andruia-consultant",
6
6
  "007",
@@ -941,6 +941,7 @@
941
941
  "file-path-traversal",
942
942
  "file-uploads",
943
943
  "filesystem-context",
944
+ "film-crew",
944
945
  "find-bugs",
945
946
  "find-complementary-founders",
946
947
  "find-matching-tenders",
@@ -2206,6 +2207,7 @@
2206
2207
  "test-fixing",
2207
2208
  "test-framework-migration-skill",
2208
2209
  "test-guard",
2210
+ "testdriver-e2e-testing",
2209
2211
  "testing-patterns",
2210
2212
  "testing-qa",
2211
2213
  "testng-skill",
@@ -0,0 +1,129 @@
1
+ ---
2
+ name: film-crew
3
+ description: "Turn a one-line AI video idea into a shot list and per-shot, model-ready prompts via a film crew (director, DP, gaffer, editor, script supervisor). Also fixes failing video prompts and diagnoses bad clips before a reroll. Works with Wan, LTX, Kling, Veo, Seedance, Hailuo, Runway."
4
+ category: media
5
+ risk: safe
6
+ source: "https://github.com/HEOJUNFO/ai-film-crew/tree/533f61be2741c10932c6c86e47777cac9ffe3fe4/skills/film-crew"
7
+ source_repo: HEOJUNFO/ai-film-crew
8
+ source_type: official
9
+ date_added: "2026-09-25"
10
+ author: HEOJUNFO
11
+ license: MIT
12
+ license_source: "https://github.com/HEOJUNFO/ai-film-crew/blob/533f61be2741c10932c6c86e47777cac9ffe3fe4/LICENSE"
13
+ tags: [video, text-to-video, shot-list, prompting, film]
14
+ tools: [claude, codex, cursor, gemini]
15
+ ---
16
+
17
+ # Film Crew
18
+
19
+ You are the producer. You don't write one prompt and hope. You run the idea past a crew,
20
+ each with one job, then hand the user a shot list and one prompt per shot that a video
21
+ model can actually execute.
22
+
23
+ Most failed AI video clips fail for boring, fixable reasons: two actions in one clip,
24
+ no camera instruction, a subject described differently in every shot, physics the model
25
+ can't do in 5 seconds, or a prompt that describes a *feeling* instead of a *frame*.
26
+ The crew exists to catch those before generation, and to diagnose them after.
27
+
28
+ ## When to Use This Skill
29
+
30
+ - Use when someone wants to plan an AI video (ad, short, music video intro) before generating clips.
31
+ - Use when a text-to-video or image-to-video prompt keeps failing and needs a diagnosis and rewrite.
32
+ - Use after a bad generation to decide the one change to make before the next reroll.
33
+ - Do not use it to generate, edit or render video; it produces planning documents and prompts only.
34
+
35
+ ## Modes
36
+
37
+ Pick the mode from the request. Default is **Plan**.
38
+
39
+ | Mode | When | Output |
40
+ |---|---|---|
41
+ | **Plan** | "make a video of…", an idea, a script, a product | `SHOT_LIST.md` + per-shot prompts |
42
+ | **Fix** | user pastes a prompt that isn't working | diagnosis + rewritten prompt |
43
+ | **Review** | user describes or shares a generated clip | what went wrong + the one change to make before the next reroll |
44
+
45
+ ## Plan mode
46
+
47
+ ### 0. Intake (keep it short)
48
+
49
+ Only ask what you can't reasonably default. Ask at most 3 questions, in one message.
50
+ If the user said "just go", use the defaults.
51
+
52
+ | Field | Default |
53
+ |---|---|
54
+ | Platform / aspect | 9:16 vertical, short-form feed |
55
+ | Total length | 15 s |
56
+ | Target model | model-agnostic (write the generic adapter) |
57
+ | Mode per shot | text-to-video, unless the user has a reference image. **Real product or real person → ask for a photo and use image-to-video**; text-to-video invents a different mug. |
58
+ | Audio | none in the prompt, unless the target model generates audio *and* the user wants it in-model (otherwise add it in the edit) |
59
+
60
+ ### 1. Run the crew, in order
61
+
62
+ Read each role file before running that role. Each role writes its own short section.
63
+ Keep every section terse: the output is a production document, not an essay.
64
+
65
+ 1. **Director** → `references/roles/director.md` — logline, intent, beat sheet with timings, the hook.
66
+ 2. **Production designer** → `references/roles/production-designer.md` — the *continuity bible*: locked descriptors for every recurring character, prop and location.
67
+ 3. **Director of photography** → `references/roles/dp.md` — per shot: size, lens, angle, height, ONE camera move.
68
+ 4. **Gaffer** → `references/roles/gaffer.md` — time of day, key direction, color temperature, practicals, contrast.
69
+ 5. **Editor** → `references/roles/editor.md` — shot durations that fit the model's clip length, cut types, first-frame hook, ending.
70
+ 6. **Sound** → `references/roles/sound.md` — only if the target model generates audio, or the user will add music/SFX in the edit.
71
+ 7. **Script supervisor** → `references/roles/script-supervisor.md` — continuity + feasibility + "unslop" pass. Has veto power: any shot it flags gets rewritten before output.
72
+
73
+ ### 2. Write the prompts
74
+
75
+ Read `references/model-prompting.md`. For each shot, assemble the prompt from the crew's
76
+ decisions in this order, then run it through the target model's adapter:
77
+
78
+ ```
79
+ [shot size + lens + camera move] of [subject, verbatim from the continuity bible]
80
+ [doing ONE visible action, present tense], in [location, verbatim from the bible].
81
+ [lighting from the gaffer]. [style / film look]. [audio line, only if supported]
82
+ ```
83
+
84
+ This order is the generic default. When the target model's adapter specifies a different
85
+ order, **the adapter wins**.
86
+
87
+ Rules that apply to every model:
88
+ - One subject action and one camera move per shot. Two actions = two shots.
89
+ - Paste continuity descriptors **verbatim** in every shot: the FULL version when the whole subject is in frame, the TIGHT version for close-ups. Never paraphrase either.
90
+ - Describe what the camera sees, not what the viewer should feel. "Tense" is not a frame; "sweat on the upper lip, jaw clenched, eyes on the door" is.
91
+ - No on-screen text, logos or readable signage unless the model is known to render text. Add text in the edit.
92
+ - Keep each shot within the model's max clip length (see adapter). Plan for 1–2 s of handles.
93
+ - Image-to-video: describe only motion and camera. Don't re-describe what's already in the image.
94
+
95
+ ### 3. Output
96
+
97
+ Write `SHOT_LIST.md` using `references/templates/shot-list.md`. If the user is working in a repo
98
+ or folder, save it there; otherwise print it. Include:
99
+ - the crew sections (short),
100
+ - the shot table,
101
+ - one copy-paste prompt block per shot (plus negative prompt where the model supports it),
102
+ - a **reroll plan**: for each shot, the most likely failure and what to change if it happens.
103
+
104
+ End with one line telling the user which shot is highest-risk and why.
105
+
106
+ ## Fix mode
107
+
108
+ 1. Read `references/roles/script-supervisor.md` and `references/unslop.md`.
109
+ 2. Name the specific problems in the pasted prompt (max 5, most damaging first).
110
+ 3. Rewrite it using the Plan-mode prompt order. If it contains two actions, split it into two shots and say so.
111
+ 4. Show before → after. Keep the user's intent; change the mechanics.
112
+
113
+ ## Review mode
114
+
115
+ Read `references/reroll-review.md`. Diagnose from what the user describes or shares
116
+ (frames, a clip, a description). Classify the failure, then give **one** change to make
117
+ before the next generation. Changing five things at once means you learn nothing from the reroll.
118
+
119
+ ## Limitations
120
+
121
+ - It plans, diagnoses, and rewrites prompts; it does not generate, edit, or render video.
122
+ - Output quality depends on the target model's current clip limits and prompt handling, which change often. Check the model's own docs before trusting an adapter's defaults.
123
+ - Continuity locks hold only as far as the model honors them; long sequences may still drift and need a reroll.
124
+ - It has no way to see a clip unless the user shares frames, a file, or a description of what happened.
125
+
126
+ ## Tone
127
+
128
+ Talk like a working crew: specific, fast, no hype. Use real film vocabulary (it helps the
129
+ models), but explain any term the user might not know in 3–5 words the first time.
@@ -0,0 +1,89 @@
1
+ # Model prompting adapters
2
+
3
+ The crew's decisions are model-agnostic. This file turns them into the phrasing each model
4
+ family tends to follow best.
5
+
6
+ > Video models change every few months. Treat these as conservative defaults, check the
7
+ > model's current docs for hard limits (clip length, resolution, prompt length), and send a
8
+ > PR when something here goes stale.
9
+
10
+ ## Generic adapter (use when the model is unknown)
11
+
12
+ One paragraph, present tense, concrete, in this order:
13
+
14
+ 1. Shot size, lens, camera move
15
+ 2. Subject (verbatim from the continuity bible)
16
+ 3. The one action
17
+ 4. Location (verbatim)
18
+ 5. Lighting
19
+ 6. Look / film stock
20
+ 7. Audio (only if the model generates audio)
21
+
22
+ ~40–90 words. Longer is fine for open-weights models; shorter for models with prompt
23
+ rewriting ("prompt enhancement") turned on.
24
+
25
+ ## Open-weights models (Wan, HunyuanVideo, LTX-Video, Mochi, CogVideoX…)
26
+
27
+ - **Be literal and long.** These models generally reward detailed, chronological,
28
+ paragraph-style descriptions (roughly 60–150 words): what's in frame, what moves, in
29
+ what order.
30
+ - **Describe motion in sequence:** "…lifts the cup, pauses, then sets it down."
31
+ - **Use the negative prompt** if your workflow exposes one:
32
+ `blurry, warped hands, extra fingers, morphing, flicker, text, watermark, logo, static frame, oversaturated`
33
+ - **Seed discipline:** when rerolling to test a single change, keep the seed fixed so you
34
+ isolate the effect of the change.
35
+ - Clip length is bounded by frame count and VRAM. Plan short shots and cut them together.
36
+
37
+ ## Kling
38
+
39
+ - Structure: subject → movement → scene → camera → lighting → atmosphere.
40
+ - Keep it tighter than open-weights prompts; one clear action.
41
+ - Clip length is chosen from presets (commonly 5 s or 10 s). Plan with the editor's
42
+ fixed-length rule.
43
+ - Negative prompt: use it where your version/interface exposes the field.
44
+ - Some newer versions can generate audio. If yours does and the user wants in-model
45
+ sound, apply the audio rules from the Veo section; otherwise keep sound out of the prompt.
46
+ - Image-to-video: describe only the motion and the camera; the image already carries the
47
+ look.
48
+
49
+ ## Veo (and other models that generate audio)
50
+
51
+ - Write sound explicitly, as its own sentence(s):
52
+ - Dialogue: `The barista says, "Sorry — my fault."`
53
+ - SFX: `SFX: paper cup hits tile, liquid splash.`
54
+ - Ambience: `Ambient café murmur, espresso machine hiss.`
55
+ - Keep dialogue short (one line per shot). Long lines drift out of sync.
56
+ - Camera and lens terminology is followed well; use it.
57
+
58
+ ## Seedance and other multi-shot-capable models
59
+
60
+ - If your version supports multiple shots in one generation, you can write the sequence
61
+ explicitly: `Shot 1: … Cut to Shot 2: …`. Keep each shot to one action and restate the
62
+ character descriptors in each.
63
+ - If you need tight control, still generate shot by shot and cut in the edit.
64
+
65
+ ## Hailuo / MiniMax
66
+
67
+ - Camera moves can be stated plainly in the prompt ("slow push-in", "pan left"). Some
68
+ versions and front-ends accept bracketed camera commands such as `[Push in]` or
69
+ `[Pan left]`; use them if your interface documents them.
70
+ - Keep one move per shot even when the syntax allows chaining several.
71
+
72
+ ## Runway / Luma / Pika / Sora-style prompt-enhanced models
73
+
74
+ - These often rewrite your prompt. Put the non-negotiables first (subject descriptors,
75
+ the action, the camera move) and keep the prompt short enough that the rewrite doesn't
76
+ bury them.
77
+ - For image-to-video: motion + camera only.
78
+
79
+ ## Image-to-video (every model)
80
+
81
+ The most reliable way to keep a character consistent across shots:
82
+ 1. Generate or pick **one** reference still per character/location.
83
+ 2. Use it as the first frame for every shot where they appear.
84
+ 3. In the prompt, describe **only** what moves and how the camera moves.
85
+
86
+ ## Clip length cheat sheet
87
+
88
+ Check your model's current limit. Common ranges in practice: 4–10 s per generation.
89
+ The editor role should never plan a shot longer than the limit minus ~1 s of handles.
@@ -0,0 +1,46 @@
1
+ # Reroll review: change one thing, then reroll
2
+
3
+ AI video is probabilistic. Some rerolls are just the dice. Many are the prompt. The job
4
+ here is to tell those apart and change **one** thing at a time, so each reroll teaches you
5
+ something.
6
+
7
+ ## 1. Classify the failure
8
+
9
+ | Class | Looks like | Most likely fix |
10
+ |---|---|---|
11
+ | **Dice** | The prompt is followed, the clip is just weaker than the last one | Reroll unchanged (new seed). Nothing to fix. |
12
+ | **Ignored action** | The key event doesn't happen (the cup never spills) | Make the action the *first* clause; describe its start and end; cut everything else in the shot |
13
+ | **Two things fighting** | Half an action, half another | Split into two shots |
14
+ | **Physics break** | Liquid behaves like jelly, objects pass through each other | Frame tighter, slow the action, simplify the background, lock the camera |
15
+ | **Identity drift** | Character looks different from other shots | Paste the continuity descriptors verbatim, or switch to image-to-video from one reference |
16
+ | **Camera chaos** | Warped geometry, swimming background | One move only, slower, or locked-off |
17
+ | **Look drift** | Color/light changes between shots | Paste the gaffer's line verbatim; name the source and color temperature |
18
+ | **Artifacting** | Extra fingers, melting faces, flicker | Tighter framing, fewer subjects, add the negative prompt if supported |
19
+ | **Text garbage** | Nonsense letters | Remove readable text from the shot |
20
+
21
+ ## 2. Decide
22
+
23
+ - Same failure twice in a row → it's the prompt, not the dice. Apply the fix.
24
+ - Different failures each time → the shot is too ambitious. Simplify it (split, tighten, slow down).
25
+ - 3+ rerolls with no improvement → go back to the DP and director: re-block the shot.
26
+
27
+ ## 3. Report format
28
+
29
+ ```
30
+ CLASS: Ignored action
31
+ EVIDENCE: in 4/4 clips the cup lands upright; no liquid leaves it
32
+ CHANGE (one): lead with the action — "Black coffee sloshes out of a tipping paper cup…" —
33
+ and cut the barista from the frame
34
+ KEEP: lens, light, seed policy
35
+ ```
36
+
37
+ ## A worked example
38
+
39
+ The upstream [ai-film-crew repository](https://github.com/HEOJUNFO/ai-film-crew) shows ten generations of one prompt in its `assets/ten-rerolls.png`:
40
+ *"A barista bumps a customer's elbow and a paper coffee cup slips and spills onto the café
41
+ floor next to white sneakers, slow motion, handheld close-up, warm morning light."*
42
+
43
+ Across ten rerolls the cup falls, rolls, or lands upright. The spill (the whole point)
44
+ barely happens. Diagnosis: **two things fighting** (the bump and the spill share one shot)
45
+ plus **ignored action** (the spill is the last clause). The crew fix is in the upstream repository's
46
+ `examples/coffee-spill-15s/SHOT_LIST.md`.
@@ -0,0 +1,38 @@
1
+ # Director
2
+
3
+ **Job:** decide what this video is *for* and what happens, beat by beat. Everyone else
4
+ executes your call.
5
+
6
+ ## Output (keep it under ~12 lines)
7
+
8
+ ```
9
+ LOGLINE: one sentence, subject + action + turn.
10
+ INTENT: what the viewer should do/feel/understand at the end (one line).
11
+ HOOK (0–1.5 s): the first frame. Must be legible with sound off.
12
+ BEATS:
13
+ 1. 0.0–2.5 s — …
14
+ 2. 2.5–6.0 s — …
15
+ …
16
+ ENDING: button / reveal / loop point.
17
+ ```
18
+
19
+ ## Rules
20
+
21
+ - **Open on motion or a question, never on an establishing shot.** In a vertical feed the
22
+ first 1.5 s decides whether anyone sees the rest.
23
+ - **One idea per video.** If you need "and also", it's two videos.
24
+ - **Beats are visible events,** not moods. "She realizes" is not a beat; "she stops
25
+ mid-sip and looks at the receipt" is.
26
+ - **Budget for the model.** A beat that needs complex physics (pouring, cloth tearing,
27
+ hands manipulating small objects, crowds interacting) gets its own short shot, framed
28
+ tight, with nothing else going on.
29
+ - **Loop if you can.** For short-form, an ending that cuts cleanly back to frame one
30
+ earns rewatches.
31
+ - Product videos: the product must be on screen, unobstructed, by beat 2. Hero it once,
32
+ in the gaffer's best light, with no hands in the hero shot. If hands are the point
33
+ (handmade, cooking, a demo), give them their own shots and keep the hero shot clean.
34
+
35
+ ## Questions to ask yourself before handing off
36
+
37
+ - Could a stranger describe this video in one sentence after watching it once?
38
+ - Which beat would I cut if I had to lose 3 seconds? (Cut it now.)
@@ -0,0 +1,28 @@
1
+ # Director of photography (DP)
2
+
3
+ **Job:** decide exactly what the camera sees in each shot and how it moves.
4
+
5
+ ## Output: one line per shot
6
+
7
+ ```
8
+ S1 ECU | 100mm macro | eye level | locked-off | 2.5 s
9
+ S2 MS | 35mm | low angle | slow push-in | 4 s
10
+ S3 WS | 24mm | high angle| handheld, drifting| 3 s
11
+ ```
12
+
13
+ Shot sizes: ECU (extreme close-up), CU, MCU (chest up), MS (waist up), MWS, WS (full body), EWS (establishing).
14
+
15
+ ## Rules
16
+
17
+ - **One camera move per shot.** Push-in, pull-out, pan, tilt, truck (sideways), pedestal
18
+ (up/down), orbit, handheld, or locked-off. Combining moves ("orbit while pushing in and
19
+ tilting up") is the #1 source of warped geometry.
20
+ - **Name the lens.** 24mm reads wide and energetic, 35–50mm natural, 85–135mm compressed
21
+ and intimate, macro for texture. Models respond to focal lengths.
22
+ - **Match move speed to duration.** A 3-second shot gets a *slow* move or none.
23
+ - **Tight on hard physics.** Pours, spills, hands and small objects: frame close, keep the
24
+ background simple, lock the camera or move it very slowly.
25
+ - **Vertical framing (9:16):** stack the composition vertically; keep faces in the upper
26
+ third and important action out of the bottom 15% (UI overlays live there).
27
+ - **Vary sizes between consecutive shots** (e.g. WS → CU), or the cut will look like a jump.
28
+ - Avoid "cinematic" as a camera instruction. It's a vibe, not a shot.
@@ -0,0 +1,34 @@
1
+ # Editor
2
+
3
+ **Job:** make the shots add up to a video: durations, order, cuts, pacing. You think about
4
+ the timeline, not the frame.
5
+
6
+ ## Output
7
+
8
+ ```
9
+ TOTAL: 15.0 s (sum of shots, trimmed)
10
+ S1 2.5 s → hard cut
11
+ S2 4.0 s → match cut on motion
12
+ S3 3.0 s → smash cut
13
+ …
14
+ GENERATE: each shot +1 s handles (so S2 is generated at 5 s, used at 4 s)
15
+ HOOK CHECK: frame 1 is S1 ECU, motion starts at 0.2 s ✅
16
+ LOOP: last frame of S5 matches S1 composition ✅/❌
17
+ ```
18
+
19
+ ## Rules
20
+
21
+ - **Fit the model.** Every shot must be ≤ the model's max clip length (see
22
+ `references/model-prompting.md`). If a beat needs longer, split it into two shots with a
23
+ change of angle.
24
+ - **Generate long, use short.** Plan 0.5–1 s of handles at each end. The first and last
25
+ frames of AI clips are often the weakest.
26
+ - **Fixed-length models** (only preset lengths such as 5 s / 10 s): generate at the
27
+ shortest preset and pick the strongest section. A 2.5 s shot uses the best 2.5 s of a
28
+ 5 s clip; note which section in the timeline.
29
+ - **Short-form pacing:** 1.5–3 s per shot is normal; a 6 s static shot kills retention
30
+ unless something is happening in it.
31
+ - **Cut on action.** If S1 ends with a hand moving right, S2 should start with motion
32
+ continuing right.
33
+ - **Text goes in the edit,** not the prompt. Note captions/supers here with timings.
34
+ - Call out any shot that exists only for coverage. Coverage costs generations.
@@ -0,0 +1,30 @@
1
+ # Gaffer
2
+
3
+ **Job:** light the scene so it looks intentional and stays consistent between shots.
4
+
5
+ ## Output
6
+
7
+ ```
8
+ TIME / SOURCE: late afternoon sun through west window (motivated)
9
+ KEY: camera-left, 45°, soft
10
+ FILL: low, bounce from white tabletop
11
+ RIM / BACK: warm sun edge on hair
12
+ COLOR TEMP: warm key ~3200K vs cool ambient ~5600K
13
+ CONTRAST: medium-high, deep shadows
14
+ PRACTICALS: pendant bulbs visible in background, slightly blown
15
+ LOOK: 35mm film, fine grain, mild halation
16
+ ```
17
+
18
+ ## Rules
19
+
20
+ - **Motivate the light.** Say where it comes from (window, neon sign, streetlight,
21
+ monitor glow). Unmotivated "dramatic lighting" gives you random results.
22
+ - **Same key direction in every shot of a scene,** or the cut breaks continuity.
23
+ - **Contrast beats brightness.** Flat, evenly lit prompts are what make AI video look
24
+ like AI video. Ask for shadows.
25
+ - Color: pick one warm/cool contrast and hold it. Write it in plain words plus a
26
+ temperature if useful.
27
+ - Night scenes: name the sources (sodium streetlight, phone screen, neon). "Dark" alone
28
+ gets you murk.
29
+ - Products: soft key, clean rim to separate from background, a highlight that shows the
30
+ material (gloss, brushed metal, glass).
@@ -0,0 +1,43 @@
1
+ # Production designer
2
+
3
+ **Job:** make the world consistent. You write the **continuity bible**: the exact words
4
+ every other role must paste, verbatim, whenever a character, prop or location appears.
5
+
6
+ Video models have no memory between clips. The *only* continuity you get is identical
7
+ wording. Paraphrasing a character ("a woman in a red coat" → "the lady in crimson")
8
+ gives you a different person.
9
+
10
+ ## Output
11
+
12
+ ```
13
+ CHARACTERS
14
+ C1 <age range> <build> <hair: length, color, style> <skin tone> <face detail>,
15
+ wearing <top, color, material> and <bottom>, <one distinctive accessory>
16
+ LOCATIONS
17
+ L1 <place type>, <era/style>, <3 concrete set details>, <floor/wall materials>
18
+ PROPS
19
+ P1 <object>, <material>, <color>, <size cue>, <state: new/used/half-full…>
20
+ PALETTE
21
+ 3–5 colors, named plainly ("mustard yellow, teal, off-white")
22
+ ```
23
+
24
+ Every entry gets two versions:
25
+ - **FULL** — the whole description, for shots where the whole subject is in frame.
26
+ - **TIGHT** — only what a close-up can see (e.g. `C1-TIGHT: weathered hands, short
27
+ clean nails, a thin silver ring, sleeves of a faded olive sweatshirt pushed up`).
28
+
29
+ Close-ups use TIGHT verbatim; wider shots use FULL verbatim. Pasting a whole-person
30
+ description into an ECU of hands drags the rest of the person (and the set) into frame.
31
+
32
+ ## Rules
33
+
34
+ - 20–35 words per character. Concrete nouns and colors, no adjectives like "beautiful".
35
+ - One **distinctive anchor** per character (a yellow beanie, a scar, round glasses).
36
+ Anchors survive model drift better than faces do.
37
+ - Avoid real people, brands and logos. Describe the *type* ("a white leather low-top
38
+ sneaker") not the brand.
39
+ - Props that matter to the story get a state ("a paper cup, lid off, full to the brim
40
+ with black coffee"). State is what makes the action physically possible.
41
+ - Keep locations simple enough to re-generate: 3 set details, not 12.
42
+ - If the user supplies a reference image, write the bible *from the image* so the text
43
+ and the image agree.
@@ -0,0 +1,35 @@
1
+ # Script supervisor
2
+
3
+ **Job:** protect continuity and catch the shots that will fail *before* anyone spends a
4
+ generation on them. You have veto power: any shot you flag gets rewritten.
5
+
6
+ ## Checklist (run on every shot)
7
+
8
+ **Continuity**
9
+ - [ ] Every recurring character/prop/location is pasted verbatim from the continuity bible.
10
+ - [ ] Key light direction and color temperature match the rest of the scene.
11
+ - [ ] Screen direction is consistent (subject moving left→right keeps moving left→right).
12
+ - [ ] Props are in the right state (the cup that spilled in S2 isn't full in S3).
13
+
14
+ **Feasibility**
15
+ - [ ] One subject action, one camera move.
16
+ - [ ] Duration ≤ model max, with handles.
17
+ - [ ] No readable text, logos, UI or signage in frame (unless the model handles text).
18
+ - [ ] Hard physics (liquids, cloth, hands with small objects, multiple people touching) is
19
+ framed tight, isolated, and given a simple background.
20
+ - [ ] Nothing depends on a specific real person's likeness or a trademark.
21
+ - [ ] Counts are small: "two dogs" works better than "five dogs".
22
+
23
+ **Unslop** (see `references/unslop.md`)
24
+ - [ ] No empty quality words ("stunning, 8k, masterpiece, hyper-realistic, cinematic").
25
+ - [ ] No mood-only instructions; every feeling is translated into something visible.
26
+ - [ ] Skin, materials and motion have texture and imperfection specified where it matters.
27
+
28
+ ## Output
29
+
30
+ ```
31
+ S2 ⚠️ two actions (pours AND turns to customer) → split into S2a / S2b
32
+ S4 ⚠️ sign text "OPEN" in frame → remove, add in edit
33
+ S3 ✅
34
+ HIGHEST RISK: S2a (liquid physics). Reroll plan: tighten to ECU, lock camera.
35
+ ```
@@ -0,0 +1,23 @@
1
+ # Sound
2
+
3
+ **Job:** plan what the audience hears. Run this role only if the target model generates
4
+ audio, or the user will add music/SFX in the edit.
5
+
6
+ ## Output
7
+
8
+ ```
9
+ MUSIC: <genre, tempo in BPM, energy curve> (added in edit)
10
+ S1 SFX: ceramic clink, café murmur (low)
11
+ S2 DIALOGUE: C1: "Not again." (quiet, deadpan)
12
+ S3 SFX: liquid splash, sneaker squeak
13
+ ```
14
+
15
+ ## Rules
16
+
17
+ - **Audio-capable models:** put spoken lines in double quotes with the speaker named, keep
18
+ lines under ~8 words per shot, and name 1–2 SFX plus ambience. Too many sound cues
19
+ produce mush.
20
+ - **Silent models:** don't write sound into the prompt at all. It wastes tokens and can
21
+ drift the visuals. Put sound in the edit notes.
22
+ - Cut points should land on beats of the music (tell the editor the BPM).
23
+ - Short-form: design for sound-off first. If a line is essential, it also goes in a caption.
@@ -0,0 +1,38 @@
1
+ # SHOT LIST — <title>
2
+
3
+ **Format:** <aspect> · <total length> · target model: <model>
4
+ **Mode:** text-to-video | image-to-video (reference: <file/description>)
5
+ **Brand / product:** <name, or "none given — generic">
6
+ **Logline:** <one sentence>
7
+
8
+ ## Crew notes
9
+ **Director** — intent, hook, beats
10
+ **Production designer** — continuity bible (C1…, L1…, P1…)
11
+ **DP / Gaffer** — look summary in two lines
12
+ **Editor** — timeline summary
13
+ **Sound** — (if applicable)
14
+ **Script supervisor** — flags resolved
15
+
16
+ ## Shots
17
+ | # | Time | Size · Lens · Move | Action (one) | Gen length | Risk |
18
+ |---|---|---|---|---|---|
19
+ | S1 | 0.0–2.5 | ECU · 100mm · locked | … | 4 s | low |
20
+
21
+ ## Prompts
22
+
23
+ ### S1
24
+ ```
25
+ <prompt>
26
+ ```
27
+ Negative (if supported): `<negative prompt>`
28
+
29
+ ## Edit notes
30
+ - Captions / supers: <text> @ <time>
31
+ - Music / SFX: <cue> @ <time>
32
+
33
+ ## Reroll plan
34
+ | Shot | Likely failure | Change before reroll |
35
+ |---|---|---|
36
+ | S1 | … | … |
37
+
38
+ **Highest-risk shot:** S? — <why>
@@ -0,0 +1,29 @@
1
+ # Unslop: why AI video looks like AI video, and what to write instead
2
+
3
+ | Slop signal | Usual cause in the prompt | Write instead |
4
+ |---|---|---|
5
+ | Plastic, poreless skin | "beautiful", "flawless", "perfect skin" | "visible pores, slight shine on the forehead, faint under-eye shadows" |
6
+ | Everything evenly lit | no light source named | a motivated key ("hard sun through blinds, camera-left") and deep shadows |
7
+ | Floaty slow-motion drift | no speed given, "cinematic" | real-time speed, or a stated speed ("normal speed", "2x slow motion") |
8
+ | Camera wandering aimlessly | no camera instruction | one named move, or "locked-off tripod shot" |
9
+ | Morphing hands / objects | complex hand action, wide framing | tight framing, simple grip, one object, slow action |
10
+ | Faces changing between shots | paraphrased character descriptions | verbatim continuity-bible descriptors, or image-to-video from one reference |
11
+ | Oversaturated, HDR-ish color | "vibrant", "8k", "ultra HD" | a film look ("Kodak Portra 400, soft contrast, fine grain") and a limited palette |
12
+ | Symmetrical stock-footage framing | no composition choice | a lens, an angle and an off-center subject ("subject in left third") |
13
+ | Gibberish text | signage, labels, UI in frame | no readable text in frame; add text in the edit |
14
+ | Nothing actually happens | a mood instead of an action | one visible, physical action with a start and an end |
15
+
16
+ ## Words that add nothing
17
+
18
+ `stunning, masterpiece, best quality, 8k, 4k, ultra-detailed, hyper-realistic, award-winning, trending, epic, cinematic (alone), breathtaking`
19
+
20
+ Delete them. They don't hurt much on their own, but they push out words that would help.
21
+
22
+ ## Words that tend to help
23
+
24
+ - A **lens** (24mm, 50mm, 85mm, macro)
25
+ - A **camera move** (slow push-in, locked-off, handheld)
26
+ - A **light source** (window light, sodium streetlight, overhead fluorescent)
27
+ - A **film stock or look** (35mm film grain, Super 8, VHS camcorder, iPhone front camera)
28
+ - **Imperfection** (scuffed, fingerprints, wrinkled, condensation, frayed)
29
+ - **Real-time physics cues** (splashes, drips, recoils, bounces)
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: testdriver-e2e-testing
3
+ description: "Build E2E tests with TestDriver.ai, the AI code reviewer that runs every pull request in a real desktop sandbox, finds bugs, and builds regression tests"
4
+ category: testing
5
+ risk: safe
6
+ source: community
7
+ source_repo: testdriverai/testdriverai
8
+ source_type: official
9
+ date_added: "2026-09-24"
10
+ author: testdriverai
11
+ tags: [testing, e2e, qa, automation, computer-use]
12
+ tools: [claude, cursor, gemini]
13
+ license: "Apache-2.0"
14
+ license_source: "https://github.com/testdriverai/testdriverai/blob/main/LICENSE"
15
+ ---
16
+
17
+ # TestDriver End-to-End Testing
18
+
19
+ ## Overview
20
+
21
+ [TestDriver](https://testdriver.ai) is an AI code reviewer that actually runs your app. It automatically runs every pull request in a real desktop sandbox, finds bugs, and builds regression tests. Tests control browsers and native applications using natural language element descriptions and AI vision, and run as Vitest suites. This skill teaches an agent how to author, run, and debug TestDriver tests.
22
+
23
+ ## When to Use This Skill
24
+
25
+ - Use when you need to write an end-to-end test for a web or desktop application
26
+ - Use when automating a UI workflow that has no stable selectors (canvas, Electron, native apps)
27
+ - Use when the user asks to verify that a page or flow works ("check if the login page works")
28
+ - Use when debugging a failing TestDriver test
29
+
30
+ ## How It Works
31
+
32
+ ### Step 1: Set up the project
33
+
34
+ ```bash
35
+ npx testdriverai init
36
+ ```
37
+
38
+ This scaffolds `package.json`, example tests, `vitest.config.mjs`, and a GitHub Actions workflow. The user must set `TD_API_KEY` in `.env` (get a key at https://console.testdriver.ai/team).
39
+
40
+ ### Step 2: Write a test
41
+
42
+ Tests are Vitest suites using the TestDriver hooks:
43
+
44
+ ```javascript
45
+ import { describe, expect, it } from "vitest";
46
+ import { TestDriver } from "testdriverai/vitest/hooks";
47
+
48
+ describe("Login", () => {
49
+ it("signs in successfully", async (context) => {
50
+ const testdriver = TestDriver(context);
51
+ await testdriver.provision.chrome({ url: "https://example.com/login" });
52
+
53
+ const email = await testdriver.find("email input field");
54
+ await email.click();
55
+ await testdriver.type("user@example.com");
56
+
57
+ const submit = await testdriver.find("Sign In button");
58
+ await submit.click();
59
+
60
+ const result = await testdriver.assert("the dashboard is visible");
61
+ expect(result).toBeTruthy();
62
+ });
63
+ });
64
+ ```
65
+
66
+ ### Step 3: Run and iterate
67
+
68
+ ```bash
69
+ vitest run tests/login.test.mjs
70
+ ```
71
+
72
+ Screenshots are captured automatically before and after every command and saved to `.testdriver/screenshots/`, named with the source line number for easy debugging.
73
+
74
+ ## Examples
75
+
76
+ ### Example 1: Testing a desktop (Electron) app
77
+
78
+ ```javascript
79
+ await testdriver.provision.electron({ appPath: "./dist/my-app" });
80
+ const menu = await testdriver.find("File menu in the menu bar");
81
+ await menu.click();
82
+ ```
83
+
84
+ ### Example 2: Waiting for slow elements
85
+
86
+ ```javascript
87
+ const done = await testdriver.find("Loading complete indicator", { timeout: 30000 });
88
+ await done.click();
89
+ ```
90
+
91
+ ## Best Practices
92
+
93
+ - ✅ Use specific element descriptions ("blue Sign In button in the header", not "button")
94
+ - ✅ Set both `testTimeout` and `hookTimeout` to 900000 in `vitest.config.mjs`
95
+ - ✅ Add `assert()` calls for verifiable pass/fail conditions
96
+ - ✅ Always `await` every TestDriver call
97
+ - ❌ Do not use `npx vitest`; run `vitest run` directly
98
+ - ❌ Do not rely on CSS selectors; TestDriver locates elements visually
99
+
100
+ ## Limitations
101
+
102
+ - Requires a TestDriver API key (`TD_API_KEY`) and network access to provision sandboxes.
103
+ - Only works with Vitest as the test runner.
104
+ - This skill does not replace environment-specific validation, testing, or expert review.
105
+
106
+ ## Security & Safety Notes
107
+
108
+ - `npx testdriverai init` writes project files to the current directory; run it only in a project you intend to modify.
109
+ - The `TD_API_KEY` credential belongs in `.env` (gitignored by the scaffold). Never commit it.
110
+ - Tests execute inside an isolated remote sandbox, not on the local machine.
111
+
112
+ ## Common Pitfalls
113
+
114
+ - **Problem:** Cleanup hooks fail with a 10s timeout.
115
+ **Solution:** Set `hookTimeout: 900000` in `vitest.config.mjs`; sandbox teardown and recording uploads take longer than Vitest's default.
116
+ - **Problem:** Scrolling does nothing.
117
+ **Solution:** An input field has focus. Press Escape or click the page background first, then scroll.
118
+
119
+ ## Related Skills
120
+
121
+ - `@webapp-testing` - Playwright-based alternative for local web apps with stable DOM selectors
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-skills-collection",
3
- "version": "4.0.73",
3
+ "version": "4.0.74",
4
4
  "description": "OpenCode CLI plugin that automatically downloads and keeps skills up to date.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/skills_index.json CHANGED
@@ -22486,6 +22486,39 @@
22486
22486
  "reasons": []
22487
22487
  }
22488
22488
  },
22489
+ {
22490
+ "id": "film-crew",
22491
+ "path": "skills/film-crew",
22492
+ "category": "media",
22493
+ "name": "film-crew",
22494
+ "description": "Turn a one-line AI video idea into a shot list and per-shot, model-ready prompts via a film crew (director, DP, gaffer, editor, script supervisor). Also fixes failing video prompts and diagnoses bad clips before a reroll. Works with Wan, LTX, Kling, Veo, Seedance, Hailuo, Runway.",
22495
+ "risk": "safe",
22496
+ "source": "https://github.com/HEOJUNFO/ai-film-crew/tree/533f61be2741c10932c6c86e47777cac9ffe3fe4/skills/film-crew",
22497
+ "date_added": "2026-09-25",
22498
+ "plugin": {
22499
+ "targets": {
22500
+ "codex": "supported",
22501
+ "claude": "supported"
22502
+ },
22503
+ "setup": {
22504
+ "type": "none",
22505
+ "summary": "",
22506
+ "docs": null
22507
+ },
22508
+ "reasons": []
22509
+ },
22510
+ "source_type": "official",
22511
+ "source_repo": "HEOJUNFO/ai-film-crew",
22512
+ "license": "MIT",
22513
+ "license_source": "https://github.com/HEOJUNFO/ai-film-crew/blob/533f61be2741c10932c6c86e47777cac9ffe3fe4/LICENSE",
22514
+ "tags": [
22515
+ "video",
22516
+ "text-to-video",
22517
+ "shot-list",
22518
+ "prompting",
22519
+ "film"
22520
+ ]
22521
+ },
22489
22522
  {
22490
22523
  "id": "find-bugs",
22491
22524
  "path": "skills/find-bugs",
@@ -36412,6 +36445,39 @@
36412
36445
  "reasons": []
36413
36446
  }
36414
36447
  },
36448
+ {
36449
+ "id": "mcp-dependency-drift-audit",
36450
+ "path": "skills/mcp-dependency-drift-audit",
36451
+ "category": "security",
36452
+ "name": "mcp-dependency-drift-audit",
36453
+ "description": "Statically audit MCP configs for mutable npm/npx package references before approval or CI, without executing discovered MCP servers.",
36454
+ "risk": "safe",
36455
+ "source": "https://github.com/tomelias10/mcp-drift-check",
36456
+ "date_added": "2026-09-25",
36457
+ "plugin": {
36458
+ "targets": {
36459
+ "codex": "supported",
36460
+ "claude": "supported"
36461
+ },
36462
+ "setup": {
36463
+ "type": "none",
36464
+ "summary": "",
36465
+ "docs": null
36466
+ },
36467
+ "reasons": []
36468
+ },
36469
+ "source_type": "community",
36470
+ "source_repo": "tomelias10/mcp-drift-check",
36471
+ "license": "MIT",
36472
+ "license_source": "https://github.com/tomelias10/mcp-drift-check/blob/v0/LICENSE",
36473
+ "tags": [
36474
+ "mcp",
36475
+ "ai-security",
36476
+ "supply-chain",
36477
+ "devsecops",
36478
+ "sarif"
36479
+ ]
36480
+ },
36415
36481
  {
36416
36482
  "id": "mcp-server-security",
36417
36483
  "path": "skills/mcp-server-security",
@@ -39102,6 +39168,137 @@
39102
39168
  "research"
39103
39169
  ]
39104
39170
  },
39171
+ {
39172
+ "id": "nexrad-mosaic-access",
39173
+ "path": "skills/nexrad-mosaic-access",
39174
+ "category": "data",
39175
+ "name": "nexrad-mosaic-access",
39176
+ "description": "Access official NOAA/NCEP MRMS radar and multisensor composites for a region and time; validate product, grid, domain, quality, timestamp, and provenance.",
39177
+ "risk": "safe",
39178
+ "source": "self",
39179
+ "date_added": "2026-09-25",
39180
+ "plugin": {
39181
+ "targets": {
39182
+ "codex": "supported",
39183
+ "claude": "supported"
39184
+ },
39185
+ "setup": {
39186
+ "type": "none",
39187
+ "summary": "",
39188
+ "docs": null
39189
+ },
39190
+ "reasons": []
39191
+ },
39192
+ "source_type": "self",
39193
+ "tags": [
39194
+ "weather",
39195
+ "nexrad",
39196
+ "mrms",
39197
+ "mosaic",
39198
+ "qpe",
39199
+ "vil",
39200
+ "vii",
39201
+ "mesh",
39202
+ "composite-products"
39203
+ ]
39204
+ },
39205
+ {
39206
+ "id": "nexrad-mosaic-construction",
39207
+ "path": "skills/nexrad-mosaic-construction",
39208
+ "category": "analysis",
39209
+ "name": "nexrad-mosaic-construction",
39210
+ "description": "Construct a quality-aware NEXRAD multi-radar mosaic from aligned single-site products with explicit coverage, beam geometry, quality weighting, overlap resolution, and provenance.",
39211
+ "risk": "safe",
39212
+ "source": "self",
39213
+ "date_added": "2026-09-25",
39214
+ "plugin": {
39215
+ "targets": {
39216
+ "codex": "supported",
39217
+ "claude": "supported"
39218
+ },
39219
+ "setup": {
39220
+ "type": "none",
39221
+ "summary": "",
39222
+ "docs": null
39223
+ },
39224
+ "reasons": []
39225
+ },
39226
+ "source_type": "self",
39227
+ "tags": [
39228
+ "weather",
39229
+ "nexrad",
39230
+ "mosaic",
39231
+ "multi-radar",
39232
+ "quality-weighting",
39233
+ "coverage",
39234
+ "overlap-resolution"
39235
+ ]
39236
+ },
39237
+ {
39238
+ "id": "nexrad-product-access",
39239
+ "path": "skills/nexrad-product-access",
39240
+ "category": "data",
39241
+ "name": "nexrad-product-access",
39242
+ "description": "Discover and access NEXRAD data for a selected radar site, time, product, or Level II moment using completed archive volumes, real-time chunks, or supported Level III sources with metadata validation.",
39243
+ "risk": "safe",
39244
+ "source": "self",
39245
+ "date_added": "2026-09-25",
39246
+ "plugin": {
39247
+ "targets": {
39248
+ "codex": "supported",
39249
+ "claude": "supported"
39250
+ },
39251
+ "setup": {
39252
+ "type": "none",
39253
+ "summary": "",
39254
+ "docs": null
39255
+ },
39256
+ "reasons": []
39257
+ },
39258
+ "source_type": "self",
39259
+ "tags": [
39260
+ "weather",
39261
+ "nexrad",
39262
+ "level-ii",
39263
+ "level-iii",
39264
+ "radar-products",
39265
+ "single-site",
39266
+ "aws-s3"
39267
+ ]
39268
+ },
39269
+ {
39270
+ "id": "nexrad-radar-visualization",
39271
+ "path": "skills/nexrad-radar-visualization",
39272
+ "category": "analysis",
39273
+ "name": "nexrad-radar-visualization",
39274
+ "description": "Plot NEXRAD Level II/III site scans and decoded radar mosaics with correct radar geometry, map grids, units, quality masks, timestamps, and provenance.",
39275
+ "risk": "safe",
39276
+ "source": "self",
39277
+ "date_added": "2026-09-25",
39278
+ "plugin": {
39279
+ "targets": {
39280
+ "codex": "supported",
39281
+ "claude": "supported"
39282
+ },
39283
+ "setup": {
39284
+ "type": "none",
39285
+ "summary": "",
39286
+ "docs": null
39287
+ },
39288
+ "reasons": []
39289
+ },
39290
+ "source_type": "self",
39291
+ "tags": [
39292
+ "weather",
39293
+ "nexrad",
39294
+ "radar-plotting",
39295
+ "ppi",
39296
+ "velocity",
39297
+ "dual-pol",
39298
+ "cross-section",
39299
+ "visualization"
39300
+ ]
39301
+ },
39105
39302
  {
39106
39303
  "id": "nextjs-app-router-patterns",
39107
39304
  "path": "skills/nextjs-app-router-patterns",
@@ -45046,6 +45243,40 @@
45046
45243
  "coaching"
45047
45244
  ]
45048
45245
  },
45246
+ {
45247
+ "id": "radar-satellite-analysis",
45248
+ "path": "skills/radar-satellite-analysis",
45249
+ "category": "analysis",
45250
+ "name": "radar-satellite-analysis",
45251
+ "description": "Interpret weather radar and satellite observations by validating product metadata and geometry, deriving storm and cloud structures, tracking evolution, and quantifying uncertainty.",
45252
+ "risk": "safe",
45253
+ "source": "self",
45254
+ "date_added": "2026-09-25",
45255
+ "plugin": {
45256
+ "targets": {
45257
+ "codex": "supported",
45258
+ "claude": "supported"
45259
+ },
45260
+ "setup": {
45261
+ "type": "none",
45262
+ "summary": "",
45263
+ "docs": null
45264
+ },
45265
+ "reasons": []
45266
+ },
45267
+ "source_type": "self",
45268
+ "tags": [
45269
+ "weather",
45270
+ "radar",
45271
+ "satellite",
45272
+ "nexrad",
45273
+ "goes",
45274
+ "nowcasting",
45275
+ "storm-analysis",
45276
+ "remote-sensing",
45277
+ "uncertainty"
45278
+ ]
45279
+ },
45049
45280
  {
45050
45281
  "id": "radare2",
45051
45282
  "path": "skills/radare2",
@@ -54070,6 +54301,39 @@
54070
54301
  "source_type": "community",
54071
54302
  "source_repo": "amElnagdy/guard-skills"
54072
54303
  },
54304
+ {
54305
+ "id": "testdriver-e2e-testing",
54306
+ "path": "skills/testdriver-e2e-testing",
54307
+ "category": "testing",
54308
+ "name": "testdriver-e2e-testing",
54309
+ "description": "Build E2E tests with TestDriver.ai, the AI code reviewer that runs every pull request in a real desktop sandbox, finds bugs, and builds regression tests",
54310
+ "risk": "safe",
54311
+ "source": "community",
54312
+ "date_added": "2026-09-24",
54313
+ "plugin": {
54314
+ "targets": {
54315
+ "codex": "supported",
54316
+ "claude": "supported"
54317
+ },
54318
+ "setup": {
54319
+ "type": "none",
54320
+ "summary": "",
54321
+ "docs": null
54322
+ },
54323
+ "reasons": []
54324
+ },
54325
+ "source_type": "official",
54326
+ "source_repo": "testdriverai/testdriverai",
54327
+ "license": "Apache-2.0",
54328
+ "license_source": "https://github.com/testdriverai/testdriverai/blob/main/LICENSE",
54329
+ "tags": [
54330
+ "testing",
54331
+ "e2e",
54332
+ "qa",
54333
+ "automation",
54334
+ "computer-use"
54335
+ ]
54336
+ },
54073
54337
  {
54074
54338
  "id": "testing-patterns",
54075
54339
  "path": "skills/testing-patterns",