From merge-movies
Convert an existing landscape merge.mov movie into a portrait (9:16) mobile-optimized version.
How this skill is triggered — by the user, by Claude, or both
Slash command
/merge-movies:create-mobile-videoThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Convert an existing landscape merge.mov movie into a portrait (9:16) mobile-optimized version.
Convert an existing landscape merge.mov movie into a portrait (9:16) mobile-optimized version.
$ARGUMENTS
This skill takes an existing movie and creates a new portrait-oriented copy optimized for mobile platforms (TikTok, Reels, Shorts). It:
orientation: "portrait" (1080x1920)/merge-movies:create-mobile-video movieId: <movie-id> - Convert a specific movie to mobileThis skill uses the merge-movies MCP server. All tools are available automatically. Authentication is handled by the MCP transport.
If the key is missing, tell the user to create one at https://merge.mov/settings.
Mobile videos are consumed differently from landscape videos. Viewers scroll through feeds quickly, watch on small screens, and expect fast-paced, visually engaging content. A straight 1:1 conversion of a landscape video won't produce a great mobile video — you need to rethink the content for the format.
Shorter is better. Mobile viewers have less patience. If the landscape movie is 60s, aim for 30-45s in portrait. Cut filler scenes, merge related scenes, and tighten narration.
Front-load the hook. The first 2-3 seconds determine whether someone keeps watching. Start with the most interesting scene — the key insight, the dramatic before/after, or a compelling question. Don't open with a title card.
One idea per scene. Mobile screens are small. Each scene should communicate one clear thing. If a landscape scene showed two files side-by-side, split it into two sequential scenes or stack them.
Bigger text, fewer words. Landscape videos can fit paragraphs on screen. Portrait videos should use large, scannable text. For React/slide scenes, cut body text to the essentials and increase font sizes aggressively.
Vertical flow is natural. Portrait videos have a natural top-to-bottom reading flow. Use this — animate elements appearing from top to bottom, stack content vertically, let the eye travel downward.
Keep narration tight. Rewrite narration to be punchier. Cut filler phrases ("Let's take a look at", "As you can see"). Use active, direct language. Each word should earn its place.
When converting a landscape movie, don't blindly convert every scene. Consider:
focus: true) liberally — they zoom in and blur the rest, which works perfectly on small screens.Don't just copy narration verbatim. Adapt it:
get_movie({ movieId: "<movie-id>" })
Parse $ARGUMENTS to extract the movieId. If not provided, use list_movies and ask the user which movie to convert.
Before creating anything, review the source movie's scenes and plan the conversion:
Create a new movie with the same metadata but orientation: "portrait":
create_movie({
movie: {
metadata: {
title: "Mobile: <original title>",
description: "<original description>",
repository: "<original if present>",
branch: "<original if present>"
},
orientation: "portrait",
scenes: []
}
})
Process each scene from the source movie and create portrait-adapted versions. The key adaptations:
stacked layout (the renderer does this automatically, but set it explicitly for clarity)focus: true on highlights zooms in and blurs the rest, ideal for mobile viewerslinesPerSecond by ~30% from the landscape versioncreate_scene({
movieId: "<new-movie-id>",
scene: {
title: "<original title>",
narration: "<shortened narration>",
view: {
type: "code",
layout: "stacked", // was "side-by-side"
codeBlocks: [...], // copy from source, trim lineRanges
animations: {...} // copy from source, consider adding focus highlights
}
}
})
Before writing React view code from scratch, search the community template library for a matching starting point:
list_react_templates with a relevant query or tags (e.g. query: "diagram", tags: ["portrait"])get_react_template to get the full codeUse literal Unicode characters, not escape sequences — The code field is a string, so \u2713 renders as the literal text \u2713, not a checkmark. Always paste the actual character (e.g. ✓, →, ↓, •) directly into the code string.
React views contain hardcoded layout code that assumes 1920x1080. You must rewrite the React code for portrait (1080x1920):
useVideoConfig() hook will return { width: 1080, height: 1920, fps: 30 } — use this for responsive layoutsExample: Landscape bullet list → Portrait
Landscape (1920x1080):
// padding: '96px 120px', fontSize: 64 title, 28 bullets, stagger delay 15 frames
Portrait (1080x1920):
// padding: '120px 60px', fontSize: 72 title, 34 bullets, stagger delay 10 frames
// more vertical spacing between items (marginBottom: 32 vs 20)
Example: Landscape architecture diagram → Portrait
Landscape had boxes at x: 160, 600, 1100 with horizontal arrows between them. Portrait should stack boxes vertically at y: 400, 800, 1200 with downward arrows (↓ instead of →). Use the full 1080px width for each box — make them prominent, not cramped.
videoFit: "contain" to prevent cropping in portraitCopy startTransition and endTransition from each source scene. Consider:
"type": "cut") feel more energetic and are common in short-form video.{MERGE_MOVIES_URL}{studioUrl}
#0d1117#ffffff#e6edf3#58a6ff| Element | Landscape | Portrait | Notes |
|---|---|---|---|
| Title | 64px | 72-80px | Bold, white, one line if possible |
| Body text | 32px | 36-40px | Keep to 2-3 lines max |
| Bullet items | 28px | 32-36px | Bigger spacing between items |
| Code (in React views) | 18-20px | 22-24px | Monospace, generous line height |
| Labels/annotations | 20-24px | 28-32px | Must be readable at phone size |
focus highlights on code to draw the eye to what matters→, ↓, ✓, •), never escape sequences like \u2192npx claudepluginhub marked-gold/merge-movies-claude-code --plugin merge-moviesGenerates MP4 motion graphics videos from a content brief using HTML/CSS animations rendered frame-by-frame in headless Chromium via Playwright, assembled with FFmpeg.
Generates App Store preview videos using Remotion (React) with agent team for storyboarding, scripting, coding, review, and frame inspection.
Entry skill for HyperFrames video creation. Routes 'make a video' requests to the correct workflow (product-launch, faceless-explainer, website-to-video, etc.) and orients Claude to the HyperFrames skill surface.