An agent-driven marketing studio for Claude Code. You type /marketing in your product's repo; the agent onboards your brand, films your app, renders a full marketing asset suite in this engine, and copies the finished files back to you.
$ npx -y skills add ucsandman/marketing-studio --agent claude-code
Run the curl in your terminal, the rest in Claude Code.
Repo: ucsandman/marketing-studio
What's inside
An agent-driven marketing studio for Claude Code. You type /marketing in your product's repo; the agent onboards your brand, films your app, renders a full marketing asset suite in this engine, and copies the finished files back to you.

An animated OG loop the studio rendered for a real product, from brand tokens alone. More in examples/.
/marketing
One run produces, in order:
| # | Asset | Skill behind it |
|---|---|---|
| 1 | Logo reveal (Blender + Remotion) | /logo-reveal |
| 2 | Product demo with camera zooms and cursor (Playwright capture) | /product-demo |
| 3 | 30 to 90 second launch video composing demo, logo, and copy | /launch-video |
| 4 | Voiceover and music scored to the launch video (ElevenLabs) | /audio-track |
| 5 | Social clips per platform (X, LinkedIn, TikTok) | /social-clip |
| 6 | OG image, animated OG loop, README GIF | /og-assets |
The order is deliberate: the cheapest composition renders first so brand-token bugs surface before the expensive assets, the demo is filmed once and its footage feeds everything downstream, and audio is scored only after the launch video is picture-locked. The run keeps a manifest on disk, so a died session resumes where it stopped instead of starting over.
Around those assets, the pipeline adds:
brief.json that every builder consumes. You approve the whole story on a storyboard page before anything renders.motion token block so each brand's choreography feels like itself.judge-av-sync verifying every cue against the timings. Wordless manifests render exactly as before.docs/templates/DIRECTION.md), and iteration renders are versioned v1, v2, ... so a fix can be proven and an earlier cut recovered.manifest.json, a machine-readable index that launch-engine reads to auto-attach videos to X and LinkedIn posts. Unchanged product UIs are never re-filmed thanks to content-hash caching of capture and Blender staging.Each asset also works standalone: run /logo-reveal, /product-demo, /launch-video, /audio-track, /social-clip, or /og-assets on its own from any repo.
Everything below was produced by /marketing runs against two real products, unedited. Turn the sound on: the voiceover and music are generated too.
https://github.com/user-attachments/assets/7d184b12-1afc-4129-a4f0-87a33da986e3
| File | Asset |
|---|---|
launch.mp4 | 60s launch video with generated voiceover and music |
demo.mp4 | Product demo with measured camera zooms (preview still) |
logo-reveal.mp4 | Blender draw-on logo reveal |
social-launch.mp4 | X/LinkedIn announcement clip |
og.mp4 | Animated OG loop |
https://github.com/user-attachments/assets/1bf89936-4f8b-405a-b507-5f051ae18ef8
| File | Asset |
|---|---|
launch.mp4 | Launch video with audio |
demo.mp4 | Product demo |
logo-reveal.mp4 | Blender logo reveal |
social-x.mp4, social-linkedin.mp4, social-vertical.mp4 | Per-platform social clips |
og.png, og.gif, og.mp4 | OG image, loop, and video |
readme.gif | README-sized GIF (the one at the top of this page) |
studio/ (SocialClip, ProductDemo, LogoReveal, LaunchVideo, AnimatedOG).brands/<id>.json holds your product's tokens (13 colors, 3 fonts, tagline, voice rules), zod-validated. Templates resolve getBrand(brandId) and never hardcode brand values, so a new product is a JSON file and a logo mark component, not a fork.skills/ directory ships the Claude Code skills that operate this repo, including the hard-won gotchas in docs/PLAYBOOK.md (camera math, seamless-loop rules, Blender API traps) so the agent does not re-derive them.Requirements: Claude Code, Node 20+, Python 3.10+. Optional: Blender (3D logo reveals), an ElevenLabs API key (audio), ComfyUI (AI backdrops); everything falls back cleanly without them.
git clone git@github.com:ucsandman/marketing-studio.git
cd marketing-studio
cd studio && npm install && cd ..
cp .env.example .env # set BLENDER_PATH / ELEVENLABS_API_KEY if you have them
node scripts/install-skills.mjs # installs /marketing and friends into ~/.claude/skills
python launch.py --check # verifies the toolchain
Then, from your product's repo:
claude
> /marketing
The agent asks one batched round of questions (brand, destination, audio, platforms, checkpoint mode) and runs the whole pipeline. If your brand is new, it derives tokens from your repo's design system (DESIGN.md, Tailwind config, CSS variables) and only asks for what it cannot infer.
| Skill | What it does |
|---|---|
/marketing | The full pipeline: sequencing, gates, run manifest, resume, final QA and delivery gallery |
/logo-reveal | Animated logo reveal video (Blender draw-on choreography composited in Remotion) |
/product-demo | Screen-Studio style demo: films your running app, adds measured camera zooms and cursor |
/launch-video | Hero announcement video composing demo footage, logo reveal, and copy |
/audio-track | Voiceover and music for any video, or standalone audio |
/social-clip | Short feature clips sized per platform |
/og-assets | OG image, animated OG loop, README GIF, social cards |
marketing-studio | Shared background skill: engine workflow, brand onboarding, non-negotiables |
The pipeline's supporting skills ship too, so nothing in the run dangles:
| Skill | What it does |
|---|---|
/polish | Final UI quality pass (alignment, spacing, states, micro-detail) before the demo is filmed |
/frontend-verify | Headless route verification: console errors, failed requests, text assertions |
/de-vibe | Removes the AI-generated fingerprint (security tells, slop copy, generic defaults) before anything ships |
/ship | Verify, docs, secrets scan, commit, push ritual |
/launch | Announcement drafts per channel (X, LinkedIn, Show HN, email) with approval gates |
scripts/install-skills.mjs copies all of them into ~/.claude/skills and rewrites the engine path to wherever you cloned this repo. It never overwrites a skill you have symlinked. Two optional plugins deepen the UI-polish phase if you have them (impeccable and frontend-design); without them the pipeline films your app as-is.
brands/ per-product brand tokens (zod-validated JSON)
studio/ Remotion project: all final video compositions
feeders/blender/ headless bpy scenes (3D logo reveals)
feeders/capture/ Playwright recorder (product demos)
feeders/audio/ ElevenLabs client (voiceover + music)
feeders/comfy/ ComfyUI client (optional AI backdrops)
skills/ the Claude Code skills that drive all of this
examples/ real output: full asset suites for two shipped products
scripts/ props builders, staging, statics, smoke, copy linter, brief
gatherer, storyboard board, export matrix, captions, thumbs,
post kit, contact sheets, footage cache, SFX library,
Mission Control review server
props/ generated render props (edit via their builder scripts only)
docs/PLAYBOOK.md the operational reference: engine map, onboarding, gotchas
launch.py single-command health check + Remotion Studio
out/, assets/, and studio/public/*/ are build products and stay untracked.
Everything the skills do can be run by hand:
python launch.py # health checks + Remotion Studio
node scripts/smoke.mjs # frame-0 still of every composition
cd studio && npx remotion render LogoReveal ../out/<brand>/logo.mp4 \
--props='{"brandId":"<brand>","cta":"..."}'
node scripts/lint-copy.mjs props/<brand>-launch.json # no-slop copy gate
node scripts/render-matrix.mjs <brand> --stills-only # 16:9/9:16/1:1/4:5 fan-out
node scripts/build-captions.mjs <brand> --check # SRT/VTT sidecars
node scripts/mission-control.mjs <brand> # click-to-approve run console
node scripts/master-audio.mjs out/<brand>/launch.mp4 # -14 LUFS master, verified in the delivered file
node scripts/verify-cue.mjs out/<brand>/launch.mp4 2 1.5 # prove a sound cue is audible in a window
docs/PLAYBOOK.md has the full engine map: every feeder, builder script, and render command, plus the verified gotchas.
brands/<id>.json copying the shape of an existing brand (colors, fonts, tagline, voice rules).studio/src/lib/brand.ts and add a mark component in studio/src/brands/.cd studio && npm test validates the schema.The /marketing skill does all of this for you from your product repo's design system; the steps above are the manual path. Details in docs/PLAYBOOK.md.
python launch.py --check # toolchain health
node scripts/smoke.mjs # renders frame 0 of every composition; must stay green
cd studio && npm test # brand schema tests
Every asset prop is nullable with a placeholder, so the smoke test passes on a clean clone with no captures, no Blender, and no API keys.
MIT
.env.example
.gitignore
brands/
costclaw.json
dashclaw.json
magnetic.json
noban.json
paperroute.json
phoneclaude.json
tenwords.json
CLAUDE.md
docs/
PLAYBOOK.md
product-launch-motion-adoption.md
superpowers/
plans/
2026-07-09-audio-feeder.md
2026-07-09-phase1-social-clip.md
2026-07-09-phase2-product-demo.md
2026-07-09-phase3-blender-feeder.md
2026-07-09-phase4-launch-video.md
2026-07-09-phase5-comfy-statics.md
2026-07-12-magnetic-portfolio-suite.md
2026-07-12-magnetic-wrap-pipeline.md
2026-07-13-magnetic-review-station.md
specs/
2026-07-09-animation-studio-design.md
2026-07-09-audio-feeder-design.md
2026-07-12-magnetic-integration-design.md
2026-07-12-magnetic-wrap-pipeline-design.md
2026-07-13-magnetic-review-station-design.md
templates/
DIRECTION.md
examples/
noban/
demo-still.png
demo.mp4
launch.mp4
logo-reveal.mp4
og.mp4
social-launch.mp4
paperroute/
demo.mp4
launch.mp4
logo-reveal.mp4
og.gif
og.mp4
og.png
readme.gif
social-linkedin.mp4
social-vertical.mp4
social-x.mp4
feeders/
audio/
client.mjs
client.test.mjs
blender/
render.py
scenes/
background_loop.py
logo_reveal_costclaw.py
logo_reveal_dashclaw.py
logo_reveal_paperroute.py
logo_reveal_phoneclaude.py
logo_reveal_tenwords.py
logo_reveal.py
probe.py
test_render.py
capture/
ansi-replay.mjs
ansi-replay.test.mjs
capture-cache.mjs
costclaw-audit-evidence.mts
package-lock.json
package.json
record-costclaw-demo.mjs
record-dashclaw-demo.mjs
record-magnetic-demo.mjs
record-noban-demo.mjs
record-paperroute-demo.mjs
record-phoneclaude-demo.mjs
record-tenwords-demo.mjs
recorder.mjs
recorder.test.mjs
comfy/
client.mjs
client.test.mjs
workflows/
noban-hero.json
launch.py
LICENSE
props/
costclaw-audio.json
costclaw-demo.json
costclaw-launch.json
costclaw-social-linkedin.json
costclaw-social-x.json
dashclaw-audio.json
dashclaw-demo.json
dashclaw-launch.json
dashclaw-logo-reveal.json
dashclaw-social-launch.json
dashclaw-social-linkedin.json
dashclaw-social-vertical.json
dashclaw-social-x.json
dashclaw-wrap-intercept-and-hold.json
dashclaw-wrap-recorded-and-verified.json
magnetic-demo.json
noban-audio.json
noban-demo.json
noban-launch.json
noban-social-launch.json
paperroute-audio.json
paperroute-demo.json
paperroute-launch.json
paperroute-social-linkedin.json
paperroute-social-vertical.json
paperroute-social-x.json
phoneclaude-audio.json
phoneclaude-demo.json
phoneclaude-launch.json
phoneclaude-logo-reveal.json
phoneclaude-social-linkedin.json
phoneclaude-social-x.json
tenwords-audio.json
tenwords-demo.json
tenwords-launch-demo.json
tenwords-launch.json
tenwords-logo-reveal.json
tenwords-social-linkedin.json
tenwords-social-x.json
README.md
scripts/
build-captions.mjs
build-costclaw-audio.mjs
build-costclaw-feature-stills.mjs
build-costclaw-social-props.mjs
build-dashclaw-audio.mjs
build-dashclaw-launch-props.mjs
build-launch-props.mjs
build-magnetic-demo-media.mjs
build-magnetic-demo-media.test.mjs
build-magnetic-demo-props.mjs
build-magnetic-icon.mjs
build-noban-audio.mjs
build-paperroute-audio.mjs
build-paperroute-launch-props.mjs
build-phoneclaude-audio.mjs
build-phoneclaude-feature-stills.mjs
build-postkit-licences.test.mjs
build-postkit.mjs
build-postkit.test.mjs
build-sfx.mjs
build-storyboard.mjs
build-tenwords-audio.mjs
build-tenwords-feature-stills.mjs
build-tenwords-launch-demo.mjs
build-wrap-props.mjs
build-wrap-props.test.mjs
check-budgets.mjs
check-budgets.test.mjs
contact-sheet.mjs
derive-brief.mjs
extract-thumbs.mjs
fetch-noban-assets.mjs
fetch-results.mjs
fetch-results.test.mjs
install-skills.mjs
judge-av-sync.mjs
judge-av-sync.test.mjs
judge-demo-pacing.mjs
judge-motion.mjs
judge-motion.test.mjs
judge-palette.mjs
level-sfx.mjs
lib/
cache.mjs
cache.test.mjs
magnetic-sidecar.mjs
magnetic-sidecar.test.mjs
matrix-props.mjs
png.mjs
png.test.mjs
takes.mjs
wrap-contract.mjs
wrap-contract.test.mjs
lint-copy.mjs
lint-copy.test.mjs
master-audio.mjs
merge-launch-audio.mjs
mission-control.mjs
mission-control.test.mjs
platforms.json
pull-magnetic-verdicts.mjs
pull-magnetic-verdicts.test.mjs
render-costclaw-statics.mjs
render-dashclaw-readme-gif.mjs
render-dashclaw-statics.mjs
render-hook-variants.mjs
render-magnetic-statics.mjs
render-matrix.mjs
render-paperroute-statics.mjs
render-phoneclaude-statics.mjs
render-statics.mjs
render-tenwords-statics.mjs
render-variants.mjs
review-in-magnetic.mjs
review-in-magnetic.test.mjs
smoke.mjs
stage-blender-assets.mjs
verify-cue.mjs
skills/
audio-track/
SKILL.md
de-vibe/
evals/
evals.json
references/
code-tells.md
design-tells.md
SKILL.md
frontend-verify/
references/
playwright-cli-cheatsheet.md
scripts/
verify-routes.mjs
SKILL.md
launch/
launch-video/
SKILL.md
references/
strategy.md
virality.md
SKILL.md
logo-reveal/
SKILL.md
marketing/
marketing-studio/
SKILL.md
references/
campaign-evidence.md
hook-formulas.md
SKILL.md
og-assets/
SKILL.md
polish/
SKILL.md
product-demo/
SKILL.md
ship/
SKILL.md
social-clip/
SKILL.md
studio/
.gitignore
.prettierrc
eslint.config.mjs
package-lock.json
package.json
README.md
remotion.config.ts
src/
brands/
CostClawMark.tsx
DashClawMark.tsx
MagneticMark.tsx
marks.ts
NobanMark.tsx
PaperRouteMark.tsx
PhoneClaudeMark.tsx
TenwordsMark.tsx
components/
BackgroundLoop.tsx
CameraRig.tsx
Caption.tsx
CaptionTrack.tsx
DemoCursor.tsx
DemoStage.tsx
EndCard.tsx
FeaturePanel.tsx
FilmGrade.tsx
FloatBar.tsx
GalleyFold.tsx
Headline.tsx
PngSequence.tsx
RackFocus.tsx
SoundTrack.tsx
SpecularSweep.tsx
StageCursor.tsx
StagedScene.tsx
index.css
index.ts
lib/
audioMix.test.ts
audioMix.ts
brand.test.ts
brand.ts
brief.test.ts
brief.ts
camera.test.ts
camera.ts
captionTiming.test.ts
captionTiming.ts
depth.test.ts
depth.ts
fonts.ts
launchTiming.test.ts
launchTiming.ts
layout.test.ts
layout.ts
motion.test.ts
motion.ts
sfxCues.test.ts
sfxCues.ts
staged.test.ts
staged.ts
telemetry.test.ts
telemetry.ts
textReveal.test.ts
textReveal.ts
wordCues.test.ts
wordCues.ts
Root.tsx
templates/
AnimatedOG.tsx
ComponentGallery.tsx
LaunchVideo.tsx
LogoReveal.tsx
ProductDemo.tsx
SocialClip.tsx
StagedGallery.tsx
WrapClip.tsx
tsconfig.jsonFAQ
marketing-studio is a Claude Code plugin with 13 hand-picked skills for marketing work, indexed on Flowy. Install it with the command on its page. It includes audio-track, de-vibe, frontend-verify. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.