Help us improve
Share bugs, ideas, or general feedback.
From summer
Generates 3-5 second seamless looping video clips for splash screens, title screen backgrounds, animated logo backdrops, and menu ambient loops. Uses the `ltx` model and wires output as a Godot VideoStreamPlayer.
npx claudepluginhub summerengine/summer-engine-agent --plugin summerHow this skill is triggered — by the user, by Claude, or both
Slash command
/summer:animated-loopassets/video/**menus/**ui/**This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
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 mode...
Generates non-interactive cutscene clips — opening scenes, story beats, character intros, endings — by locking the look with a reference image, image-to-video for 5-10s shots, optional TTS dialogue, and wiring as a VideoStreamPlayer with fade transitions.
Generates MP4 motion graphics videos from a content brief using HTML/CSS animations rendered frame-by-frame in headless Chromium via Playwright, assembled with FFmpeg.
Creates animated explainer videos with Kurzgesagt-inspired style using Remotion. Handles storyboarding, SVG animation, narration generation via edge-tts, and video rendering.
Share bugs, ideas, or general feedback.
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.
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.
video/trailer-shot.video/cinematic-cutscene.2d-assets/concept-art and use a TextureRect. A still is cheaper, lighter, and never seams.Tween or sprite sheets, not video.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?
If the user wants narrative motion (a character walking, a door opening), this is the wrong skill — route to video/cinematic-cutscene.
ltx first, alwaysFor 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.
| Model | Cost | Speed | When |
|---|---|---|---|
ltx | ~$0.10 | ~30s | Default. Use this. |
kling | ~$0.50 | 2-4 min | Only if the loop is the centerpiece of a premium splash and quality is visibly lacking on ltx |
kling-turbo | ~$0.30 | 1-2 min | Same as kling but faster |
veo3 | ~$1.00 | 3-5 min | Almost never — veo3 shines on dialogue/identity, neither matters for ambient loops |
minimax | ~$0.40 | 2-3 min | Stylized / anime aesthetic loops |
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.
summer_generate_image(
prompt="<subject>, ambient atmospheric scene, cinematic lighting, painterly, balanced composition with no clear focal action",
model="nano-banana-2",
options={ image_size: "landscape_16_9" }
)
For vertical menus (mobile portrait splash), generate at portrait and use aspectRatio="9:16" on the video call.
Loopable motion is continuous, ambient, directionless, or oscillating. Avoid anything with a beginning or end (a character entering, a sword swinging, a door closing).
Loopable verbs: drift, flicker, swirl, shimmer, sway, pulse, glow, rise, fall, wave, breathe, ripple.
Non-loopable verbs (avoid): walks, enters, appears, emerges, transforms, attacks, falls down, opens, closes.
summer_generate_video(
prompt="<subject from reference>, <ambient loopable motion>, slow continuous, looping, seamless, cinematic",
model="ltx",
imageUrl="<reference URL from step 3>",
duration=4,
aspectRatio="16:9",
options={ negative_prompt: "sudden movement, character action, narrative event, fade to black" }
)
The phrase "looping, seamless" in the prompt biases the model toward stable first/last frames. The negative prompt rules out narrative drift.
Watch the result and the seam (the cut between the last and first frame on replay). If the seam is visible:
slow continuous, returning motion, oscillating in the prompt.constant lighting, no time of day change.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.
summer_import_from_url(url="<fileUrl>", path="assets/video/loops/title_screen_bg.ogv")
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.
summer_add_node(parent="./TitleScreen", type="VideoStreamPlayer", name="BackgroundLoop")
summer_set_prop(path="./TitleScreen/BackgroundLoop", property="stream", value="res://assets/video/loops/title_screen_bg.ogv")
summer_set_prop(path="./TitleScreen/BackgroundLoop", property="autoplay", value=true)
summer_set_prop(path="./TitleScreen/BackgroundLoop", property="loop", value=true)
summer_set_prop(path="./TitleScreen/BackgroundLoop", property="expand", value=true)
summer_set_prop(path="./TitleScreen/BackgroundLoop", property="anchors_preset", value=15)
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).
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:
summer_set_prop(path="./TitleScreen/BackgroundLoop", property="volume_db", value=-80)
Score the menu separately with audio/music-track.
Pattern: <subject> + <ambient loopable motion> + <constant lighting> + "looping, seamless" + <stylistic anchor>. Keep under 40 words. Always pair with imageUrl.
| Goal | Model | Prompt | Cost | Duration |
|---|---|---|---|---|
| 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 |
| 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 |
| Splash — embers / sky | ltx | dusk sky with slow drifting embers rising upward across frame, deep blue gradient, looping, seamless, cinematic | $0.10 | 5s |
| 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 |
| 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 |
| Pause screen — slow rain | ltx | window pane with continuous gentle rain drops, blurred warm interior glow behind, looping, seamless, ambient | $0.10 | 4s |
| Title — anime sky | minimax | anime style cumulus clouds drifting slowly across a pastel sunset sky, soft, painterly, looping, seamless, Ghibli | $0.40 | 4s |
| 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 |
| Bad | Why it fails |
|---|---|
looping background of a hero walking through a forest | "Walking" is non-loopable — the hero arrives and departs. Replace with forest with fog drifting. |
dramatic title screen video | "Dramatic" implies narrative beats; loops want ambient. Specify the ambient motion. |
make it 10 seconds and loop | 10s loops show their seam. Drop to 5s. |
epic looping background trending on artstation | Adjective slop. The model already knows "cinematic"; the rest hurts. |
the door slowly opens, looping | Doors don't loop — they open once. The clip will hard-cut on replay. |
kling money on a loop. ltx is the right call ~95% of the time. The constraints favor the cheap model.loop=true on the VideoStreamPlayer. The clip will play once and freeze on the last frame.aspectRatio="16:9" for a portrait splash. Pillarboxed loops on a vertical splash look broken. Set 9:16 and frame portrait.VideoStreamPlayer natively wants Ogg Theora; .mp4 works with the bundled plugin but isn't guaranteed across platforms — confirm with summer_inspect_resource.aspectRatio="9:16", reference image at portrait, anchors preset 15 still works.high contrast cinematic in the prompt.VideoStreamPlayer siblings and crossfade between them with a Tween on a 0.5s overlap. Costs an extra GPU decode but hides the seam.If the Studio MCP server isn't running, route the user to the Studio web dashboard:
ltx, duration 4s, aspect ratio per target."looping, seamless"..ogv if needed, place under assets/video/loops/.Print the exact prompt + model + duration + aspect ratio so the user can paste it into the dashboard.
Once the loop is wired:
Loop
title_screen_bgis wired toTitleScreen/BackgroundLoopwith autoplay + loop. Next:
- Score the menu with
audio/music-track— a quiet ambient bed scored to the loop's mood.- For the logo and menu UI on top, hand off to
2d-assets/ui-graphics.- 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).- If the user wants a narrative intro that plays before the title loops, hand off to
video/cinematic-cutscene.
video/trailer-shot — punchy marketing footage.video/cinematic-cutscene — narrative cutscenes with dialogue.audio/music-track — score the menu.2d-assets/ui-graphics — logo, menu buttons, HUD that sits over the loop.2d-assets/concept-art — produce the reference still that anchors the loop.references/mcp-tools-reference.md — summer_generate_video parameter schema and error codes.