Communitygithub.com

renoise-ai/renoise-skills

Create promotional videos for products, brands, or services: analyze user materials, identify industry and audience, recommend style and duration, refine scripts and storyboards with user confirmation, then render MP4s using Remotion—either template-based (storyboard-driven dynamic typography, SVG, images) or cinematic (3D metal logos, realistic typing and click demonstrations of the product interface, 3D galleries with depth of field, motion blur, realistic keyboard sound effects)—with automatic music selection from a built-in open-source library, or using user-provided music or synthesized fallback, all overlaid with motion design (match cuts, kinetic typography, shape morphing, mask transitions, particle climaxes). Also capable of creating compilation reels, pure motion graphics showreels (kinetic typography, shape morphing, 3D, particles, mask rhythm), and looping one-shape UI morph animations.

What is renoise-skills?

This skill enables an AI agent to create professional promotional videos for products, brands, or services. It analyzes user materials to determine the industry and target audience, recommends a style and duration, and then works with the user to refine a script and storyboard. Once confirmed, the skill uses Remotion to render the final video as an MP4 file. It supports two main modes: a template-based mode for faster turnaround with storyboard-driven dynamic typography, SVG, and images, and a cinematic mode for high-end productions featuring 3D metal logos, realistic product interface demonstrations with typing and click interactions, and 3D galleries with depth of field and motion blur. The skill also automatically selects background music from a built-in open-source library or can use user-provided music or a synthesized fallback, and it adds a layer of motion design including match cuts, kinetic typography, shape morphing, mask transitions, and particle effects for a polished finish. It is designed for use with Remotion and Renoise Kit, running on macOS, Linux, and Windows, and follows a structured workflow from material analysis to final delivery and quality assurance.

Works with✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/renoise-ai/renoise-skills/tree/HEAD/skills/promo-video

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

Promotional Video

Path convention: <skill> refers to the directory where this SKILL.md is located; scripts/, references/, assets/, templates/ are all under it. Replace <skill>/scripts/... with the absolute path of this directory when executing commands.

Defaults

  • Aspect ratio 16:9 (1920×1080, 30 fps). Use user-specified dimensions when provided; supports 16:9, 9:16, 1:1, 4:5. Use 9:16 when the user mentions vertical platforms like Douyin (TikTok in China), Xiaohongshu, WeChat Channels, or Reels.
  • Language follows the user's materials. No voiceover in the first phase; subtitles are off by default when on-screen text already conveys information.
  • Font defaults are not DM Sans / SF Pro / PingFang: Follow references/typography.md to make a "font proposal"—fonts from the official website or brand manual + 3 pairings chosen by tone, use fonts.py specimen to generate images with the actual video text for the user to choose, then write the selection into the fifth row of the selection card.
  • No hard cuts, no silent digital sections, text passes detail checklist: Before delivery, go through references/detail-pass.md (switch point checklist → rn sheet --around → rn qa / rn cuts → typo_lint.py / font_check.py). Most "abrupt," "audio problem," or "not elegant enough" issues users find originate here.
  • Logo provided by the user. If no logo is provided, use the brand name as text, and include a statement in brand.disclaimer, such as "Exemplary brand, for demonstration only." All statistics the user hasn't provided are considered examples and must be stated as such; do not fabricate real data.
  • Music priority: User-provided > Built-in music library pick_music.py (default, automatically avoids recently used tracks) > Online open-source music library supplement > synth_bgm.py synthesized fallback.

Dependency: rn (renoise-kit)

Visuals and audio mixing are rendered by Remotion; all mechanical, error-prone tasks are handled by rn: frame-accurate frame grabbing and contact sheet, reading music (loudness / beats / BPM), encoding and mastering the final video, delivery checks, and auditing for hard cuts, silence, and pops. render.py is already integrated. For manual use, simply run rn <command> --help to check parameters.

brew install ffmpeg-full && export PATH="$(brew --prefix ffmpeg-full)/bin:$PATH"   # macOS: rn calls system ffmpeg
apt install ffmpeg                                                                 # Debian / Ubuntu
winget install Gyan.FFmpeg                                                         # Windows (restart terminal after installation)
uv tool install "renoise-kit[all]"                                                 # Provides the rn command

macOS, Linux, and Windows are all supported: All skill scripts are Python and do not rely on bash. Replace python3 with python (or py -3) on Windows; paths can use / or \.

TaskCommand
View materials / preview / still frames folder`rn sheet [--fps 4
Read music: loudness, beats, BPM (with half/double speed candidates)rn listen bgm.wav --json out/music.json
Frame-by-frame luminance / motion / frequency band / drum hits / popsrn signal <file> -o out/signal.png --json out/signal.json
Encode final video, master, change audio, output 1080prn finish raw.mp4 -o out.mp4 [--audio mix.wav] [--height 1080]
Delivery check (format, loudness, true peak, silence, level jumps, pops, black frames, frozen frames, constant frame rate)rn qa out.mp4 [--accept CHECK@seconds]
Hard cut list with frames before/after each cutrn cuts out.mp4 --sheet out/audit/cuts.jpg
Compare with previous version / reference videorn compare new.mp4 old.mp4 --cuts
On-screen text (proofreading, read reference video subtitles)rn text out.mp4

Select Mode and Style Routing

For each video, first follow references/style-router.md for four layers of selection: ① Mode ② Visual Tone ③ Narrative Framework ④ Enhancement Layer (≤2), then ⑤ Font (typography.md), write a five-line "selection card" above the storyboard for user confirmation; only read the documents selected. In case of conflict: User's explicit request > Reputation records in the route table > Industry defaults. The table below shows ① Mode and entry points for each extension pack:

What the user wantsModeRead FirstExamples
Product/service promotion video, launch videoCinematic promotional video (default)cinematic.md → motion-craft.mdexamples/youware/, examples/renoise/
Quick explainer, social media batchTemplate videostoryboard.md, styles.mdstoryboard.json
Personal introduction, account promotionPersonal brand videocinematic.md "Personal Brand and Pixel Avatar"—
Phone, device, etc. hardware conceptHardware concept videocinematic.md "Physical Hardware Products"—
Edit multiple completed videos into a compilationCompilation reelrecap.md—
Showcase motion design skills, intro, channel IDMotion graphics showreelmotion-craft.mdexamples/motion-reel/
Music-driven, liquid fusion, data charts, infinite tunnel, perspective revealStyle Extension Pack 01 (layered on cinematic promos)style-pack-01.md (run audio_features.py first for music-driven)—
One-shot take, no hard cuts, learn that continuous feel from reference videos; product has "input → output → continuous operation" chainStyle Extension Pack 02: Relay One-Shot (narrative framework, with voiceover)style-pack-02.md (run narrate_mimo.py for voiceover, can clone client's voice)src/cinematic/relay/ components
Animated icons, dynamic emoji, process nodes lighting up one by oneAnimated icons (layered on any mode)animated-icons.md (run fetch_noto_emoji.py for emoji)examples/animated-icons/
Brand identity video, brand upgrade, "Claude-like" official quality, Apple-style humanism, no specific feature demosStyle Extension Pack 03: Conceptual Ladder · Specimen Book (dot → line → surface → volume → field, each chapter a value statement, ending with the logo; 60s, piano)style-pack-03.md (run glyph_outline.py for glyph specimens)examples/youware-ladder/
Model/product launch video, needs "both quality and proof of strength"; name can be used for wordplay; has official order-of-magnitude facts (countable wonders)Style Extension Pack 04: Sonnet · 3D Depth of Field (the script is a poem, one stanza per section; spec sheet HUD only cites official wording; 680,000 strokes aligned into a brand star shape)style-pack-04.md—
"N styles" compilation, one product explained in multiple visual styles, for client style selection; variety show sticker text / sticker-style explainer / isometric 2.5D micro-cityStyle Extension Pack 05: Commercial Style Library (style catalog video template + sticker text + sticker + isometric; can also be layered on any mode alone)style-pack-05.md (pre-render Three.js samples into video first, then into catalog video)examples/style-catalog/
Frame-by-frame hand-drawn / single-stroke line / collage / flat illustration / Bauhaus poster / liquid / frosted glass / 3D soft plush needle matrix / cyber HUD / pixel / synthwave, or want a complete 15-style compilationStyle Extension Pack 06: Commercial Style Library Batch 2 (11 visual style components + 15-reel catalog video + extend music by section / retro synth music)style-pack-06.md (must read about filter region and three bounding box pitfalls)examples/style-catalog/ (Reel15.tsx)
"Same-topic comparison" short video for a new model launch day: animated SVG / small works of two models side-by-side + YouWare input box and model menu + ending hookModel output comparison video (frame-determined SVG player, isolated naming, same zoom ratio, music aligned to sections)svg-compare.md (first confirm official model names, inference strength, original prompts, and generation sources)examples/svg-compare/
Dribbble-level UI animation, one shape morphing continuously to explain the product flowOne-shape Promotional Video (default 16:9 promo version; pure 1:1 loop version optional)one-shape.md (first get state list, color palette, music, then lay out the beat grid before writing code)examples/morph-promo/, examples/morph-loop/

All modes share the same set of design principles, motion layers, music library, and sound effects library.

Design Principles (Default Execution)

All videos follow references/design-principles.md: Apple-style one screen one idea, large typography with whitespace, restrained color palette, and credible materials; unified lucide-react icons (1.75 line width, use IconTile for functional nodes; use lucide-animated for animation, play once on contact frame), use only Noto dynamic emoji versions and don't use them by default, no placeholder graphics; each frame first defines focus and emotion, camera movement has motivation (dolly, focus shift, fly-through, whip pan, punch); sound hits the contact frame of the action. Go through the "Master Review" checklist before delivery.

After the content layer is built, add the "motion layer" (references/motion-craft.md): First use official website materials, then overlay particles, morphs, and masks on these visuals (e.g., particles converging into a slogan on a product screenshot). Do not cut to a separate black background segment unrelated to the product. Clearly describe transitions (prefer match cuts), and bring opening objects back at the end.

Workflow

Copy this checklist and track progress:

- [ ] 1. Material Analysis: Product, industry, audience, selling points
- [ ] 2. One-time Confirmation: Purpose, style, duration, aspect ratio, language, music
- [ ] 2b. Font Proposal: Generate 3 pairings based on tone + proposal image with brand's current font (fonts.py specimen) → User selects
- [ ] 3. Script & Storyboard (including main craft and transition column for each segment) → Wait for user confirmation
- [ ] 4. Setup project → Still frames → Wait for user confirmation on visuals
- [ ] 5. Music: pick_music.py to select and align music, rearrange timeline based on BPM
- [ ] 6. Low-resolution preview → Modify
- [ ] 6b. Detail Review: Switch point list + 4 frames around (rn sheet --around) + rn qa / rn cuts + typo_lint.py (go through yourself before showing the preview to the user)
- [ ] 7. Final video delivery and verification

1. Material Analysis

Read all content provided by the user (copy, PDF, URLs, screenshots, logos). If the user only provided a URL, extract logo, fonts, colors, and high-quality product images from the official website using references/brand-from-website.md. Extract:

  • What the product is, one-sentence value proposition (≤ 20 words)
  • 3–4 selling points, each with an icon concept
  • Data explicitly provided by the user (use only these)
  • Existing visual assets: Screenshots, logo, brand colors, fonts
  • Industry classification and target audience: Determine using references/industries.md, get recommended style, camera movement, and music mood

2. One-Time Confirmation

Ask everything in one go, only for items that cannot be inferred. Place the recommended option first and mark it as "(recommended)." If the host has a quiz-style questioning tool, use it (such tools have limited questions per round; if there are many, split into two rounds by importance). Otherwise, list them as numbered options in one message:

  • Video Purpose: Product launch, feature demo, brand image, fundraising pitch, social media ad
  • Production Mode: Cinematic (real UI demo + 3D + sound effects, recommended for product launch/brand videos) or Template (faster, suitable for explainers, social media batches)
  • Cinematic Style: Dark tech / Paper cutout / Light editorial, recommended by industry (see cinematic.md "Styles")
  • Style: Give 3 presets based on industry, each with a one-sentence visual description (presets in references/styles.md)
  • Duration: Provide level-appropriate options based on purpose (see references/storyboard.md), hint "shorter duration = less text per screen"
  • Aspect Ratio: Only ask if materials suggest vertical or multi-platform distribution; otherwise use 16:9
  • Language
  • Music Source: Built-in music library (recommended, provide 2–3 candidate style descriptions) / Provide own / Synthesize

Do not ask about items the user has already explicitly stated.

2b. Font Proposal

Follow references/typography.md §1: Determine tone → fonts.py pairs --tone <tone> (if the official font is commercial, first use fonts.py similar "<font name>") → Generate proposal images using the actual video titles, subtitles, body text, and Chinese/Japanese text, with 3 pairings + 1 group of the brand's current fonts:

python3 <skill>/scripts/fonts.py specimen --pair warm-soft --pair editorial-italic --pair bold-youth --combo <brand-title-font>+<brand-body-font> \
  --title "..." --sub "..." --body "..." [--zh "..."] [--ja "..."] --out <project-directory>/out/type-proposal.png

Send the image to the user for selection. After selection: fonts.py fetch <ids> --to <project-directory>, after writing the copy, fonts.py subset <project-directory> --text-file copy.txt (for Chinese/Japanese). Authorization per typography.md §8: Fontshare fonts are not subsetted and not shared with third parties with the project.

3. Script and Storyboard

If the user provides a script, break it down into scenes. Otherwise, write it according to the structure in references/storyboard.md. Place the selection card (style-router.md) above the table, then present the table for user confirmation:

#DurationScene TypeVisualsOn-Screen TextCamera MovementMain Craft / Transition

Do not proceed to rendering without user confirmation. After user modifications, update the table and confirm again.

4. Setup Project and Still Frames

python3 <skill>/scripts/setup_project.py <project-directory>

Cinematic mode: storyboard.json only provides brand information, visuals are coded in src/Film.tsx following references/cinematic.md (refer to templates/remotion/examples/youware/). Use render.py <project-directory> film-stills <frame-numbers...> for spot-checking frames, preview with film-preview, final with film (outputs out/film.mp4 with loudness check). The following storyboard validation and render.py are for template videos.

  • Write the confirmed storyboard into <project-directory>/storyboard.json (see storyboard.md for fields).
  • Place materials into public/: brand/ (logo), fonts/ (downloaded by fonts.py fetch, includes fonts.json and LICENSES.md), images/ (screenshots), music/. Paths in storyboard.json are relative to public/.
  • Validate and render still frames (mid-frame of each scene):
python3 <skill>/scripts/check_storyboard.py <project-directory>/storyboard.json
python3 <skill>/scripts/render.py <project-directory> stills
  • ERROR must be fixed. WARN reading time indicates text is too long to read: shorten the text or extend the scene duration.
  • Review each out/stills/scene-N.png (or the summary out/stills-sheet.jpg) against the design-principles.md "Master Review" checklist (focus, whitespace, overflow, icons, contrast). After fixing, show the still frames to the user (if the host can send files, send the image directly; otherwise, provide the file path).
  • If the user wants to compare styles, change style, re-render still frames, and save the old still frames as out/stills-<style>/ for side-by-side comparison.

5. Music

Follow references/music.md. Regardless of the source, music.bpm must be set (read by rn listen). The timeline will align each edit point to a beat.

If voiceover is needed, generate it using voiceover.py as per cinematic.md "Voiceover and Dubbing" (Xiaomi MiMo TTS or local say). The timeline will then be driven by the voiceover duration. To change the loudness of the final video, only redo the audio track without re-rendering the video: rn finish out/film.mp4 -o out/film-loud.mp4 --copy-video --lufs -12.

6. Preview

python3 <skill>/scripts/render.py <project-directory> preview

Renders a half-resolution preview quickly. Provide the path to out/preview.mp4 to the user. After receiving feedback, modify storyboard.json and re-render.

6b. Detail Review

Before showing the preview to the user, go through references/detail-pass.md yourself:

rn sheet out/film-preview.mp4 --around <switch-point-seconds,...> --span 4 -o out/seam.jpg                       # 4 frames before and after each mount/unmount/parameter change point (seconds = frame number / 30)
rn qa out/film-preview.mp4                                                                             # Black frames, frozen frames, digital silence, level jumps, pops (render.py runs this automatically)
rn cuts out/film-preview.mp4 --sheet out/audit/cuts.jpg                                                # Hard cut list, one frame before and after each cut
python3 <skill>/scripts/typo_lint.py storyboard.json                             # Or --ts src/film/*.ts*; --fix auto-fixes JSON
python3 <skill>/scripts/font_check.py public/fonts                               # Optical size axis, real punctuation glyphs

Each issue must either be fixed or written into qa-accept.txt in the project root (one check-item or check-item@seconds per line, with the reason after #). State "intentional" in the delivery note; subsequent audits will not report it again.

7. Final Video

python3 <skill>/scripts/render.py <project-directory> final

Outputs out/final.mp4, out/cover.png, and out/captions.srt if caption data exists. All files delivered to the user must be the output of rn finish (render.py's film / final automatically does this: renders video separately, renders audio mix as WAV, then synthesizes with rn finish --audio). MP4 files directly from Remotion can show only half the duration on some players and upload platforms (users report "38 seconds sent, but only 19 seconds opens"). The root cause is in references/detail-pass.md "Delivery Encoding." When manually rendering 4K:

npx remotion render src/index.ts Film out/film-raw-4k.mp4 --muted                # Composition is 3840×2160; for 1080p add --scale=2
npx remotion render src/index.ts Film out/mix.wav --codec=wav --config=remotion.audio.config.ts
rn finish out/film-raw-4k.mp4 -o out/<name>.mp4 --audio out/mix.wav
rn finish out/<name>.mp4 -o out/<name>-1080p.mp4 --height 1080 --lufs keep                          # For WeChat / social media
rn qa out/<name>.mp4                                                                               # Run this before delivering any file

Check the rn qa results (FAIL must be 0; fix WARN or add to qa-accept.txt) and the out/audit/cuts.jpg hard cuts. Review the cover frame. Then deliver the file path and a brief description (style, duration, music source and license, disclaimers, intentionally retained WARNs). After the user provides feedback (like / not as good as previous / redo required), record the "combination → video → reaction" into the reputation records in style-router.md.

Rendering Constraints

  • All animations must be derived from useCurrentFrame(). CSS transitions/animations, Framer Motion auto-play, setTimeout, seedless Math.random() are prohibited; otherwise, frame-by-frame rendering will flicker or be out of sync. GSAP can only be used frame-seeking.
  • render.py must run outside the command sandbox (headless Chrome needs to read CPU cores and GPU): If the host sandboxes shell commands, follow the host's method to exempt this command.
  • Full video rendering (preview, final, film-preview, film) and the first setup_project.py (npm install) take several minutes and will exceed most hosts' single-command timeout: Run them in the background (use the host's background execution capability if available; otherwise, use system native methods and redirect output to out/render.log: macOS/Linux nohup ... > out/render.log 2>&1 &, Windows PowerShell Start-Process python -ArgumentList '...' -RedirectStandardOutput out/render.log -NoNewWindow, then check the log). Do not poll frequently. stills and film-stills (a few frames) can run in the foreground; extend the timeout to 10 minutes.
  • No global Node.js required: setup_project.py will find an existing Node.js or download a portable version to ~/.cache/promo-video/node if not found. ffmpeg and rn must be installed in the system (see "Dependencies"). setup_project.py will prompt if they are missing.
  • hero3d rendering is the slowest; keep 1–2 per video.
  • Common tools: rn finish (delivery encoding: fixed_frame_rate_flag=1, BT.709 TV range, moov box first, -14 LUFS with post-encode true peak ≤ -1 dBTP, --audio takes WAV mix, --height 1080 for small versions); rn qa (delivery check + black frames/frozen frames/digital silence/level jumps/pops, run automatically by render.py); rn cuts --sheet (hard cut list); rn sheet (precise frame grabbing for collage, for video or still frame folder, use for shot selection and review, do not use ffmpeg -r 1); rn listen (BPM, beats, loudness); typo_lint.py (smart quotes, three dots, --, full-width punctuation, hanging separators, orphan characters in screen text); font_check.py (font file axes, features, and real punctuation glyphs; warns if opsz is missing); fonts.py (font directory/pairing/proposal image/download/subsetting/commercial font alternatives, see typography.md); audio_features.py (frame-by-frame features of music, AudioReactive.tsx reads its format); pick_music.py (select music and align beats); narrate_mimo.py (voiceover: MiMo preset voices or clone a few seconds of client's voice, outputs word-by-word timings.json to drive visuals, --qa for reading back verification).
  • Shell is zsh: for t in $LIST does not split by spaces; write lists directly as for t in 1 2 3. In heredocs containing backticks or ${}, use <<'EOF' to prevent shell expansion.

Extensions

  • Adding a new scene type: Write the component in src/scenes/, add it to the Scene union type in src/types.ts and SceneBody in src/Promo.tsx, and update SCENE_TYPES and scene_text in check_storyboard.py.
  • Images: Use <Img>; GIFs: Install @remotion/gif; Lottie: Install @remotion/lottie. Version of @remotion/* packages must match remotion exactly.
  • AI Material Supplement: For people and scenes the client cannot shoot, use Renoise to generate keyframes and image-to-video (requires Renoise plugin and login). Style is derived from the client's own design specifications. Select the model according to Renoise's model-routing skill. For each batch, first run estimate_cost to report quantity and estimated cost. Submit only after user agreement. Workflow, prompt rules, and boundaries are in references/ai-footage.md.

References

  • references/brand-from-website.md: Extract copy, colors, fonts, logo, and product images from the official website.
  • references/design-principles.md: Design principles, icon guidelines, director camera work, sound, and master review checklist (default execution).
  • references/detail-pass.md: Detail Review: Three principles of continuous / non-empty / precise, switch point checklist workflow, dark-to-light transition visuals and sound recipes, rn qa thresholds and exemptions, delivery encoding, and common pitfalls (required before delivery).
  • references/typography.md: Font System: Font proposal workflow, 11 tones → preferred fonts, 17 pairings (with Chinese/Japanese equivalents), fonts used in top advertisements (verified) with open-source replacements tested, font files must include opsz axis, video typography rules and Display parameters, licensing (OFL / ITF FFL / vendor agreements), animated text components (src/cinematic/type/: VarType, OutlineFill, HandReveal, TrackIn, Decode), and a detail review checklist.
  • assets/fonts/catalog.json: 99 curated fonts (Google Fonts / Fontshare / GitHub releases, Latin + Chinese + Japanese), 17 pairings, commercial font replacements table, list of fonts needing manual download from vendors; read by scripts/fonts.py.
  • references/cinematic.md: Cinematic Film mode: Styles, scene components, product interface and report recreation, 3D, motion and sound design.
  • assets/sfx/README.md: Directory of freely usable sound effects (typing, mouse, UI, transitions, paper, page flip); preview.wav for auditioning.
  • assets/music/catalog.json: Music library catalog (mood, BPM, energy climax points, license, download URL, sha256). Music files are not distributed with the repository; pick_music.py downloads from Mixkit's official URL to ~/.cache/promo-video/music/ on first use and verifies integrity.
  • references/industries.md: Industry classification → recommended style, camera movement, music, and compliance tips.
  • references/styles.md: 4 style presets and brand color override rules.
  • references/camera.md: Camera movement vocabulary, classic technique mapping, and rhythm rules.
  • references/storyboard.md: storyboard.json fields, duration levels, narrative structure, and copy rules.
  • references/music.md: Built-in music library and pick_music.py, expanding open-source music library, BPM alignment, synthesized fallback, loudness, and licensing.
  • references/motion-craft.md: Motion layer: Restrained/Expressive levels, craft map, transition design, motion graphics showreel.
  • references/recap.md: Edit multiple completed videos into a compilation (Apple-style carousel recap).
  • references/animated-icons.md: Animated icons (467 lucide-animated icons, frame-by-frame doubles verified) and Noto dynamic emoji (fetch_noto_emoji.py), rhythm rules, and licensing.
  • references/style-router.md: Four-layer selection table and routing logic.
  • references/ai-footage.md: AI generated footage: workflow, prompt rules, cost estimation, use boundaries, and style alignment with client design specs.

...

[truncated for translation]

Related Skills