Pitch video auto generation
Turn a product website URL (or a product description) into a real, finished MP4 pitch video in Apple WWDC launch style: AI-generated cinematic shots (liquid glass / luxury-tech CGI) via Atlas Cloud video models, AI-generated soundtrack, premium typography overlaid in post, auto-stitched with ffmpeg. Use whenever the user wants an actual video file for a product: "pitch video", "产品宣传视频", "生成一条视频", "宣传片成片", "WWDC 风格视频", "AI 生成产品视频", "出一条 30 秒的片子", or gives a product URL and asks for a video/film/广告片. This produces a real .mp4 by calling paid generation APIs — distinct from the apple-launch-video skill, which renders a free HTML animatic; prefer THIS skill when the deliverable is a video file, and mention the HTML animatic as a free preview option for the script.From its SKILL.md
npx -y skills add huangjie127/pitch-video-auto-generationAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 28 days oldThe repository was created 28 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
10.7 KB, ~2.7k tokens by cl100k_base, as published. Nobody here has run it
Product Pitch Video
Produce a finished ~30-second MP4: an Apple-launch-style product film whose visuals are generated shot-by-shot by Atlas Cloud video models, with an AI-generated instrumental soundtrack and crisp typography overlaid in post.
The pipeline (storyboard-first)
product URL ─▶ ① understand+derive ─▶ ② pitch script ─▶ ③ pitch.json
(belief/contribution) (beats+keyframes+motion)
─▶ ④ Phase A: keyframe stills ─▶ ⑤ HUMAN REVIEWS STORYBOARD ─▶ ⑥ Phase B: videos+stitch ─▶ final.mp4
(chained image gen, ~$0.3) (re-roll frames cheaply) (parallel, ~$2.7)
You do the creative work in ①–③; scripts/pipeline.mjs does all the machinery
(chained keyframe generation, parallel video generation, polling, download,
overlay rendering, ffmpeg stitching). Never hand-roll API calls or ffmpeg
commands — the scripts handle retries, resume, and cost reporting.
Why this shape:
- Shot-to-shot continuity comes from shared boundary keyframes: keyframe
K_i is shot i's last frame AND shot i+1's first frame. Each keyframe is
generated from the previous one in image-edit mode, so materials, lighting
and the star object carry through the whole film. Videos are generated with
first+last frame conditioning (
image+last_image), and adjacent shots then cut seamlessly (hard cuts, no crossfade needed). - Taste decisions happen at image prices. The storyboard gate (⑤) lets the user re-roll any composition for ~$0.04 before releasing the ~$2.7 video budget.
- AI video models cannot render text reliably, so prompts describe pure visuals (no text, no letters, no logos, no UI); all words go into overlays rendered by a headless browser at pixel-perfect quality.
- Everything is resumable: a crash or re-roll never re-bills completed work.
Classic mode (single video_prompt per shot, text-to-video, xfade transitions)
still works for quick drafts — just omit keyframes from pitch.json.
Prerequisites (check before starting)
ATLAS_CLOUD_API_KEY— env var, or.envfile in the working directory (ATLAS_CLOUD_API_KEY=...). If missing, ask the user for their key. Never write the key into any file that could be shared/committed except.env.- ffmpeg — on PATH, or set
FFMPEG_PATH, or place a build attools/ffmpeg/bin/ffmpeg.exerelative to the working directory. If absent on Windows, download the static build fromhttps://www.gyan.dev/ffmpeg/builds/ffmpeg-release-essentials.zipand unzip totools/ffmpeg/. - Chrome or Edge — used headless for typography overlays (auto-detected).
- Cost awareness: tell the user the estimate before generating. Default
30s film = 6 shots × 5s at 1080p ≈ $2.7 video + ~$0.15 music
(Seedance 2.0 ≈ $0.09/s). Testing/iteration? Use
--res 720pand/orseedance-2.0-mini(half price) first. The pipeline prints actual billed tokens at the end.
Workflow
-
Understand and derive. Two scrapes, complementary:
- Facts (text): WebFetch the URL for capabilities, numbers, price, tagline, tone of copy; grab the brand accent from the HTML (hex-frequency count works when compiled CSS has no semantic variables).
- Temperament (visual): screenshot the rendered page and READ it —
node <skill>/scripts/snap_page.mjs <url> --out page.png— then note dark/light feel, art direction (photographic? illustrated? abstract?), density vs whitespace, boldness. Text can't carry this, and it should steer the keyframe designs (an artful-dark brand tolerates bolder compositions than a clinical-light one).
Then run the derivation protocol in
references/pitch-script-guide.md: facts → what each removes for the user → the belief they point to → contribution sentences ("we did X, so you never Y"). The film argues the belief; it does not recite the feature list. -
Write the pitch script. Read
references/pitch-script-guide.md. Plan ~6 beats for 30s (belief → reveal → 2 contributions → testimony number → loop close). For each beat write the overlay copy (Apple voice, terse, full-width punctuation for Chinese) and the visual state the beat ends on — those end-states become the keyframes. -
Design the keyframe chain + motion. Read
references/shot-prompt-language.md, and pick the brand's archetype fromreferences/brand-archetypes.md(dev-infra / palette-identity creative / hardware / luxury / fintech / wellness / entertainment / B2B SaaS) — it gives the world, texture words, palette policy, tempo and metaphor vocabulary as a starting recipe. N shots need N+1 keyframes where K_i = end of shot i = start of shot i+1, all featuring one continuous star object. K0's prompt carries the full style; later keyframes describe only the delta from the previous frame. Each shot gets amotion_prompt(pure motion + camera; frames own the composition). No text in any prompt. -
Assemble
pitch.json(schema below) in the working directory. -
Run Phase A — storyboard.
node <skill>/scripts/pipeline.mjs pitch.json --out pitch-buildAll keyframes are generated in ONE batch call to a sequential image model (
bytedance/seedream-v5.0-lite/sequential) — cross-frame consistency is the model's job, and the whole set lands in a few minutes. The pipeline writespitch-build/storyboard.htmland stops for review. Show the storyboard to the user. To re-roll one frame: tweak its prompt, deletepitch-build/keyframes/<id>.png, rerun — single missing frames regenerate in edit mode with the previous frame as reference and thekeyframe_styleanchor appended, so re-rolls don't drift. Akeyframe_stylerestraint anchor in pitch.json is mandatory — see the keyframe section ofreferences/shot-prompt-language.mdfor the block and why image models need it. -
Run Phase B — film. Rerun the same command once the storyboard is approved. Shots generate in parallel (first+last frame conditioned, 1–5 min each), overlays render, hard-cut stitch, soundtrack mixed →
pitch-build/final.mp4. Resumable at every step; to redo one shot deleteshots/<id>.mp4+work/<id>.mp4and rerun. Individual stages run alone (gen_image.mjs,gen_video.mjs,gen_music.mjs,overlay.mjs,stitch.mjs);references/atlas-api.mdhas the raw API for debugging. -
Review and deliver. Extract a few frames with ffmpeg to sanity-check (text legibility, cut seamlessness at shared keyframes). Report the actual cost printed by the pipeline. Offer targeted re-rolls rather than full regeneration.
pitch.json schema (v2 — storyboard mode)
{
"product": "Aura",
"accent": "#7F72F7",
"ratio": "16:9",
"resolution": "1080p",
"fps": 30,
"cut": "hard",
"model": "bytedance/seedance-2.0/image-to-video",
"image_model": "bytedance/seedream-v5.0-lite/sequential",
"edit_model": "bytedance/seedream-v5.0-pro",
"keyframe_style": "<the restraint anchor — see shot-prompt-language.md>",
"music": {
"model": "minimax/music-2.6",
"prompt": "minimal ambient electronic, evolving pads, subtle pulse, cinematic, luxurious, 90bpm, instrumental",
"instrumental": true
},
"keyframes": [
{ "id": "K0", "prompt": "<full scene + style — text-to-image>" },
{ "id": "K1", "prompt": "The same scene and lighting. <only the delta> — edit from K0" }
],
"shots": [
{
"id": "s1-belief",
"duration": 5,
"from": "K0",
"to": "K1",
"motion_prompt": "<pure motion + camera between the two frames>",
"overlay": {
"type": "statement",
"text": "模态之间,{{不该有墙}}。",
"in": 1.0,
"out": 4.5
}
}
]
}
Classic mode: omit keyframes, give each shot a video_prompt instead of
from/to/motion_prompt, and transitions become 0.5s crossfades
("crossfade": 0.5 to tune).
Overlay types (rendered by assets/overlay.html, same Apple type system as
the launch-video skill): statement (one big line), hero (kicker + product
name + subline), number (giant value + unit + label), closing (name +
tagline + cta). in/out are seconds within the shot when the text fades
in/out (leave ≥0.8s of clean footage at each end so crossfades never cut
through text). {{braces}} in any text paint that phrase in the accent color.
pos places the text block vertically: center (default), lower (lower
third — use for statements over center-bright subjects), upper. Vary
positions across the film and match them to the keyframe compositions (see
the text-zone rule in references/shot-prompt-language.md).
Top-level "overlay_theme": "dark" | "light" picks the type color: dark
(default, white text) for dark films, light (ink text) when the brand's
temperament calls for a bright film — white-on-light is invisible. Per-overlay
theme overrides for mixed films.
Image model options: bytedance/seedream-v5.0-lite/sequential (batch mode —
whole keyframe set in one call, best consistency) or a chain-mode family like
openai/gpt-image-2 (no sequential variant; frames generate one-by-one, each
edit-conditioned on the previous — slower but strong per-frame quality, and
cheap). The pipeline picks the right path from the model name.
Quality bar
- Style block identical in every shot prompt; palette words match the brand accent. One motion per shot — no shot-within-shot montages.
- No text of any kind requested from the video model.
- Overlay copy survives the giant-screen test: short, declarative, specific.
- Chinese copy uses full-width punctuation (,。、) — half-width commas read as cheap.
- Total = shots×duration − crossfades; keep 28–32s for a "30 second" ask.
- Before calling it done, confirm
final.mp4exists, has audio, and its duration matches (ffprobe is printed by the pipeline).
What ships with it: 21 files
3706.0 KB alongside SKILL.md, 9 of them executable
assets/
- overlay.html2.0 KB
docs/
- demo-atlas-1.png700.7 KB
- demo-atlas-2.png776.6 KB
- demo-figma-1.png1560.4 KB
- demo-figma-2.png596.7 KB
references/
- atlas-api.md2.9 KB
- brand-archetypes.md6.8 KB
- pitch-script-guide.md6.5 KB
- shot-prompt-language.md11.4 KB
scripts/
- atlas.mjsruns5.8 KB
- doctor.mjsruns1.1 KB
- gen_image.mjsruns3.8 KB
- gen_music.mjsruns1.6 KB
- gen_video.mjsruns2.3 KB
- overlay.mjsruns5.2 KB
- pipeline.mjsruns8.9 KB
- snap_page.mjsruns1.6 KB
- stitch.mjsruns5.8 KB
- .gitignore48 B
- LICENSE1.0 KB
- README.md4.8 KB