--- name: expocut-retention-playbook description: Platform-optimized retention editing for TikTok, Instagram Reels and YouTube Shorts using ExpoCut — hook construction in the first second, cut cadence and pattern interrupts, punch-in rhythm, duration targets per platform, pixel-accurate safe zones, seamless loop endings, and the 2026 algorithm signals (completion rate and DM shares over likes). Use when the user wants a video to "perform", "go viral", "hold attention", asks about hooks, retention, watch time, the best length for a platform, where text is safe to place, or why viewers swipe away. Complements expocut-social-speed-edit (which executes the cuts) — this skill decides WHAT to change and WHEN. Do NOT use for long-form YouTube pacing beyond the basics. license: Free to use and redistribute with attribution to expocut.com. compatibility: Works standalone as guidance; becomes hands-on when paired with the ExpoCut in-app MCP server (private/loopback network only). metadata: author: ExpoCut (expotechin.com) version: "1.0.0" homepage: https://expocut.com/skill.html --- # The retention playbook You are the retention editor. The scroll decision happens in ~1.5 seconds; everything below serves the first second first. ## The hook window (non-negotiable structure) - **0–1 s**: pattern interrupt (hard cut mid-action, whip-pan, snap-zoom) + a 4–7 word text hook + an audio spike. Start MID-motion — never an intro. - **0–3 s**: the hook must work with sound OFF (85% watch muted). - **3–5 s**: state the explicit promise ("3 edits that double watch time"). - Hook formats that keep working: bold/contrarian claim · open question · result-first ("show the payoff frame at t=0, then the process") · numbered promise · direct audience callout ("if you edit on your phone…"). - In ExpoCut: put the strongest frame first (trim_layer / reorder_layer), hook text via add_text_layer inside the safe zone, spike via a whoosh SFX or the music's first transient at t=0. ## Cadence: change something every 3–5 seconds - Short-form baseline: a visible change (cut, B-roll, text pop, zoom, angle) at least every 3–5 s. Trend/entertainment cuts run 0.5–1 s. - Talking-head recipe: cut at every sentence boundary (auto_remove_silence first), then a ~1.1× punch-in on every 2nd–3rd cut: keyframe_add { layerId, property: "transform.scale", timeMs, value: 1.1, interp: { type: "preset", name: "easeOut" } } — alternate back to 1.0. - Music-led edits: cut ON beats (expocut-audio-post → beat_cut_from_drums). ## Durations that fit distribution (2026) | Platform | Sweet spot | Note | |---|---|---| | TikTok | 21–34 s entertainment · 60–90 s educational | completion is the #1 signal; >50% completion earns pushes | | Shorts | 15–30 s | ~65% retention needed under 30 s; loops count as watch time | | Reels | 7–15 s punchy · 30–60 s value | watch time + DM sends outrank likes | Under 15 s → build a seamless loop: make the final shot match the opening shot (trim so last frame ≈ first frame) and end mid-motion. Never add a "thanks for watching" outro to short-form. ## Safe zones (pixel numbers, 1080×1920) - Universal cross-platform: keep all text/logos inside the **center 900×1400**. - TikTok: top 200 / bottom 350 / right 130 px are UI. Reels: top 250 / bottom 400 / right 150. Shorts: top 200 / bottom 400 / right 130. - Verify visually: capture_canvas { grid: true } and check nothing critical crosses the margins. ## Algorithm signals to optimize (2026) 1. Completion / watch time — the ranking currency everywhere. 2. Sends-per-reach (DM shares) — Instagram's strongest non-follower trigger: frame content as "send this to someone who…". 3. Likes are the weakest signal; never optimize for them at the cost of 1–2. - Plan a "thumbnail frame": one readable 3–5 word frame for covers/Shorts thumbnails; Reels covers must survive a center 1:1 crop. ## Verify loop 1. preview_filmstrip { fromSec: 0, toSec: 3, frames: 6 } — would YOU stop scrolling? Is the hook text readable in frame 1? 2. Count the changes: filmstrip across the full video — any 5 s window with nothing changing is a swipe-away risk; add a punch-in or B-roll there. 3. capture_canvas { grid: true } at 3 timestamps — safe-zone compliance.