summer-engine 2.0.0 → 2.3.0
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.
- package/{marketplace.json → .claude-plugin/marketplace.json} +3 -3
- package/.claude-plugin/plugin.json +37 -4
- package/.codex-plugin/plugin.json +38 -5
- package/.cursor-plugin/plugin.json +37 -4
- package/.factory-plugin/plugin.json +20 -0
- package/.opencode/INSTALL.md +9 -3
- package/.opencode/plugins/summer.js +0 -2
- package/AGENTS.md +51 -0
- package/CLAUDE.md +5 -0
- package/GEMINI.md +56 -0
- package/README.md +211 -61
- package/_persona/summer/SKILL.md +113 -0
- package/dist/commands/install.js +2 -2
- package/dist/commands/setup.js +4 -0
- package/dist/commands/skills.js +115 -2
- package/dist/lib/agent-config.d.ts +2 -2
- package/dist/lib/agent-config.js +171 -5
- package/dist/lib/skills-registry.d.ts +290 -26
- package/dist/lib/skills-registry.js +503 -1
- package/dist/mcp/tools/generate-tools.js +101 -0
- package/gemini-extension.json +2 -2
- package/package.json +9 -3
- package/skills/2d-assets/character-portrait/SKILL.md +196 -0
- package/skills/2d-assets/concept-art/SKILL.md +152 -0
- package/skills/2d-assets/pixel-art/SKILL.md +180 -0
- package/skills/2d-assets/skybox-panorama/SKILL.md +207 -0
- package/skills/2d-assets/sprite-sheet/SKILL.md +239 -0
- package/skills/2d-assets/tileable-texture/SKILL.md +205 -0
- package/skills/2d-assets/ui-graphics/SKILL.md +210 -0
- package/skills/3d-assets/character-model/SKILL.md +225 -0
- package/skills/3d-assets/environment-kit/SKILL.md +164 -0
- package/skills/3d-assets/organic-model/SKILL.md +192 -0
- package/skills/3d-assets/prop-model/SKILL.md +133 -0
- package/skills/3d-assets/vehicle-model/SKILL.md +202 -0
- package/skills/ai-and-npcs/design-npc/SKILL.md +3 -1
- package/skills/animation/animation-tree/SKILL.md +260 -0
- package/skills/animation/facial-and-lipsync/SKILL.md +282 -0
- package/skills/animation/generate-motion/SKILL.md +129 -0
- package/skills/animation/procedural-animation/SKILL.md +234 -0
- package/skills/animation/retarget/SKILL.md +172 -0
- package/skills/asset-pipeline/asset-strategy/SKILL.md +102 -212
- package/skills/audio/adaptive-music/SKILL.md +326 -0
- package/skills/audio/ambient-bed/SKILL.md +278 -0
- package/skills/audio/music-track/SKILL.md +268 -0
- package/skills/audio/sound-effect/SKILL.md +237 -0
- package/skills/audio/voice-line/SKILL.md +253 -0
- package/skills/catalog.yaml +249 -3
- package/skills/video/animated-loop/SKILL.md +200 -0
- package/skills/video/cinematic-cutscene/SKILL.md +204 -0
- package/skills/video/trailer-shot/SKILL.md +203 -0
- package/skills/visual-effects/_building-blocks/additive-billboard-particles.md +28 -0
- package/skills/visual-effects/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
- package/skills/visual-effects/_building-blocks/trauma-shake-snippet.md +51 -0
- package/skills/visual-effects/{vfx → game-feel}/SKILL.md +1 -1
- package/skills/visual-effects/recipes/dissolve/SKILL.md +349 -0
- package/skills/visual-effects/recipes/fire/SKILL.md +387 -0
- package/skills/visual-effects/recipes/hit-spark/SKILL.md +330 -0
- package/skills/visual-effects/recipes/lightning/SKILL.md +372 -0
- package/skills/visual-effects/recipes/magic-glow/SKILL.md +377 -0
- package/skills/visual-effects/recipes/muzzle-flash/SKILL.md +326 -0
- package/skills/visual-effects/recipes/smoke/SKILL.md +381 -0
- package/skills/visual-effects/recipes/water-ripple/SKILL.md +340 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: animated-loop
|
|
3
|
+
description: Use when generating a short looping video clip — splash screen background, animated logo backdrop, idle title-screen footage, looping environment ambience. Output must loop seamlessly and is wired as a VideoStreamPlayer with autoplay and loop set true. Trigger on "looping background", "splash loop", "title screen video", "animated backdrop", "menu background loop", "ambient loop video", "looping clip", "seamless loop".
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
|
+
category: video
|
|
7
|
+
user-invocable: true
|
|
8
|
+
allowed-tools: Read Grep Glob Write Edit summer_generate_video summer_generate_image summer_search_assets summer_import_from_url summer_add_node summer_set_prop
|
|
9
|
+
paths: ["assets/video/**", "menus/**", "ui/**"]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# animated-loop — 3-5 Second Seamless Background Loop
|
|
13
|
+
|
|
14
|
+
A loop is the only video format that has to *not have* a beginning or end. The viewer sees it on the title screen for 30 seconds; if the seam between loop iterations is visible, the whole thing reads as broken. This skill exists to force the constraints that make seams invisible: keep the duration short (3-5s), keep the motion ambient (no narrative, no big camera moves), use the cheap fast model (`ltx`), and prompt for a composition where the first and last frames are functionally identical.
|
|
15
|
+
|
|
16
|
+
If the user wants a 5s punchy marketing shot, that's `video/trailer-shot`. If they want a 10s narrative cutscene, that's `video/cinematic-cutscene`. This skill is the one for video that has to *disappear* — atmosphere behind a logo, mood behind a menu, ambience behind a splash card.
|
|
17
|
+
|
|
18
|
+
## When to use
|
|
19
|
+
|
|
20
|
+
- "Looping background for the title screen."
|
|
21
|
+
- "Animated backdrop behind the logo on the splash."
|
|
22
|
+
- "Menu background — torchlit dungeon, just flicker and motes."
|
|
23
|
+
- "Looping ambient video for the pause screen."
|
|
24
|
+
- "Splash loop — fog over a forest."
|
|
25
|
+
- "Need a video that loops behind the level select."
|
|
26
|
+
|
|
27
|
+
## When NOT to use
|
|
28
|
+
|
|
29
|
+
- Marketing shot for a trailer (5-10s with punch) — `video/trailer-shot`.
|
|
30
|
+
- Narrative cutscene with a beginning and end — `video/cinematic-cutscene`.
|
|
31
|
+
- Static splash image — generate with `2d-assets/concept-art` and use a `TextureRect`. A still is cheaper, lighter, and never seams.
|
|
32
|
+
- UI element animation (icons, button states) — those are GDScript `Tween` or sprite sheets, not video.
|
|
33
|
+
- A 10-second shot you want to "loop". That seam will be visible. Either accept a hard cut every 10s (ugly) or generate a 3-5s clip designed to loop.
|
|
34
|
+
|
|
35
|
+
## Steps
|
|
36
|
+
|
|
37
|
+
### 1. Confirm the loop will be visible for a long time
|
|
38
|
+
|
|
39
|
+
> Quick check — this loop will play on a screen the user might stare at for 30+ seconds. That means the loop point must be invisible. I'll keep it 3-5s and prompt for ambient motion (drift, flicker, shimmer) rather than a narrative beat. OK?
|
|
40
|
+
|
|
41
|
+
If the user wants narrative motion (a character walking, a door opening), this is the wrong skill — route to `video/cinematic-cutscene`.
|
|
42
|
+
|
|
43
|
+
### 2. Pick the model — `ltx` first, always
|
|
44
|
+
|
|
45
|
+
For loops, `ltx` is correct ~95% of the time. It's $0.10, ~30s, and the constraints (short duration, ambient motion) are exactly the ones `ltx` handles best. Premium models add cost without adding loop quality.
|
|
46
|
+
|
|
47
|
+
| Model | Cost | Speed | When |
|
|
48
|
+
|---|---|---|---|
|
|
49
|
+
| `ltx` | ~$0.10 | ~30s | Default. Use this. |
|
|
50
|
+
| `kling` | ~$0.50 | 2-4 min | Only if the loop is the centerpiece of a premium splash and quality is visibly lacking on `ltx` |
|
|
51
|
+
| `kling-turbo` | ~$0.30 | 1-2 min | Same as `kling` but faster |
|
|
52
|
+
| `veo3` | ~$1.00 | 3-5 min | Almost never — `veo3` shines on dialogue/identity, neither matters for ambient loops |
|
|
53
|
+
| `minimax` | ~$0.40 | 2-3 min | Stylized / anime aesthetic loops |
|
|
54
|
+
|
|
55
|
+
### 3. Lock the look with a reference still
|
|
56
|
+
|
|
57
|
+
The reference still doubles as the *target* loop frame. Generate it deliberately — the video model's first and last frames will gravitate toward the reference, which is exactly what you want for a closing seam.
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
summer_generate_image(
|
|
61
|
+
prompt="<subject>, ambient atmospheric scene, cinematic lighting, painterly, balanced composition with no clear focal action",
|
|
62
|
+
model="nano-banana-2",
|
|
63
|
+
options={ image_size: "landscape_16_9" }
|
|
64
|
+
)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
For vertical menus (mobile portrait splash), generate at portrait and use `aspectRatio="9:16"` on the video call.
|
|
68
|
+
|
|
69
|
+
### 4. Prompt for loopable motion only
|
|
70
|
+
|
|
71
|
+
Loopable motion is **continuous, ambient, directionless, or oscillating**. Avoid anything with a beginning or end (a character entering, a sword swinging, a door closing).
|
|
72
|
+
|
|
73
|
+
Loopable verbs: `drift`, `flicker`, `swirl`, `shimmer`, `sway`, `pulse`, `glow`, `rise`, `fall`, `wave`, `breathe`, `ripple`.
|
|
74
|
+
|
|
75
|
+
Non-loopable verbs (avoid): `walks`, `enters`, `appears`, `emerges`, `transforms`, `attacks`, `falls down`, `opens`, `closes`.
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
summer_generate_video(
|
|
79
|
+
prompt="<subject from reference>, <ambient loopable motion>, slow continuous, looping, seamless, cinematic",
|
|
80
|
+
model="ltx",
|
|
81
|
+
imageUrl="<reference URL from step 3>",
|
|
82
|
+
duration=4,
|
|
83
|
+
aspectRatio="16:9",
|
|
84
|
+
options={ negative_prompt: "sudden movement, character action, narrative event, fade to black" }
|
|
85
|
+
)
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
The phrase **"looping, seamless"** in the prompt biases the model toward stable first/last frames. The negative prompt rules out narrative drift.
|
|
89
|
+
|
|
90
|
+
### 5. Inspect the seam
|
|
91
|
+
|
|
92
|
+
Watch the result and the seam (the cut between the last and first frame on replay). If the seam is visible:
|
|
93
|
+
|
|
94
|
+
- **Most common cause:** something moved across the frame and didn't return (a particle drifted off-screen, a cloud moved). Regenerate with `slow continuous, returning motion, oscillating` in the prompt.
|
|
95
|
+
- **Second cause:** lighting drifted. Regenerate with `constant lighting, no time of day change`.
|
|
96
|
+
- **Third cause:** the duration was too long. Drop from 5s to 3s and regenerate.
|
|
97
|
+
|
|
98
|
+
If three regenerations don't seam-close, accept a small crossfade in the engine: set up two `VideoStreamPlayer` nodes and crossfade between them via a `Tween`. This is a fallback, not the goal.
|
|
99
|
+
|
|
100
|
+
### 6. Import and wire as a looping VideoStreamPlayer
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
summer_import_from_url(url="<fileUrl>", path="assets/video/loops/title_screen_bg.ogv")
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Note: Godot's `VideoStreamPlayer` natively plays Ogg Theora (`.ogv`); for `.mp4` you may need to transcode or rely on the engine's bundled WebM/MP4 plugin. Studio's import pipeline handles transcoding when the path extension is set explicitly — confirm the resulting resource type with `summer_inspect_resource` if playback fails.
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
summer_add_node(parent="./TitleScreen", type="VideoStreamPlayer", name="BackgroundLoop")
|
|
110
|
+
summer_set_prop(path="./TitleScreen/BackgroundLoop", property="stream", value="res://assets/video/loops/title_screen_bg.ogv")
|
|
111
|
+
summer_set_prop(path="./TitleScreen/BackgroundLoop", property="autoplay", value=true)
|
|
112
|
+
summer_set_prop(path="./TitleScreen/BackgroundLoop", property="loop", value=true)
|
|
113
|
+
summer_set_prop(path="./TitleScreen/BackgroundLoop", property="expand", value=true)
|
|
114
|
+
summer_set_prop(path="./TitleScreen/BackgroundLoop", property="anchors_preset", value=15)
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Anchors preset 15 is "full rect" — the loop fills the menu. Place the logo and menu buttons as children *above* the `VideoStreamPlayer` in the tree (Godot draws siblings in tree order; later siblings render on top).
|
|
118
|
+
|
|
119
|
+
### 7. Mute the audio track
|
|
120
|
+
|
|
121
|
+
Loops should never have a baked audio track that loops with them — the audio seam will be even more obvious than the visual one. The video models don't generate audio anyway, but if you ever import a clip that has audio, mute it:
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
summer_set_prop(path="./TitleScreen/BackgroundLoop", property="volume_db", value=-80)
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Score the menu separately with `audio/music-track`.
|
|
128
|
+
|
|
129
|
+
## Reference card — prompts that work
|
|
130
|
+
|
|
131
|
+
Pattern: `<subject> + <ambient loopable motion> + <constant lighting> + "looping, seamless" + <stylistic anchor>`. Keep under 40 words. Always pair with `imageUrl`.
|
|
132
|
+
|
|
133
|
+
| Goal | Model | Prompt | Cost | Duration |
|
|
134
|
+
|---|---|---|---|---|
|
|
135
|
+
| Title menu — fog forest | `ltx` | `dense pine forest in low fog, fog drifting slowly between trunks, soft moonlight, ambient particles rising, looping, seamless, cinematic painterly` | $0.10 | 4s |
|
|
136
|
+
| Title menu — dungeon torch | `ltx` | `stone dungeon corridor lit by a single torch, flame flickering steadily, dust motes drifting in the light cone, looping, seamless` | $0.10 | 4s |
|
|
137
|
+
| Splash — embers / sky | `ltx` | `dusk sky with slow drifting embers rising upward across frame, deep blue gradient, looping, seamless, cinematic` | $0.10 | 5s |
|
|
138
|
+
| Logo backdrop — magic runes | `ltx` | `dark surface with glowing blue runes pulsing softly in slow rhythm, faint shimmer, no narrative motion, looping, seamless` | $0.10 | 3s |
|
|
139
|
+
| Menu — underwater | `ltx` | `underwater scene with caustic light dancing on a sandy floor, slow drifting bubbles, gentle current sway on kelp, looping, seamless` | $0.10 | 5s |
|
|
140
|
+
| Pause screen — slow rain | `ltx` | `window pane with continuous gentle rain drops, blurred warm interior glow behind, looping, seamless, ambient` | $0.10 | 4s |
|
|
141
|
+
| Title — anime sky | `minimax` | `anime style cumulus clouds drifting slowly across a pastel sunset sky, soft, painterly, looping, seamless, Ghibli` | $0.40 | 4s |
|
|
142
|
+
| Premium splash centerpiece | `kling` | `dragon silhouette breathing in profile against a vast sunset sky, only the chest rising and falling and clouds drifting, looping, seamless` | $0.50 | 5s |
|
|
143
|
+
|
|
144
|
+
### Bad prompts and why
|
|
145
|
+
|
|
146
|
+
| Bad | Why it fails |
|
|
147
|
+
|---|---|
|
|
148
|
+
| `looping background of a hero walking through a forest` | "Walking" is non-loopable — the hero arrives and departs. Replace with `forest with fog drifting`. |
|
|
149
|
+
| `dramatic title screen video` | "Dramatic" implies narrative beats; loops want ambient. Specify the ambient motion. |
|
|
150
|
+
| `make it 10 seconds and loop` | 10s loops show their seam. Drop to 5s. |
|
|
151
|
+
| `epic looping background trending on artstation` | Adjective slop. The model already knows "cinematic"; the rest hurts. |
|
|
152
|
+
| `the door slowly opens, looping` | Doors don't loop — they open once. The clip will hard-cut on replay. |
|
|
153
|
+
|
|
154
|
+
## Anti-patterns
|
|
155
|
+
|
|
156
|
+
- **Asking the model for a 10s loop.** Past ~6s, identity drifts and the seam shows. Cap at 5s.
|
|
157
|
+
- **Spending `kling` money on a loop.** `ltx` is the right call ~95% of the time. The constraints favor the cheap model.
|
|
158
|
+
- **Prompting narrative motion.** "Hero draws sword" doesn't loop. Use ambient verbs.
|
|
159
|
+
- **Forgetting `loop=true` on the `VideoStreamPlayer`.** The clip will play once and freeze on the last frame.
|
|
160
|
+
- **Forgetting to mute baked audio.** If audio is on, the loop point becomes audible even if it's invisible.
|
|
161
|
+
- **Using `aspectRatio="16:9"` for a portrait splash.** Pillarboxed loops on a vertical splash look broken. Set `9:16` and frame portrait.
|
|
162
|
+
- **Importing without transcoding to a Godot-friendly container.** `VideoStreamPlayer` natively wants Ogg Theora; `.mp4` works with the bundled plugin but isn't guaranteed across platforms — confirm with `summer_inspect_resource`.
|
|
163
|
+
|
|
164
|
+
## Edge cases
|
|
165
|
+
|
|
166
|
+
- **Splash loop must be tiny in build size.** Loops compress aggressively because of low motion. Target ≤2MB by exporting at 720p, low bitrate, in DaVinci. Studio's import doesn't re-encode by default.
|
|
167
|
+
- **Mobile portrait splash.** `aspectRatio="9:16"`, reference image at portrait, anchors preset 15 still works.
|
|
168
|
+
- **Loop must sync to a music beat.** The video model doesn't know your BPM. Generate at the duration matching one bar at the menu music tempo (e.g. 120 BPM × 4 beats = 2s, or 8 beats = 4s) and confirm visually.
|
|
169
|
+
- **Loop is behind translucent UI.** Generate with extra contrast headroom — the model tends toward mid-grey, and translucent UI on mid-grey reads muddy. Push for `high contrast cinematic` in the prompt.
|
|
170
|
+
- **Loop seam still visible after 3 regens.** Set up two `VideoStreamPlayer` siblings and crossfade between them with a `Tween` on a 0.5s overlap. Costs an extra GPU decode but hides the seam.
|
|
171
|
+
|
|
172
|
+
## Fallback (no MCP)
|
|
173
|
+
|
|
174
|
+
If the Studio MCP server isn't running, route the user to the Studio web dashboard:
|
|
175
|
+
|
|
176
|
+
1. Image tab → generate the reference still (the loop's "neutral frame").
|
|
177
|
+
2. Video tab → image-to-video with `ltx`, duration 4s, aspect ratio per target.
|
|
178
|
+
3. Prompt with the loopable-motion vocabulary above and `"looping, seamless"`.
|
|
179
|
+
4. Download the result, transcode to `.ogv` if needed, place under `assets/video/loops/`.
|
|
180
|
+
|
|
181
|
+
Print the exact prompt + model + duration + aspect ratio so the user can paste it into the dashboard.
|
|
182
|
+
|
|
183
|
+
## Handoff
|
|
184
|
+
|
|
185
|
+
Once the loop is wired:
|
|
186
|
+
|
|
187
|
+
> Loop `title_screen_bg` is wired to `TitleScreen/BackgroundLoop` with autoplay + loop. Next:
|
|
188
|
+
> - Score the menu with `audio/music-track` — a quiet ambient bed scored to the loop's mood.
|
|
189
|
+
> - For the logo and menu UI on top, hand off to `2d-assets/ui-graphics`.
|
|
190
|
+
> - If the user wants a punchy 5s shot for the trailer using the same look, hand off to `video/trailer-shot` (reuse the reference image).
|
|
191
|
+
> - If the user wants a narrative intro that plays *before* the title loops, hand off to `video/cinematic-cutscene`.
|
|
192
|
+
|
|
193
|
+
## See also
|
|
194
|
+
|
|
195
|
+
- `video/trailer-shot` — punchy marketing footage.
|
|
196
|
+
- `video/cinematic-cutscene` — narrative cutscenes with dialogue.
|
|
197
|
+
- `audio/music-track` — score the menu.
|
|
198
|
+
- `2d-assets/ui-graphics` — logo, menu buttons, HUD that sits over the loop.
|
|
199
|
+
- `2d-assets/concept-art` — produce the reference still that anchors the loop.
|
|
200
|
+
- `_shared/mcp-tools-reference.md` — `summer_generate_video` parameter schema and error codes.
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cinematic-cutscene
|
|
3
|
+
description: Use when generating a non-interactive cutscene clip — opening scene, story beat, character intro, ending. Locks the look with a reference image, image-to-videos a 5-10s shot, optionally adds TTS dialogue, and wires it as a VideoStreamPlayer that fades in/out. Trigger on "cutscene", "intro cinematic", "opening scene", "ending cinematic", "story beat video", "character intro video", "in-engine cinematic", "non-playable scene".
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
|
+
category: video
|
|
7
|
+
user-invocable: true
|
|
8
|
+
allowed-tools: Read Grep Glob Write Edit summer_generate_video summer_generate_image summer_generate_audio summer_search_assets summer_import_from_url summer_add_node summer_set_prop
|
|
9
|
+
paths: ["assets/video/**", "cinematics/**", "trailers/**"]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# cinematic-cutscene — Locked-Look Story Beat in 5-10 Seconds
|
|
13
|
+
|
|
14
|
+
A cutscene is a non-interactive video clip the game plays back at a fixed moment — opening, story beat, character intro, ending. Quality is dominated by **two things**: continuity (the character on screen looks like the character in the game) and shot length (every clip past 10s drifts in identity, hands, and physics). This skill enforces both — generate a reference image first to lock the look, then image-to-video each shot, then chain shots in sequence rather than asking the model for one long take.
|
|
15
|
+
|
|
16
|
+
If the user wants 5 seconds of marketing footage, that's `video/trailer-shot`. If they want a 3-second seamless background loop, that's `video/animated-loop`. This skill is for narrative beats with a defined start, middle, and end — usually with dialogue or VO.
|
|
17
|
+
|
|
18
|
+
## When to use
|
|
19
|
+
|
|
20
|
+
- "Generate the opening cinematic for the game."
|
|
21
|
+
- "I need a cutscene where the witch turns to the player and warns them about the curse."
|
|
22
|
+
- "Make a 10-second character intro for the boss."
|
|
23
|
+
- "Add an ending sequence after the player defeats the dragon."
|
|
24
|
+
- "Cinematic where the village burns and the protagonist runs."
|
|
25
|
+
- The user has a defined moment with story content — not a vibe loop, not a marketing splash.
|
|
26
|
+
|
|
27
|
+
## When NOT to use
|
|
28
|
+
|
|
29
|
+
- "5-second slow-mo combat shot for the trailer" — `video/trailer-shot`.
|
|
30
|
+
- "Looping splash screen background" — `video/animated-loop`.
|
|
31
|
+
- "Animated logo backdrop on the title screen" — `video/animated-loop`.
|
|
32
|
+
- Real-time in-engine cinematic with the actual gameplay characters and camera — that's a Godot AnimationPlayer / Timeline job, not generated video. Route to `summer:scene-composition`.
|
|
33
|
+
- Voice-only narration over a static image — generate the dialogue with `summer_generate_audio` and use a static `TextureRect`, no video needed.
|
|
34
|
+
|
|
35
|
+
## Steps
|
|
36
|
+
|
|
37
|
+
### 1. Read the soul file and any prior cutscenes
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
Read .summer/GameSoul.md
|
|
41
|
+
summer_search_assets(query="cutscene", filter={ kind: "video" })
|
|
42
|
+
summer_search_assets(query="<character name> reference", filter={ kind: "image" })
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
If a reference image of the character already exists from a prior `concept-art` or `character-portrait` run, **reuse it** as the `imageUrl` — that single decision is the difference between the character looking like themselves and looking like a stranger.
|
|
46
|
+
|
|
47
|
+
### 2. Plan the shot list
|
|
48
|
+
|
|
49
|
+
Cutscenes longer than 10 seconds are **multiple shots**, not one take. Ask the user to break it down:
|
|
50
|
+
|
|
51
|
+
> Want this as one 10s shot, or three shots (e.g. wide → close on face → reaction)? Each shot is 5-10s. I'll generate a reference image once, then image-to-video each shot off of it.
|
|
52
|
+
|
|
53
|
+
Default if the user is vague: **3 shots, 5s each, ~$1.50 total on kling**. Confirm before spending.
|
|
54
|
+
|
|
55
|
+
### 3. Lock the look — generate a reference image first
|
|
56
|
+
|
|
57
|
+
For any character or hero scene, generate a reference still with `summer_generate_image` *before* generating video. This still drives `imageUrl` on every subsequent shot, so the character is consistent across cuts.
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
summer_generate_image(
|
|
61
|
+
prompt="<subject>, <setting>, cinematic lighting, film still, <art style from GameSoul.md>",
|
|
62
|
+
model="nano-banana-2",
|
|
63
|
+
options={ image_size: "landscape_16_9" }
|
|
64
|
+
)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Show the user the still and confirm it's the right look before video-ing it. Regenerating a $0.05 still beats regenerating a $0.50 video.
|
|
68
|
+
|
|
69
|
+
### 4. Pick the model
|
|
70
|
+
|
|
71
|
+
| Model | Cost | Speed | When |
|
|
72
|
+
|---|---|---|---|
|
|
73
|
+
| `ltx` | ~$0.10 | ~30s | Iteration, blocking shots, B-roll, throwaway tests |
|
|
74
|
+
| `kling` | ~$0.50 | 2-4 min | Hero shots, character cutscenes, anything the player will sit and watch |
|
|
75
|
+
| `kling-turbo` | ~$0.30 | 1-2 min | Same as kling when iteration speed matters more than the last 10% of quality |
|
|
76
|
+
| `veo3` | ~$1.00 | 3-5 min | Pitch decks, premium dialogue scenes with synced lip motion, short-form ad |
|
|
77
|
+
| `minimax` | ~$0.40 | 2-3 min | Stylized / anime-leaning content; better at non-photoreal looks than kling |
|
|
78
|
+
|
|
79
|
+
Default policy: **`ltx` first** to validate the prompt and shot framing. If it lands the composition but quality is rough, escalate to `kling`. Only reach for `veo3` if dialogue lip-sync matters and the user has approved the cost.
|
|
80
|
+
|
|
81
|
+
### 5. Generate each shot
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
summer_generate_video(
|
|
85
|
+
prompt="<subject does <action>, <camera move>, <lighting>, cinematic, 16mm film grain>",
|
|
86
|
+
model="kling",
|
|
87
|
+
imageUrl="<reference image fileUrl from step 3>",
|
|
88
|
+
duration=5,
|
|
89
|
+
aspectRatio="16:9"
|
|
90
|
+
)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Returns `{ asset: { fileUrl } }`. Show the user the URL and ask:
|
|
94
|
+
|
|
95
|
+
> Shot 1 of 3 done. Land or regenerate? If land, I'll move to shot 2.
|
|
96
|
+
|
|
97
|
+
### 6. Generate dialogue audio (if the scene has dialogue)
|
|
98
|
+
|
|
99
|
+
Cutscene dialogue is TTS, not in the video model. The video model can render mouth motion that *looks* like talking, but the audio comes from `summer_generate_audio`. Generate it separately and the editor (Godot's AnimationPlayer or your `cinematics/` controller scene) syncs them.
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
summer_generate_audio(
|
|
103
|
+
capability="text_to_speech",
|
|
104
|
+
text="They'll come for you at dawn. Run while you can.",
|
|
105
|
+
voiceId="<from audio bible — see audio/voice-line>"
|
|
106
|
+
)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Lip-sync caveat: if the video shows the character clearly mouthing words and the audio is a different cadence, viewers notice. Either (a) keep the camera off the character's face during dialogue, (b) accept the asynchrony for a stylized look, or (c) use `veo3` and prompt the dialogue text directly into the video prompt for synced motion.
|
|
110
|
+
|
|
111
|
+
### 7. Import and wire as a VideoStreamPlayer
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
summer_import_from_url(url="<fileUrl>", path="assets/video/cinematics/intro_shot_01.mp4")
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Build a controller scene at `cinematics/Intro.tscn`:
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
summer_add_node(parent=".", type="Control", name="Intro")
|
|
121
|
+
summer_add_node(parent="./Intro", type="ColorRect", name="Fade") # black, alpha 1.0 → 0.0
|
|
122
|
+
summer_add_node(parent="./Intro", type="VideoStreamPlayer", name="Video")
|
|
123
|
+
summer_set_prop(path="./Intro/Video", property="stream", value="res://assets/video/cinematics/intro_shot_01.mp4")
|
|
124
|
+
summer_set_prop(path="./Intro/Video", property="autoplay", value=true)
|
|
125
|
+
summer_set_prop(path="./Intro/Video", property="expand", value=true)
|
|
126
|
+
summer_set_prop(path="./Intro/Fade", property="anchors_preset", value=15)
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Attach a `Tween` script that fades the `ColorRect` from black to clear over 0.5s on `_ready`, then back to black when `Video.finished` fires, then `queue_free()`s the scene. For multi-shot cutscenes, queue the next `VideoStreamPlayer` in the `finished` signal handler.
|
|
130
|
+
|
|
131
|
+
For dialogue, add an `AudioStreamPlayer` sibling with the TTS clip and call `play()` in `_ready` after a small delay matching where the line lands in the video.
|
|
132
|
+
|
|
133
|
+
## Reference card — prompts that work
|
|
134
|
+
|
|
135
|
+
Pattern: `<subject> + <action> + <camera move> + <lighting> + <stylistic anchor>`. Keep prompts under 50 words; over-prompting confuses the model. Always pair with `imageUrl` to lock the character.
|
|
136
|
+
|
|
137
|
+
| Goal | Model | Prompt | Cost | Duration |
|
|
138
|
+
|---|---|---|---|---|
|
|
139
|
+
| Opening establishing shot | `kling` | `wide shot of a fog-shrouded medieval village at dawn, slow dolly-in toward the church spire, warm low sun, cinematic, anamorphic lens flare` | $0.50 | 5s |
|
|
140
|
+
| Character intro (hero turns to camera) | `kling` | `young witch with raven on shoulder turns slowly toward camera, candlelit interior, shallow depth of field, cinematic film still` | $0.50 | 5s |
|
|
141
|
+
| Dialogue close-up (no synced lips) | `kling` | `close-up of a grizzled knight, eyes downcast then looking up, firelight on his face, dust motes, 16mm film grain` | $0.50 | 5s |
|
|
142
|
+
| Dialogue close-up (synced lips) | `veo3` | `close-up of the witch saying "they will come for you at dawn", candlelight, cinematic, shallow DOF` | $1.00 | 5s |
|
|
143
|
+
| Action beat (village burns) | `kling` | `medium wide of a thatched village engulfed in flames at night, embers rising, silhouettes running through smoke, hand-held camera, cinematic` | $0.50 | 5s |
|
|
144
|
+
| Ending shot (hero walks away) | `kling` | `low wide shot of a cloaked figure walking away across a blasted plain at sunset, slow truck-back, golden hour, dust on the wind` | $0.50 | 5s |
|
|
145
|
+
| Throwaway iteration / blocking | `ltx` | same prompt as above | $0.10 | 5s |
|
|
146
|
+
| Anime / stylized cutscene | `minimax` | `anime-style young swordsman draws blade and steps forward, sakura petals, dramatic wind, Studio Ghibli soft painterly` | $0.40 | 5s |
|
|
147
|
+
|
|
148
|
+
### Bad prompts and why
|
|
149
|
+
|
|
150
|
+
| Bad | Why it fails |
|
|
151
|
+
|---|---|
|
|
152
|
+
| `epic cutscene of the hero defeating the boss` | No subject, no shot, no camera. Returns a generic action montage. |
|
|
153
|
+
| `the hero walks into the throne room, kneels before the king, draws his sword and says I refuse to serve, then walks out` | Five events in one prompt. Model picks one (badly) or tries all and renders mush. Split into three shots. |
|
|
154
|
+
| `cinematic 4k masterpiece trending on artstation` | Adjective slop. The model already knows "cinematic"; the rest is dead weight. |
|
|
155
|
+
| `make the character look exactly like in the game` | Words can't anchor identity. Use `imageUrl`. |
|
|
156
|
+
| `the camera does a complex handheld weaving move through the crowd` | Video models render simple camera moves (pan, tilt, dolly, truck) reliably and complex moves badly. Pick one verb. |
|
|
157
|
+
|
|
158
|
+
## Anti-patterns
|
|
159
|
+
|
|
160
|
+
- **Generating a 10s shot when you should chain two 5s shots.** Identity, hand consistency, and physics drift every additional second past ~6s. Two 5s shots cut together look better and cost the same.
|
|
161
|
+
- **Skipping the reference image.** Generating four character cutscenes from text prompts alone produces four different-looking people. Always lock the look with `summer_generate_image` first, then `imageUrl` every subsequent video call.
|
|
162
|
+
- **Asking the video model to render dialogue without `veo3`.** `kling` and `ltx` will animate mouths but the motion does not match any audio. Use `veo3` if dialogue is on-camera, or keep the camera off the speaker.
|
|
163
|
+
- **Using `kling` for blocking iterations.** Burn $0.10 on `ltx` to validate framing and prompt; only spend $0.50 once the composition lands.
|
|
164
|
+
- **Putting the cutscene on a `VideoStreamPlayer` without a fade.** Cuts straight from gameplay to video are jarring. Always wrap in a `ColorRect` fade in/out.
|
|
165
|
+
- **Forgetting to import the file.** `summer_generate_video` returns a `fileUrl` on Cloudinary; until you call `summer_import_from_url`, it isn't in `res://` and the scene can't reference it.
|
|
166
|
+
|
|
167
|
+
## Edge cases
|
|
168
|
+
|
|
169
|
+
- **Vertical cutscene for a mobile target.** Set `aspectRatio="9:16"`. Reference image must also be 9:16 — generate it with `image_size: "portrait_16_9"` or the framing will crop wrong on the video.
|
|
170
|
+
- **Cutscene must match an in-engine character precisely.** No video model will hit pixel-perfect identity. Either (a) accept the artistic license, (b) render the cutscene in-engine with `AnimationPlayer` instead of generating it, or (c) generate a reference image *from* a screenshot of the in-engine character (image-to-image first, then image-to-video).
|
|
171
|
+
- **Dialogue is too long for a 5s shot.** Either trim the line, or split: 5s of speaker, 5s of listener reaction (cheaper because the listener doesn't need synced lips).
|
|
172
|
+
- **Cutscene needs to play and the player isn't looking.** Pause the gameplay timer, push a `Control` overlay with the `VideoStreamPlayer`, restore on finish.
|
|
173
|
+
- **Multi-shot continuity.** Use the same reference image as `imageUrl` across all shots. If lighting differs by shot, generate one reference per lighting setup, not one per shot.
|
|
174
|
+
|
|
175
|
+
## Fallback (no MCP)
|
|
176
|
+
|
|
177
|
+
If the Studio MCP server isn't running, the user can do all of this through the Studio web dashboard at the Summer Engine cloud console:
|
|
178
|
+
|
|
179
|
+
1. Generate a reference image in the Image tab.
|
|
180
|
+
2. Open the Video tab, paste the reference URL into the image-to-video field.
|
|
181
|
+
3. Set model, duration, aspect ratio, and prompt as listed above.
|
|
182
|
+
4. Download the `.mp4` and drop it into `assets/video/cinematics/` in the project, then re-import via the Godot editor.
|
|
183
|
+
|
|
184
|
+
Print the exact prompt + model + duration + aspect ratio so the user can paste it into the dashboard verbatim.
|
|
185
|
+
|
|
186
|
+
## Handoff
|
|
187
|
+
|
|
188
|
+
Once the cutscene is generated and wired:
|
|
189
|
+
|
|
190
|
+
> Cutscene `intro` wired at `cinematics/Intro.tscn` with fade in/out and `Video.finished` chained to scene change. Next:
|
|
191
|
+
> - Add the dialogue track with `audio/voice-line` if you haven't yet.
|
|
192
|
+
> - Score the moment with `audio/music-track` — a cutscene without music feels like a placeholder.
|
|
193
|
+
> - For the boss reveal cutscene, run this skill again with the same reference image to keep the witch identity stable.
|
|
194
|
+
> - If you want a 5s "money shot" version for marketing, run `video/trailer-shot` against the same reference.
|
|
195
|
+
|
|
196
|
+
## See also
|
|
197
|
+
|
|
198
|
+
- `video/trailer-shot` — marketing footage, 5-10s, maximum visual punch.
|
|
199
|
+
- `video/animated-loop` — seamless looping background clips.
|
|
200
|
+
- `audio/voice-line` — TTS dialogue used inside cutscenes.
|
|
201
|
+
- `audio/music-track` — score the cutscene.
|
|
202
|
+
- `2d-assets/concept-art` — generate the reference image axis if no character reference exists yet.
|
|
203
|
+
- `2d-assets/character-portrait` — produce a high-fidelity locked character portrait for use as `imageUrl`.
|
|
204
|
+
- `_shared/mcp-tools-reference.md` — `summer_generate_video` parameter schema and error codes.
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: trailer-shot
|
|
3
|
+
description: Use when generating marketing or trailer footage — slow-mo combat, dramatic establishing shots, hero beats, splash screens, pitch-deck B-roll. Optimizes for maximum visual punch in 5-10 seconds. Trigger on "trailer", "marketing footage", "Steam capsule video", "splash screen", "hero shot", "pitch deck clip", "promo clip", "money shot", "B-roll".
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
|
+
category: video
|
|
7
|
+
user-invocable: true
|
|
8
|
+
allowed-tools: Read Grep Glob Write Edit summer_generate_video summer_generate_image summer_search_assets summer_import_from_url summer_add_node summer_set_prop
|
|
9
|
+
paths: ["assets/video/**", "trailers/**", "marketing/**"]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# trailer-shot — Loud, Confident, 5-10 Seconds of Punch
|
|
13
|
+
|
|
14
|
+
A trailer shot is not a cutscene and not a loop. It is a single, deliberately-composed beat designed to live inside an edit — Steam capsule video, social cut, pitch-deck reel, Discord teaser, Twitter promo. Every shot has to earn its slot in 5 seconds or less because viewer attention drops past that. This skill produces those shots one at a time, with strong composition references and trailer-grade prompting, then hands the user off to a non-linear editor (DaVinci Resolve, Premiere, CapCut) to chain them. **Studio doesn't ship a video editor** — generation is the part this skill owns; the cutting is yours.
|
|
15
|
+
|
|
16
|
+
If the user is generating a non-interactive narrative beat with dialogue, that's `video/cinematic-cutscene`. If they want a seamless background loop for a splash screen, that's `video/animated-loop`. This skill is for the punchy stuff — the kind of shot that ends up on the Steam page or in the first 10 seconds of a launch trailer.
|
|
17
|
+
|
|
18
|
+
## When to use
|
|
19
|
+
|
|
20
|
+
- "Generate a slow-mo combat shot for the trailer."
|
|
21
|
+
- "I need a hero shot of the boss for the Steam capsule."
|
|
22
|
+
- "Dramatic establishing shot of the kingdom for the pitch deck."
|
|
23
|
+
- "Make a splash-screen video for the title menu."
|
|
24
|
+
- "Some B-roll of the swamp environment."
|
|
25
|
+
- "Money shot — wide low-angle of the dragon roaring at sunset."
|
|
26
|
+
|
|
27
|
+
## When NOT to use
|
|
28
|
+
|
|
29
|
+
- Multi-shot story sequence with dialogue — `video/cinematic-cutscene`.
|
|
30
|
+
- Seamless looping background — `video/animated-loop`.
|
|
31
|
+
- Static marketing key art — `2d-assets/concept-art` then `2d-assets/character-portrait`.
|
|
32
|
+
- Animated GIF of UI — that's a screen recording, not a generated video.
|
|
33
|
+
- A literal Steam trailer (the assembled cut) — generate the shots here, then take them to your NLE.
|
|
34
|
+
|
|
35
|
+
## Steps
|
|
36
|
+
|
|
37
|
+
### 1. Pick the shot
|
|
38
|
+
|
|
39
|
+
Trailer shots fall into a small number of archetypes. Pick one before prompting:
|
|
40
|
+
|
|
41
|
+
| Archetype | Composition | When |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| **Hero close-up** | Tight on the protagonist or boss, low angle | Reveal a character |
|
|
44
|
+
| **Slow-mo combat** | Mid shot, time dilation, frozen impact | Action sells |
|
|
45
|
+
| **Establishing wide** | Wide landscape, slow dolly-in | Sell a world |
|
|
46
|
+
| **Dolly-in on detail** | Push toward a key prop or face | Build tension |
|
|
47
|
+
| **Whip pan reveal** | Fast pan, lands on a beat | Reveal a turn |
|
|
48
|
+
| **Low-angle hero** | Looking up at the subject, sky framing | Make the subject feel large |
|
|
49
|
+
| **Splash card** | Static composition, atmospheric motion only | Title cards, logos |
|
|
50
|
+
|
|
51
|
+
State the archetype and composition out loud before generating: "I'll do a low-angle hero shot of the boss, slow tilt-up, golden hour. OK?"
|
|
52
|
+
|
|
53
|
+
### 2. Lock the look with a reference image (when subject identity matters)
|
|
54
|
+
|
|
55
|
+
For shots featuring a specific character, weapon, or environment, generate a reference still first and pass it as `imageUrl`. Without it, the boss in your trailer looks different from the boss in the game.
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
summer_generate_image(
|
|
59
|
+
prompt="<subject>, <archetype-driven framing>, cinematic, dramatic lighting, film still",
|
|
60
|
+
model="nano-banana-2",
|
|
61
|
+
options={ image_size: "landscape_16_9" }
|
|
62
|
+
)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
For pure environment / abstract / VFX shots, you can skip this and prompt text-to-video directly.
|
|
66
|
+
|
|
67
|
+
### 3. Pick the model
|
|
68
|
+
|
|
69
|
+
| Model | Cost | Speed | When |
|
|
70
|
+
|---|---|---|---|
|
|
71
|
+
| `kling` | ~$0.50 | 2-4 min | Default for trailer hero shots — best motion + composition |
|
|
72
|
+
| `kling-turbo` | ~$0.30 | 1-2 min | Same look as kling, faster, slight quality dip |
|
|
73
|
+
| `veo3` | ~$1.00 | 3-5 min | Pitch deck for investors, the one shot that has to be perfect, premium social ad |
|
|
74
|
+
| `ltx` | ~$0.10 | ~30s | B-roll, throwaway tests, blocking the composition before committing |
|
|
75
|
+
| `minimax` | ~$0.40 | 2-3 min | Anime / stylized trailer looks |
|
|
76
|
+
|
|
77
|
+
Default: **`ltx` first to block the composition, then `kling` for the final**. For the *one* hero shot that drives the Steam page, escalate to `veo3` only if `kling` failed twice.
|
|
78
|
+
|
|
79
|
+
### 4. Generate the shot
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
summer_generate_video(
|
|
83
|
+
prompt="<archetype framing>, <subject>, <action>, <camera move>, <lighting>, <film grain / lens / stylistic anchor>",
|
|
84
|
+
model="kling",
|
|
85
|
+
imageUrl="<optional reference URL from step 2>",
|
|
86
|
+
duration=5,
|
|
87
|
+
aspectRatio="16:9"
|
|
88
|
+
)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
For vertical social (TikTok, Reels, Shorts): `aspectRatio="9:16"` and frame the subject vertically in your reference image.
|
|
92
|
+
|
|
93
|
+
For square (Instagram feed): `aspectRatio="1:1"`.
|
|
94
|
+
|
|
95
|
+
### 5. Review against trailer logic
|
|
96
|
+
|
|
97
|
+
Show the user the result and ask the trailer-specific questions:
|
|
98
|
+
|
|
99
|
+
> Shot delivered. Three checks:
|
|
100
|
+
> 1. Does it read in 2 seconds with the sound off? (Trailer viewers are scrubbing.)
|
|
101
|
+
> 2. Is the subject in the frame's golden zone or buried in noise?
|
|
102
|
+
> 3. Would this shot survive being preceded by a hard cut and followed by a hard cut?
|
|
103
|
+
>
|
|
104
|
+
> Land or regenerate?
|
|
105
|
+
|
|
106
|
+
If "regenerate", revise *one* axis (camera move, lighting, or framing) — don't rewrite the whole prompt. Iteration converges.
|
|
107
|
+
|
|
108
|
+
### 6. Import for archive (optional)
|
|
109
|
+
|
|
110
|
+
Trailer footage usually lives on the user's local disk and goes straight into the NLE. But for shots that double as in-engine splash content, import:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
summer_import_from_url(url="<fileUrl>", path="assets/video/trailers/hero_boss_reveal.mp4")
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
For pure trailer use (DaVinci / Premiere), the user can grab the `fileUrl` and download directly.
|
|
117
|
+
|
|
118
|
+
### 7. Hand off to the NLE
|
|
119
|
+
|
|
120
|
+
Studio does not ship a video editor. After all the shots land, tell the user:
|
|
121
|
+
|
|
122
|
+
> All 6 shots are at these URLs. Studio doesn't cut video. Drop these into DaVinci Resolve (free), Premiere, or CapCut. Recommended order based on what we generated:
|
|
123
|
+
> 1. Establishing wide (cold open)
|
|
124
|
+
> 2. Hero close-up (subject reveal)
|
|
125
|
+
> 3-5. Action beats (slow-mo combat, environmental destruction)
|
|
126
|
+
> 6. Money shot (low-angle hero, ends on logo card)
|
|
127
|
+
>
|
|
128
|
+
> Score it with the music from `audio/music-track`. Add SFX hits on the cuts with `audio/sound-effect`.
|
|
129
|
+
|
|
130
|
+
## Reference card — prompts that work
|
|
131
|
+
|
|
132
|
+
Pattern: `<archetype framing> + <subject> + <action verb> + <camera move> + <lighting / time of day> + <stylistic anchor>`. Keep under 50 words. Anchor with a reference image whenever a specific character or asset appears.
|
|
133
|
+
|
|
134
|
+
| Goal | Model | Prompt | Cost | Duration |
|
|
135
|
+
|---|---|---|---|---|
|
|
136
|
+
| Hero boss reveal | `kling` | `low-angle hero shot of an armored dragon turning toward camera, slow tilt-up, volcanic backlight, embers in air, cinematic, anamorphic flare, 16mm grain` | $0.50 | 5s |
|
|
137
|
+
| Slow-mo combat impact | `kling` | `mid shot of a swordsman striking a parry, sparks fly, time-dilation slow motion, dust and motion blur, dramatic side-light, cinematic` | $0.50 | 5s |
|
|
138
|
+
| Establishing kingdom wide | `kling` | `wide aerial of a clifftop fortress at golden hour, slow dolly forward, low sun raking the towers, cinematic, anamorphic, faint heat haze` | $0.50 | 5s |
|
|
139
|
+
| Splash screen card | `kling` | `static composition of a lone hooded figure on a windswept ridge, only the cloak and grass moving, dusk, painterly cinematic, room for title text upper third` | $0.50 | 5s |
|
|
140
|
+
| Whip pan reveal | `kling` | `whip pan from left to right across a battlefield at night, lands on the protagonist standing alone among bodies, torches flickering, cinematic` | $0.50 | 5s |
|
|
141
|
+
| Detail dolly-in | `kling` | `slow dolly-in on a glowing rune-etched sword embedded in stone, motes of magic rising, blue-cold key light, shallow depth of field, cinematic` | $0.50 | 5s |
|
|
142
|
+
| Vertical social hero | `kling` | `vertical close-up of a young witch raising hands, magical wind, hair flowing, candle-warm key, cinematic, framed for 9:16` | $0.50 | 5s |
|
|
143
|
+
| Pitch-deck premium shot | `veo3` | `wide cinematic of a fleet of airships emerging through cloud cover at dawn, slow truck forward, golden god-rays, soaring orchestral cinematic` | $1.00 | 5s |
|
|
144
|
+
| Cheap B-roll iteration | `ltx` | `mid shot of a knight walking through fog, slow truck backward, dawn light, cinematic` | $0.10 | 5s |
|
|
145
|
+
| Anime style hero | `minimax` | `anime-style hero girl draws a katana in slow motion, sakura petals swirling, dramatic side-light, dynamic camera, Ghibli painterly` | $0.40 | 5s |
|
|
146
|
+
|
|
147
|
+
### Bad prompts and why
|
|
148
|
+
|
|
149
|
+
| Bad | Why it fails |
|
|
150
|
+
|---|---|
|
|
151
|
+
| `epic trailer shot of the boss` | No framing, no action, no camera. Returns a generic montage. |
|
|
152
|
+
| `the camera flies through the entire battlefield, sees the king, then the dragon, then the hero` | Three shots in one prompt. The model picks one badly. Generate three shots. |
|
|
153
|
+
| `cool cinematic with lots of explosions and combat` | Adjective stew. Pick one beat: "wide shot of a barricade exploding, debris arc into camera, slow-mo, side-lit". |
|
|
154
|
+
| `realistic 4k 60fps trending on artstation` | Trash modifiers. The model knows "cinematic" already; the rest is noise. |
|
|
155
|
+
| `the dragon roars at the hero and the hero strikes back` | Two characters interacting reliably fails — the model loses identity on the second one. Generate them in separate shots and intercut. |
|
|
156
|
+
|
|
157
|
+
## Anti-patterns
|
|
158
|
+
|
|
159
|
+
- **Trying to chain shots inside one video generation.** Each clip is one beat. The cut between shots is the editor's job, not the model's. A 10s prompt with three actions returns mush.
|
|
160
|
+
- **Skipping the reference image for the hero shot.** The boss in the Steam capsule must look like the boss in the game. Always lock identity with `imageUrl`.
|
|
161
|
+
- **Using `veo3` for B-roll.** Burn $0.10 on `ltx` for blocking and B-roll; reserve `veo3` for the one shot that has to be perfect.
|
|
162
|
+
- **Generating shots without composing the trailer first.** Make a 6-shot list before generating shot 1. Otherwise you'll generate shots that don't intercut.
|
|
163
|
+
- **Using `aspectRatio="16:9"` for vertical social.** TikTok / Reels / Shorts are `9:16`. Pillarboxed 16:9 reads as a desktop YouTube embed and gets demoted by the algorithm.
|
|
164
|
+
- **Forgetting that Studio doesn't cut video.** The user has to take the shots into an NLE. Tell them, don't pretend Studio can stitch.
|
|
165
|
+
- **Asking for "the camera does X then Y then Z".** Pick one camera move per shot.
|
|
166
|
+
|
|
167
|
+
## Edge cases
|
|
168
|
+
|
|
169
|
+
- **Steam capsule animated header (Steam asset).** Steam wants `.webm` at 616x353 or 1920x1080, ≤6s, 30fps, no audio, ≤4MB. Generate at 16:9, transcode in DaVinci, export `.webm` with VP9. The video model gives you the source; format conversion is on you.
|
|
170
|
+
- **Pitch deck for investors.** One shot, `veo3`, money composition (low-angle hero or wide establishing). Worth the $1.00.
|
|
171
|
+
- **Vertical for TikTok / Shorts.** `aspectRatio="9:16"`, reference image at portrait, frame the subject in the upper-middle so titles can sit at the bottom.
|
|
172
|
+
- **Subject is a UGC environment the player built.** Take a screenshot of the in-engine view, run it through `summer_generate_image` as `referenceImageUrl` to "upgrade" the look, then use that as the video reference. The model can stylize a screenshot; it can't invent the user's level.
|
|
173
|
+
- **Logo splash with motion graphics.** Generate a static logo card in `summer_generate_image` (or use the user's existing logo PNG), then prompt video as `static composition of <logo>, only background particles drifting, cinematic, room for title text` — keep the foreground motionless.
|
|
174
|
+
|
|
175
|
+
## Fallback (no MCP)
|
|
176
|
+
|
|
177
|
+
If the Studio MCP server isn't running, route the user to the Studio web dashboard:
|
|
178
|
+
|
|
179
|
+
1. Image tab → generate the reference still.
|
|
180
|
+
2. Video tab → image-to-video with the reference URL, model `kling`, duration 5s, aspect ratio per platform.
|
|
181
|
+
3. Download the `.mp4` directly into the user's editing project (DaVinci / Premiere / CapCut).
|
|
182
|
+
|
|
183
|
+
Print the exact prompt + model + duration + aspect ratio so the user can paste it into the dashboard verbatim.
|
|
184
|
+
|
|
185
|
+
## Handoff
|
|
186
|
+
|
|
187
|
+
Once the shots are generated:
|
|
188
|
+
|
|
189
|
+
> Generated 6 shots, ready for the cut. Next:
|
|
190
|
+
> - Take them into DaVinci Resolve (free) or Premiere. Studio doesn't cut video.
|
|
191
|
+
> - Score the trailer with `audio/music-track` — a 60-second trailer cue with a swell and a cold ending.
|
|
192
|
+
> - Add hit SFX on the cuts with `audio/sound-effect` (impact whooshes between shots).
|
|
193
|
+
> - For the title-card splash that ships in-engine, hand off to `video/animated-loop` with the established palette.
|
|
194
|
+
> - For a narrative beat inside the trailer (a 10s "story" segment), hand off to `video/cinematic-cutscene`.
|
|
195
|
+
|
|
196
|
+
## See also
|
|
197
|
+
|
|
198
|
+
- `video/cinematic-cutscene` — narrative beats with dialogue.
|
|
199
|
+
- `video/animated-loop` — seamless background clips for splash screens / title menus.
|
|
200
|
+
- `audio/music-track` — trailer score.
|
|
201
|
+
- `audio/sound-effect` — cut SFX (whooshes, impacts, stingers).
|
|
202
|
+
- `2d-assets/concept-art` — generate the reference image axis when no asset exists yet.
|
|
203
|
+
- `_shared/mcp-tools-reference.md` — `summer_generate_video` parameter schema and error codes.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Additive Billboard Particles — Canonical Material Settings
|
|
2
|
+
|
|
3
|
+
Reusable `BaseMaterial3D` configuration for additive particle billboards (motes, sparks, glow, ash). Used by `magic-glow`, optionally substitutable in `hit-spark` and `fire` if a custom shader is overkill.
|
|
4
|
+
|
|
5
|
+
## Settings
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
transparency: BaseMaterial3D.TRANSPARENCY_ALPHA
|
|
9
|
+
blend_mode: BaseMaterial3D.BLEND_MODE_ADD
|
|
10
|
+
shading_mode: BaseMaterial3D.SHADING_MODE_UNSHADED
|
|
11
|
+
billboard_mode: BaseMaterial3D.BILLBOARD_PARTICLES
|
|
12
|
+
emission_enabled: true
|
|
13
|
+
emission_energy_multiplier: 3.0 // 1.0–5.0 typical; bump for HDR bloom
|
|
14
|
+
disable_receive_shadows: true
|
|
15
|
+
shadow_to_opacity: false
|
|
16
|
+
no_depth_test: false // true only if particles must read on TOP of opaque geometry
|
|
17
|
+
albedo_color: Color(R, G, B, 1.0)
|
|
18
|
+
emission: Color(R, G, B) // usually same as albedo for single-color motes
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## When to use this vs a custom shader
|
|
22
|
+
|
|
23
|
+
- **Use this `BaseMaterial3D` config** when the effect is just a tinted soft-circle mote (magic glow, sparkles, dust). Less code, faster iteration, free Godot-managed billboard math.
|
|
24
|
+
- **Use a custom `ShaderMaterial`** when you need per-particle color ramps over `CUSTOM.x` age (fire), shape masks (muzzle flash star burst), or stretched streaks (hit-spark). Those can't be expressed in `BaseMaterial3D`.
|
|
25
|
+
|
|
26
|
+
## Performance note
|
|
27
|
+
|
|
28
|
+
Additive overdraw is fillrate-bound. Keep `draw_pass_1.size <= 0.2` for motes/sparks; larger quads at full additive intensity destroy mobile fillrate budgets fast.
|