Unified Screen + Edit Playbook
Non-conflicting merge of all files in edits and video skills
(Apex Qwen master, AI-Agent Production Guide, Effects & edits, Effects×opt hybrid,
Virality hybrid, screening SOP, follow-up ops, opus/python/models extras).
Four core production sections + v2 upgrade packs (SEO, full effects kits, AGENTS.md viral pipeline, per-app prompts/mistakes, failure modes/self-check). Copy-paste templates throughout. v3: nine prior agent templates are fully preserved inside six unified copy boxes (no tip/word removed). This file is the single-page site for editor.addict.best. Execution recipes live in Pro-Tips & Commands; combined panels in Template–Code Hybrid (also .md).
DOMAIN STATUS — edit vs editor (read this)
https://edit.addict.best and https://editor.addict.best are two Caddy vhosts on the same Contabo box (149.102.150.185). They are NOT different products — they were temporarily different inventories (edit had full MD + 4 HTML engines; editor had only 2 HTMLs). After the unify deploy they serve the same full package. Prefer either URL; content is mirrored.
- No functional bug in SSL/Caddy for either (both use tls admin@ielts.fast).
- Earlier difference was inventory depth, not a broken app.
- Canonical deep engine for agents: this page +
/Qwen-expert-Ai-editor.md.
Conflict resolution (canonical law — always apply)
- Brand numbers: AI-Agent Video Production Guide §1 table wins over any older generic grade or “18–22% hook for all apps”.
- Promedic brand pack is conditional: apply §1 table + selective Promedic tips only when the video is Dose / Female / Coach / Dentist ProMedic. If not Promedic, skip the pack and use general enhance recommendations only.
- Zoom ceiling is per-app: Dose/Dentist 1.08–1.15× · Female 1.08–1.18× · Coach 1.10–1.22×. Never exceed that app’s max (including hook).
- Retention before polish: hook → dead-air kill → kinetic captions → loop → audio → export → then fancy effects.
- Faceless absolute: no eyes, nose, mouth, eye-circles, face-implying shapes in generated visuals.
- Readability beats style: any grade/effect that hurts dose/UI text is removed.
- Hard cuts ~80–90% of edits; heavy dissolves/light-leaks/glitch off UI footage.
- Render invariants: image inputs
-framerate 30· muxapad+-shortest· audio-ar 48000· HDR→SDR before grade. - QA three-state: PASS / FAIL / INCONCLUSIVE. INCONCLUSIVE ≠ PASS. Never claim done without gate.
- Process order: capture → archive raw → grade → motion → safe-zone place → captions → interrupts → audio → export → QA.
- Soft research numbers (exact % completion targets from models dump) are directional only — optimize your own retention curve.
Screen videos — 9:16 Shorts / Reels / TikTok / Shorts
Copy-ready FFmpeg recipes (merge from both engines)
Use these exact filter chains inside agent templates
- HDR → SDR:
ffmpeg -i in.mp4 -vf "zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709:t=bt709:m=bt709,format=yuv420p" -c:v libx264 -crf 18 -c:a copy out_sdr.mp4 - Clean high-key grade:
-vf "eq=contrast=1.05:brightness=0.03:saturation=0.93,colorbalance=rs=0.02:gs=0.01:bs=-0.02" - Chrome/dock crop (example):
ffmpeg -i raw.mp4 -vf "crop=in_w:in_h-120:0:60" -c:v libx264 -crf 18 clean.mp4(tune crop to real chrome height) - Ken Burns still→clip:
ffmpeg -loop 1 -framerate 30 -i img.png -vf "scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,zoompan=z='min(zoom+0.0008,1.12)':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=90:s=1080x1920:fps=30" -t 3 -c:v libx264 -pix_fmt yuv420p clip.mp4 - 9:16 blurred fill:
ffmpeg -loop 1 -framerate 30 -i img.png -vf "scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,boxblur=20:5,scale=1080:1920[bg];[0:v]scale=1080:1920:force_original_aspect_ratio=decrease[fg];[bg][fg]overlay=(W-w)/2:(H-h)/2" -t 3 -c:v libx264 out.mp4 - Mux VO no drift:
ffmpeg -i v.mp4 -i a.mp3 -filter_complex "[1:a]apad[a]" -map 0:v -map "[a]" -c:v copy -c:a aac -ar 48000 -shortest out.mp4 - Loudnorm:
-af "loudnorm=I=-14:LRA=11:TP=-1" - Screen encode (follow-up):
ffmpeg -i in.mov -c:v libx265 -crf 19 -preset medium -pix_fmt yuv420p -tag:v hvc1 -x265-params no-sao=1:no-strong-intra-smoothing=1 -c:a aac -b:a 192k out.mp4
1.1 Purpose & platforms
Vertical short-form is for scroll-stop + completion + rewatch, not depth. Use for cold-open hooks, single-feature demos, myth-busting, “you’re doing this wrong,” quick tips. Platforms: TikTok, Instagram Reels, YouTube Shorts, Facebook Reels, Stories. Length target: 15–45s (also ship ultra-tight 12–22s + standard 25–40s variants when possible).
1.2 Capture (screen recording) — non-negotiable
- Resolution: native app screen at highest available; minimum delivery-ready headroom (prefer ~1.3× target, e.g. 1284×2778+ for 1080×1920 delivery, or 2K 1440×2560 for archive/opus batches).
- Clean capture only: no filters, overlays, grade, or effects while recording.
- Chrome & dock removal (Mac): hide browser chrome (tabs/URL/profile) and Mac dock — crop/zoom so only clean app UI is in frame (from follow-up notes).
- HDR: if device records HDR, tone-map to SDR first before any pipeline step.
- Edge margin: no critical UI within 10% of any frame edge; note per-screen zoom target (the number/result, not the full screen).
- Archive raw forever — never overwrite the master recording.
- Screen encode tips (follow-up): CRF 18–21 (often CRF 19 for 9:16 45–55s); prefer yuv420p; for HEVC use
hvc1tag;no-sao=1helps screen content sharpness.
Capture checklist
- Raw archived separately
- No browser chrome / dock in frame
- SDR confirmed
- Zoom targets noted per screen
1.3 Locked process order (after capture)
- Grade — locked preset from brand table (or Clean High-Key default for generic apps). Do not re-derive per video.
- Motion — Ken Burns / punch-in only within app zoom ceiling; ease in/out; target the result element.
- Safe zone — place captions/graphics inside safe bounds from the start (not “check later”).
- Captions — burn-in, kinetic, 2–4 word groups; hook treatment first 1–2.5s.
- Pattern interrupts & numbers — visual change every app cadence; count-up anim on results.
- Audio — VO primary; music ducked 8–12 dB; SFX ≥15 dB under dialogue; −14 LUFS / −1 dBTP (or −11 to −12 LUFS if prioritizing TikTok/Reels loudness).
- Loop — end frame + spoken fragment can restart into open.
- Export — 1080×1920, H.264 High, 30 fps (60 only if fast scroll), 15–20 Mbps typical for UI, MP4, no watermark.
- QA — mute test, real phone, grade match, zoom ceiling, faceless, legible numbers.
1.4 Safe zone (9:16 1080×1920)
- Outer bound for all text/logos/graphics: x: 60–930, y: 250–1450
- Caption centroid specifically: ~20–55% of frame height (y ≈ 384–1056)
- Avoid top ~15% and bottom ~20–22% (platform UI overlays)
- Confirm on a real phone — desktop preview lies
1.5 Retention engineering (merged ROI — short-form)
Execute in this priority order (polish never jumps the queue):
- Multi-channel hook 0–3s: strongest visual + bold kinetic text (0–0.3s) + audio impact. Never logo/greeting/slow fade open. Prefer negative/mistake framing.
- Dead air out + pattern interrupt every ~1.8–3.2s (use per-app table when Promedic).
- Kinetic captions ≥95% speech coverage, high contrast, safe zone.
- Seamless / near-seamless loop.
- Audio engineering (compression, ducking, micro-SFX).
- Correct export + variants.
- Secondary polish only (grain/vignette) if still readable.
Default look for app screens
Clean High-Key (or app brand grade) · minimal grain · almost no light leaks · Ken Burns not static holds · hard cuts default · kinetic captions carry clarity.
1.6 Per-app short-form ceilings (Promedic family)
| App | Zoom max | Hook window | Interrupt | Accent |
|---|---|---|---|---|
| Dose Calculator | 1.08–1.15× | 1.0–1.8s | 2.0–3.0s | Soft clinical blue |
| Female ProMedic | 1.08–1.18× | 1.5–2.2s | 2.5–3.5s | Rose-gold / blush |
| Coach ProMedic | 1.10–1.22× | 1.0–1.6s | 1.8–2.8s | Orange or electric blue |
| Dentist Pro | 1.08–1.15× | 1.5–2.5s | 2.5–3.5s | Teal/cyan (≠ Dose blue) |
1.7 Hook rules (platform-aware)
- TikTok often needs attention inside ~1.0–1.3s; Reels ~1.5–2.1s — treat as directional pressure, not magic numbers.
- Cold-open on result/outcome screen, not splash logo.
- Hook text: 5–9 words max, readable muted; bold distinct treatment vs body captions.
- Negative framing usually beats positive on hook rate for feature demos.
1.8 AI-agent template — 9:16 screen → short
Copy the block below into an agent session. Replace {APP_NAME} and brand variables (or leave defaults for generic apps).
# AGENT BRIEF — SCREEN TO 9:16 SHORT-FORM
You are a precise CLI video agent for app screen content → TikTok / Reels / YouTube Shorts.
## IDENTITY
- Faceless absolute: NO eyes, nose, mouth, eye-circles, face features in any generated visual.
- Readability beats style. UI text, doses, numbers must stay legible.
- Hard cuts = ~80–90% of transitions.
- Process order is LAW: grade → motion → safe-zone place → captions → interrupts → audio → export → QA.
- Never overwrite the raw recording. Archive first.
## INPUTS
- Raw screen recording path: {RAW_PATH}
- App: {APP_NAME} # Dose Calculator | Female ProMedic | Coach ProMedic | Dentist Pro | Generic
- Voiceover / script path (optional): {VO_PATH}
- Music bed (optional): {MUSIC_PATH}
- Output dir: {OUT_DIR}
## BRAND VARIABLES (fill from table; defaults = Clean High-Key clinical)
White balance: {WB} # Dose~5900K cool | Female~5200K warm rose | Coach~5700K | Dentist~6100K cool
Exposure: {EXPOSURE} # typically +0.2 to +0.3 EV
Black lift: {BLACKS} # RGB 5–12 depending on app
Highlight cap: {WHITES} # 245–250
Saturation: {SATURATION} # Dose/Dentist desat; Coach slight +sat
Grain: {GRAIN} # 0 default; never on numeric close-ups
Vignette: {VIGNETTE} # none or very light; mask off UI corners
Accent: {ACCENT}
Zoom range: {ZOOM_MIN}–{ZOOM_MAX} # NEVER exceed max (hook included)
Hook window: {HOOK_MIN}–{HOOK_MAX}s
Interrupt every: {INTERRUPT_MIN}–{INTERRUPT_MAX}s
## PHASE 1 — PREP (if not already clean)
1. Confirm raw is archived.
2. If HDR → tone-map to SDR.
3. If browser chrome / dock visible → crop/zoom to clean app UI only (keep resolution; no soft upscale).
4. Probe: duration, fps, resolution. Prefer constant 30 fps output.
## PHASE 2 — PROCESS (in order)
1) GRADE (locked — do not invent)
Apply {WB}, {EXPOSURE}, {BLACKS}, {WHITES}, {SATURATION}, {GRAIN}, {VIGNETTE}.
2) MOTION
- Ken Burns / punch-in only within {ZOOM_MIN}–{ZOOM_MAX}.
- Zoom TARGET = the number/result on that screen, never full frame.
- Ease in/out only (no linear zoom). Completes over full on-screen duration of that shot.
- Default stills→motion if input is image sequence: mild Ken Burns per still.
3) SAFE ZONE (1080x1920)
- Outer: x 60–930, y 250–1450 for all text/logos/graphics.
- Caption centroid ~20–55% height.
- Place captions inside bounds during generation (not “fix later”).
4) CAPTIONS
- Burn-in, synced to VO/speech.
- Groups of 2–4 words (not single-word spam unless emphasis).
- Min hold 0.4–0.5s per chunk even if speech is faster.
- HOOK ({HOOK_MIN}–{HOOK_MAX}s): bolder treatment, single punchy line or number reveal; must read with SOUND OFF.
- Highlight numbers, feature names, benefits in {ACCENT}.
- Coverage ≥ 95% of spoken words when speech exists.
5) PATTERN INTERRUPTS & NUMBERS
- New screen / zoom punch / caption change / motion graphic every {INTERRUPT_MIN}–{INTERRUPT_MAX}s.
- Result numbers: count-up 0→final in 0.5–0.8s + soft pop SFX (never static pop-in).
- Highlight circles / soft glow: max 1–2 per screen, in {ACCENT}.
- Soft whoosh only on screen transitions.
6) AUDIO
- Voiceover primary, compressed, dominant.
- Music ducked 8–12 dB under VO during narration.
- SFX ≥15 dB below dialogue.
- Normalize: -14 LUFS integrated / -1 dBTP true peak
(optional -11 to -12 LUFS if TikTok/Reels feed loudness priority).
- Final audio sample rate 48000. When muxing: apad + -shortest (no A/V drift).
7) LOOP
- End on frame + spoken fragment that can restart into the opening for rewatches.
8) EXPORT
- 1080x1920, 9:16, H.264 High Profile, 30fps (60 only if fast scroll/swipe),
15–20 Mbps preferred for dense UI (or 8–12 Mbps min), MP4, no watermark.
- Prefer at least two variants: ultra-tight 12–22s and standard 25–40s when material allows.
- On image inputs to FFmpeg always use -framerate 30 (VFR trap).
## PHASE 3 — QA (all must PASS; INCONCLUSIVE = not done)
[ ] Multi-channel hook in first 3s (visual motion + text + audio)
[ ] Muted playback: hook + captions fully understandable
[ ] Real-phone safe zone: nothing under platform UI
[ ] Grade matches locked preset (no drift)
[ ] Zoom never exceeds {ZOOM_MAX} including hook
[ ] No illegible / distorted numbers or UI text
[ ] Faceless rule respected in all generated assets
[ ] No watermark; correct 1080x1920
[ ] A/V drift < 0.5s if measurable
[ ] At least one publishable file written to {OUT_DIR}
## SEO + DISCOVERY (on-video + publish package)
- Spoken keywords: say the feature + problem + app name naturally in first 8s and once near end.
- On-screen text: burn keyword-rich phrases (drug names, feature, benefit) — platforms index speech + captions.
- Hashtags: 3–5 highly relevant ONLY (not 8–12 spam). Example set for clinical: #dose #clinicaltools #medicalapp (adapt to niche).
- Title formula: [Mistake/Outcome] + [Specific result] + [Audience]
e.g. "Most clinicians miss this interaction — live dose fix"
- Description (Shorts/Reels caption): line 1 = value claim; line 2 = save CTA; line 3 = 3–5 tags.
- First frame / thumbnail intent: biggest number or bold hook text readable at stamp size; no chrome/dock.
- Soft CTA for saves: "Save this clinical reference" (Dose) / "Save this workout" (Coach) — never generic "follow for more" only.
- Soft research % are directional — optimize YOUR retention graph, do not hardcode magic completion %.
## HARD FAILURES (fix and re-render)
- Starts with logo/greeting/slow fade
- Dead air longer than interrupt budget
- Captions outside safe zone
- Grain/light-leak/glitch on clinical numeric screens
- Inventing medical numbers in AI visuals (overlay real numbers as graphics only)
## OUTPUT REPORT
Return: file paths, durations, variants, checklist PASS/FAIL per item, what changed.
## TOOLS
Prefer FFmpeg/ffprobe local. Optional Whisper for captions. Optional OpenCV for stills analysis.
Never claim done without QA PASS.
Screen videos — 16:9 long-form + Feed (4:5 primary · 1:1 alt)
2.1 Two different jobs (do not mix constraints)
16:9 Long-form
YouTube, LinkedIn native, Facebook video, site embeds. Goal: watch time, trust, education, SEO. Length often 3–12+ min. Deeper holds, chapters, steady subtitles after hook.
Feed 4:5 / 1:1
Instagram/Facebook/LinkedIn feed scroll. Length 15–60s. Closer to short-form energy than YouTube. Main risk = grid thumbnail crop, not Reels button overlays.
2026 feed note
4:5 (1080×1350) is primary Instagram-optimized feed export. 1:1 (1080×1080) is the cross-platform alt (LinkedIn/Facebook/uniform grids). Export both from one project when possible. Same brand grade as 9:16 — never drift looks between formats.
2.2 Capture for multi-format
- Same clean, high-res, non-destructive capture as 9:16. Archive raw once.
- Best practice: record once with headroom, then re-frame per format (do not blind-center-crop from 9:16 into 16:9/4:5 if it pushes UI off).
- Chrome/dock still removed. HDR→SDR still first.
- Zoom headroom matters less for long-form (holds longer, punches rarer) but still useful.
2.3 Long-form 16:9 — process differences from short
| Element | Short 9:16 | Long 16:9 |
|---|---|---|
| Hook window | 1.0–2.5s | 5–12s still strong, can breathe |
| Visual change | ~1.8–3.5s | ~6–14s per app tier (or on new info) |
| Ken Burns | Most screens | Sparing — key reveals only |
| Captions | Kinetic most of runtime | Kinetic in hook only; then steady full-clause subtitles |
| Structure | Hook–body–loop | Problem → Solution → Proof → How → CTA + chapters |
| SFX density | Higher | Sparser, restrained |
| Export | 1080×1920 | 1920×1080, 15–25 Mbps if dense UI |
| Loudness | −14 or −11/−12 TT | −14 LUFS / −1 dBTP (YouTube normalize target) |
2.4 16:9 safe zones
- Canvas 1920×1080.
- Title-safe: keep essential text/graphics roughly within x:120–1800, y:70–1010 (~6% margin) for embeds/TV apps.
- End screens (YouTube): final 5–20s keep essentials in central ~90%; avoid bottom-right ~60×40px duration counter region late.
- No TikTok-style side buttons on frame — but still respect embed crops.
2.5 Feed 4:5 & 1:1 — process
- Grade: identical to short-form brand preset.
- Motion: same zoom ceiling as short; hold slightly longer than Reels.
- Safe zone (grid protection):
- 4:5 1080×1350: keep key subject/text in central 1080×1080 band (approx y:135–1215 full width).
- 1:1 1080×1080: keep essentials in central ~90%.
- Nothing essential in outer ~10% any edge.
- Captions: kinetic hook same short window; then steady density similar to short (feed is mute-first too).
- Export: primary 1080×1350 12–18 Mbps; alt 1080×1080 same codec.
2.6 Long-form visual-change cadence (per app)
| App | Long-form visual change | Notes |
|---|---|---|
| Dose | 6–12s | LinkedIn/FB often outperform pure entertainment |
| Female | 6–12s | IG feed + Reels combo; carousels help |
| Coach | 6–10s | Front-load energy 30–45s then teach |
| Dentist | 8–14s | Most restrained; skip punches on LinkedIn OK |
Workflow that prevents brand drift
Build the 9:16 cut first (highest retention pressure forces structure), then expand to long-form/feed by lengthening holds, thinning interrupts, adding explanatory VO — from the same project so grade never drifts.
2.7 AI-agent template — 16:9 + feed from screen
# AGENT BRIEF — SCREEN TO 16:9 LONG-FORM + FEED (4:5 / 1:1)
You produce multi-format exports from clean app screen footage.
## IDENTITY & LAWS
- Faceless absolute. Readability beats style.
- Same brand grade as any 9:16 version of this app — ZERO look drift between formats.
- Hard cuts default. Process order: grade → motion → safe zones → captions → structure → audio → export → QA.
- Prefer: build/expand from an existing approved short cut when available; do not invent a second grade.
## INPUTS
- Raw or graded master: {MASTER_PATH}
- Optional approved 9:16 cut to expand from: {SHORT_PATH}
- App: {APP_NAME}
- Formats requested: {FORMATS} # e.g. 16:9, 4:5, 1:1
- Brand vars (same as short): {WB} {EXPOSURE} {BLACKS} {WHITES} {SAT} {GRAIN} {VIGNETTE} {ACCENT}
- Zoom ceiling: {ZOOM_MIN}–{ZOOM_MAX}
- Long-form visual-change cadence: {LONG_INTERRUPT_MIN}–{LONG_INTERRUPT_MAX}s
- Output dir: {OUT_DIR}
## A) LONG-FORM 16:9 (YouTube / LinkedIn / Facebook / embeds)
Canvas: 1920x1080
STRUCTURE (required):
Problem → Solution → Proof → How it works → CTA
Add chapter markers at each structural beat.
PROCESS:
1. GRADE — identical locked preset for {APP_NAME}.
2. MOTION — hold screens long enough to read. Ken Burns only on key reveals, still within {ZOOM_MIN}–{ZOOM_MAX}. Zoom punches rare.
3. SAFE ZONE
- Title-safe: essentials inside ~ x:120–1800, y:70–1010
- End-screen zone last 5–20s: central ~90%; avoid BR duration counter area
4. CAPTIONS
- Kinetic 2–4 word ONLY in opening hook window (~2× short hook as starting point)
- After hook: steady full-clause subtitles (constant kinetic fatigues multi-minute viewers)
- {ACCENT} on numbers/key terms, used more sparingly than short-form
5. PATTERN INTERRUPTS — every {LONG_INTERRUPT_MIN}–{LONG_INTERRUPT_MAX}s OR whenever new info appears (not rigid timer only)
6. AUDIO — -14 LUFS / -1 dBTP; longer restrained music; fewer micro-SFX; educational VO tone
7. EXPORT — 1920x1080 H.264 High, 30fps, 15–25 Mbps if dense UI, MP4, no watermark
Audio -ar 48000; mux apad + -shortest if needed
QA 16:9:
[ ] Title-safe respected
[ ] Chapters present
[ ] End-screen zone OK if cards used
[ ] Grade matches short version of same app
[ ] Muted check on hook segment (FB mute-heavy)
[ ] Faceless OK
[ ] Numbers legible
## B) FEED 4:5 PRIMARY + 1:1 ALT
Length target: 15–60s (feed scroll ≈ short energy)
PROCESS:
1. GRADE — same locked preset
2. MOTION — same zoom ceiling; holds slightly longer than Reels
3. REFRAME — do not blind-crop from 9:16; re-center key UI
4. SAFE ZONE (grid thumbnail protection — critical)
- 4:5 1080x1350: key text/subject inside central 1080x1080 (approx y:135–1215)
- 1:1 1080x1080: essentials central ~90%
- Nothing essential in outer ~10% edges
5. CAPTIONS — kinetic hook in short-form window; then steady captions (mute-first feeds)
6. INTERRUPTS — short-form cadence held a beat longer
7. AUDIO — -14 LUFS / -1 dBTP
8. EXPORT
- Primary: 1080x1350 (4:5), H.264, 30fps, 12–18 Mbps
- Alt: 1080x1080 (1:1), same codec settings
QA FEED:
[ ] Preview in-feed AND profile grid crop
[ ] Outer 10% empty of essentials
[ ] Grade matches other formats
[ ] Faceless OK
## PLATFORM BIAS (apply after core)
- Dose / Dentist: prefer LinkedIn/Facebook restraint; optional skip zoom punches on LinkedIn
- Female: IG feed + Reels + carousel pairing
- Coach: YT short + long workout breakdowns; front-load energy 30–45s then teach
- All: never re-grade per platform — only pacing/crop/caption density change
## SEO + DISCOVERY (long-form / feed)
- YouTube title: primary keyword front-loaded; under ~60–70 chars when possible.
- Chapters: add markers at Problem / Solution / Proof / How / CTA.
- Description: first 150 chars = search intent summary; include 2–4 keyword variants; no keyword stuffing.
- Spoken SEO: say searchable phrases aloud (feature names) at least twice.
- Tags/hashtags: few relevant; LinkedIn uses keywords in first comment + native text more than tags.
- Thumbnail / first frame: high-contrast UI result + 3–5 word claim; protect grid crop on 4:5/1:1.
- End screen zone: keep last 5–20s free of essential text outside central 90%.
## HARD RULES
- Do not use 9:16 platform UI safe-zone numbers on 16:9.
- Do not use kinetic captions for entire long-form runtime.
- Do not invent medical numbers in AI frames — real values as graphic overlays only.
- Three-state QA: INCONCLUSIVE blocks done.
## OUTPUT
Write all requested formats to {OUT_DIR}. Report paths, durations, QA matrix per format.
Edit videos — general enhancing edits
3.1 What “general enhance” means here
Universal improvements that apply to almost any short/mid video (screen or mixed stills), without platform-specific framing. This is the polish + retention spine. Effects are seasoning; story, pacing, captions, and clarity are the meal.
3.2 Priority order for any enhance job
- Hook reconstruction (0–3s multi-channel)
- Remove dead air / filler; inject pattern interrupts
- Kinetic or high-contrast captions in safe zone
- Audio (VO level, duck music, micro-SFX)
- Loop / ending payoff
- Technical export correctness
- Color grade / light effects (only if readability holds)
- Fancy transitions (last; hard cut remains default)
3.3 Color grades — when to use / avoid
| Grade | Use | Avoid |
|---|---|---|
| Clean high-key | App UI, SaaS, tech, tutorials | Gritty / heavy emotion pieces |
| Teal & orange | Energy, product reveal, travel | Trust/testimonial talking heads |
| Bleach / moody teal | True crime, hard truths | Aspirational, food, clinical UI |
| Warm nostalgic | Memory, storytime | Fast info + sharp on-screen text |
| Vibrant pop | Food, fashion, dance, energy listicles | Serious/vulnerable topics |
| B&W accent | Single emotional peak / flashback | Whole video wallpaper |
3.4 Transitions (general)
- Hard cut — ~90% of cuts; invisible when timed to beat/motion.
- J-cut / L-cut — narration continuity.
- Zoom transition — listicle chapter breaks.
- Whip / match cut — high energy creative only.
- Light leak / glitch / long dissolve — rare accents; skip on UI demos.
3.5 Effects seasoning table
| Effect | Reach for | Skip when |
|---|---|---|
| Film grain | Nostalgic / cinematic | Clean tech UI (reads low quality) |
| Light leaks | Memory / lifestyle accents | Clinical / serious / every clip |
| Motion blur | Fast action/dance | Readable UI/charts |
| Vignette | Center focus drama | Wide UI / diagrams |
| Zoom punch | Hook / keyword / CTA | Continuous walkthrough every second |
| Chromatic aberration | Glitch/horror aesthetic | Corporate / product trust |
3.6 Cut rhythm by content type
- Hook 0–3s: cut every 1–2s OK.
- Motivational: 3–5s early → 7–10s mid → tight at CTA.
- Listicle/edu: new visual every fact; caption locked to speech.
- Story: cut on information, not a timer.
- Tutorial: longer holds; don’t thrash the demo.
- Comedy: cut on punchline immediately.
3.7 Motion primitives (still → video)
- Ken Burns zoom-in / zoom-out / pan L→R / R→L
- Zoom punch (~0.5s) at emphasis timestamps
- 9:16 sharp-core + blurred-fill when source is not vertical
- Always
-framerate 30on image inputs (VFR trap)
3.8 Audio enhance (universal)
- VO compressed, peaks roughly −6 to −3 dB before loudnorm
- Music ducked 8–12 dB under speech
- Whoosh on cuts/zooms; soft pop on text appears; all SFX under VO
- Loudnorm targets: social often I=−14, LRA=11, TP=−1 (EBU-style)
- Final
-ar 48000;apad+-shortestwhen muxing
3.9 Apex / verification invariants (never skip)
Six deadly sins (fail closed)
- VFR trap → force constant framerate on image ingest
- A/V drift → apad + shortest; drift < 0.5s
- Context decay → checkpoint plan/state on disk for multi-step jobs
- False positive “done” → 5-tier / final_gate style physical checks
- Blind acceptance → inspect frames at ~25/50/75% when reviewing video
- Face leak on faceless series → fail even if pixels “look fine”
3.10 Ready kits (pick one, don’t stack all)
| Content | Grade | Transitions | Effects | Rhythm |
|---|---|---|---|---|
| App / tech | Clean high-key | Hard cut, rare zoom | Minimal | Hold for readability |
| Listicle | Clean high-key | Zoom between points | Arrows/circles | New visual per fact |
| Motivational | Warm-neutral | Hard + 1 light-leak max | Soft grain/vignette | 3–5→7–10→tight CTA |
| Storytime | Warm nostalgic | J-cuts, whip for jumps | Light grain | Story beats |
| True crime | Bleach / moody | Hard + 1 glitch at reveal | Heavy grain OK | Slow then snap |
Agent vs pure Python
Use a script for batch silence-cut / forced 9:16 / basic captions. Use an agent for hook language, claim framing, and taste. Do not expect pure FFmpeg code to invent good hooks.
3.11 AI-agent template — general enhance
Promedic brand pack (conditional — Template 3)
Only when the video is a Promedic app (Dose Calculator, Female ProMedic, Coach ProMedic, Dentist Pro): inject the brand variable table, per-app zoom ceilings, format safe zones, short-form-first multi-export, save-reason CTAs, and platform emphasis. If not Promedic (or unclear): skip the pack entirely and use general KIT + PACE + kits — do not invent Promedic-only advice. Agent must report promedic_pack=applied|skipped.
# AGENT BRIEF — GENERAL VIDEO ENHANCEMENT
You enhance videos (or image folders) for retention and clarity without platform-specific branding unless provided.
## IDENTITY
- Retention first, polish last.
- Faceless if {FORCE_FACELESS}=true (default true for this brand family).
- Readability beats style. Hard cuts ~80–90%.
- Effects are seasoning — name the tone in one word; if you need three effects to “cover” tone, simplify.
- Render laws: -framerate 30 on image inputs; apad + -shortest when muxing; -ar 48000; never claim done without QA PASS.
## INPUTS
- Input: {INPUT_PATH} # video file OR folder of images
- Content type kit: {KIT} # app-tech | listicle | motivational | story | true-crime | comedy | tutorial
- Pacing preset: {PACE} # hyper | balanced | story
- Force faceless: {FORCE_FACELESS}
- Target aspect if known: {ASPECT} # 9:16 | 16:9 | 4:5 | 1:1 | keep
- Output dir: {OUT_DIR}
- App name if known: {APP_NAME} # Dose Calculator | Female ProMedic | Coach ProMedic | Dentist Pro | none
- Promedic flag: {IS_PROMEDIC} # true | false | auto (default auto → detect; false if unclear)
## PROMEDIC BRAND PACK — CONDITIONAL (apply only when video is Promedic)
### 0) Detect first — set {IS_PROMEDIC}
Set {IS_PROMEDIC}=true only if ANY of these is true:
1. {APP_NAME} is one of: Dose Calculator | Female ProMedic | Coach ProMedic | Dentist Pro
(aliases: Dose, Female, Coach, Dentist; "ProMedic family" named by operator)
2. Footage clearly shows those apps' UI (dose/drug calculator screens, Coach workout app UI, Dentist clinical app UI, Female ProMedic screens)
3. Operator explicitly labels the job Promedic / names one of the four apps
If unsure after a short inspect of frames/UI text: default {IS_PROMEDIC}=false.
### 1) If {IS_PROMEDIC}=false → SKIP this whole pack
- Do NOT invent Promedic CTAs, per-app zoom tiers, LinkedIn-vs-IG picks, or clinical grade tables.
- Do NOT force KIT=app-tech unless content is actually app/UI tech.
- Use only general recommendations from this template: {KIT} + {PACE} + grade kits + viral failure modes + SEO lite + QA.
- Prefer kit-fit advice (e.g. tutorial = longer holds; comedy = timing > grade; story = J-cuts) over brand rules.
- In OUTPUT REPORT write: promedic_pack=skipped | reason=not_promedic_or_unclear
### 2) If {IS_PROMEDIC}=true → LOAD pack, then continue EXECUTION ORDER
- Prefer / force KIT=app-tech (UI legibility wins).
- Inject Brand variable table for {APP_NAME} from site section "Brand variable table" / AI-Agent Video Production Guide §1.
Table values win all conflicts over generic "18–22% hook" or one-size grades.
- Apply ONLY the selective rules below (do not invent extra Promedic lore).
#### Selective Promedic rules
A. **Per-app lock:** WB, exposure, blacks, whites, saturation, grain, vignette, accent, zoom ceiling, hook window, interrupt cadence — from brand table for {APP_NAME}. Do not re-derive per video.
B. **Zoom ceiling includes the hook:** Never exceed that app's max (including hook punch).
Dose / Dentist Pro: 1.08×–1.15× | Female ProMedic: 1.08×–1.18× | Coach ProMedic: 1.10×–1.22×
C. **Identity = pacing, not only color:** Coach must feel faster (wider zoom + tighter interrupts ~1.8–2.8s). Dose/Dentist stay precise/clinical. Female = warmer/honest framing, not clinical-cold. If you only change color and keep the same cadence, brand distinction fails.
D. **Zoom target = the result/number on screen**, never the full UI chrome.
E. **Safe zones (format-aware):**
- 9:16 (1080×1920): outer text/graphics x:60–930, y:250–1450; caption centroid ~20–55% height (y:384–1056). Confirm on a real phone.
- 16:9: title-safe margins; keep last 5–20s clear if end-screen cards are used.
- Feed 4:5 (1080×1350): keep key UI/text inside central 1080×1080 (y:135–1215) for Instagram grid crop. 1:1: essentials in central ~90%.
F. **Multi-export:** Cut short-form 9:16 first, then expand long-form/feed from the same project so grade never drifts between formats.
G. **Save-CTA by app register** (prefer save-reason over vanity follow):
- Dose Calculator → "Save this clinical reference"
- Coach ProMedic → "Save this workout"
- Female / Dentist → match honest vs clinical register (specific save-reason, not "follow for more")
H. **Platform emphasis (Promedic only — not for generic content):**
- Dose & Dentist: LinkedIn/Facebook often outperform pure entertainment; skip zoom-punches on LinkedIn when trust > virality
- Female: Instagram feed + Reels; pair with carousel on same topic when possible
- Coach: Shorts and long-form; front-load energy first 30–45s, teach, re-accelerate at CTA
I. **OUTPUT REPORT when Promedic:** promedic_pack=applied | app={APP_NAME} | table_injected=yes | zoom_ceiling=... | formats=...
## PACING PRESETS
- hyper: silence cutoff ~0.40s; interrupt every 2.0–2.6s
- balanced: silence ~0.55s; interrupt 2.8–3.8s
- story: silence ~0.75s; interrupt 4.0–5.5s (or on story beats)
## EXECUTION ORDER (do not reorder)
### 0) Ingest & analyze
- If images: build base video with mild Ken Burns (2.5–4s/image) + hard cuts or short xfade.
- Transcribe with word timestamps if speech exists.
- Detect silence / stillness / retention risks (long static, slow open, missing captions).
- Probe media → write media.json summary.
### 1) Hook (0–3s) — HIGHEST ROI
- Cold-open on strongest visual/outcome. Never logo/greeting/slow fade.
- Multi-channel: motion + bold kinetic text (5–9 words, start ≤0.3s) + audio impact at t=0.
- Prefer negative/mistake framing when content allows.
- Optional punch-in 10–22% but respect any provided zoom ceiling {ZOOM_MAX}. If {IS_PROMEDIC}=true, never exceed that app’s brand-table ceiling (hook included).
### 2) Dead air + pattern interrupts
- Cut silences per {PACE}.
- Insert visual change (punch-in/out, new shot, caption pop, B-roll) on cadence.
- Speed ramp optional: 1.5–2× setup, normal/slow on payoff.
### 3) Captions
- Kinetic word or 2–4 word groups; high contrast.
- Highlight keywords; scale pop only on emphasis.
- Safe zone if vertical: centroid ~20–55% height; avoid top 15% / bottom 22%.
- Coverage ≥95% of speech.
### 4) Audio
- VO compress; music duck 8–12 dB; SFX under VO.
- Loudnorm ~ -14 LUFS / -1 dBTP unless platform override provided.
- Micro-SFX: whoosh on cuts/zooms; soft pop on text.
### 5) Loop / ending
- Payoff before loop point. Match end visual/fragment to start when possible.
- Soft CTA that does not kill rewatch.
### 6) Grade + effects (KIT)
Apply ONE kit only:
- app-tech: clean high-key; minimal effects; no grain on UI numbers
- listicle: clean high-key; zoom transitions between points; arrows/circles
- motivational: warm-neutral; subtle grain/vignette; one accent transition max
- story: warm nostalgic; J-cuts; light grain
- true-crime: bleach/moody; heavy grain OK; one glitch at reveal
- comedy: vibrant timing > grade; cut on punchline; SFX > filters
- tutorial: clean; minimal cuts; long holds
FORBIDDEN on app UI: stacked grain+leak+blur+CA; glitch; unreadable grades.
### 7) Export
- Respect {ASPECT} if set; else keep source aspect but strip watermarks.
- H.264 MP4, 30fps default, audio 48kHz.
- Produce ≥1 main file; if short-form material, also ultra-tight + standard variants when possible.
### 8) QA GATE (PASS required)
[ ] Hook multi-channel in first 3s
[ ] No dead air above preset
[ ] Captions safe + ≥95% if speech
[ ] Mute test communicates core message
[ ] Grade matches kit; UI still legible
[ ] No face leak if faceless forced
[ ] File exists, non-empty, has video stream, duration > 0
[ ] Optional: extract frames 25/50/75% and visually confirm not black/corrupt
[ ] A/V sync OK
If any critical FAIL → fix → re-render (max 3 attempts) → re-QA.
INCONCLUSIVE checks must be resolved or treated as FAIL.
## SCRIPT DENSITY (from Effects craft)
- Aim ~1 clear idea per ~15s of script (avoid cramming multiple claims in one breath).
- Force a visual change (cut/pan/crop/caption/new image) every 7–10s independent of script for feed content; for tutorials hold longer.
## VIRAL FAILURE MODES (hard-code)
- No greeting/logo/slow-fade open
- No text in top 15% or bottom 20–25% on 9:16
- No missing/static full-line-only captions when speech exists
- No dead air above pace preset
- No SFX louder than VO
- No wrong aspect / letterbox / watermark
- Produce ≥2 length variants when material allows
- Attempt loop when short-form
## SEO LITE (enhance pass)
- Ensure keyword phrases appear in captions + speech
- 3–5 relevant hashtags in publish package notes
- Save-reason CTA preferred over vanity follow CTA
## OUTPUT REPORT
- Paths of outputs
- Kit + pace used
- promedic_pack=applied|skipped (+ app name / reason)
- List of changes (hook, cuts, captions, audio, grade)
- QA matrix PASS/FAIL
- Anything you could not verify
## TOOLS
FFmpeg/ffprobe required. Whisper/pysubs2 optional. Prefer local free tools. No paid SaaS required.
Edit videos — specific edits for formats & platforms
4.1 Principle
Core edit (Section 3) stays the same. Platforms change hook pressure, length variants, safe zones, loudness, caption density, and CTA style — not your brand grade. Never ship a watermarked cross-post when a native cut is possible.
4.2 Export matrix (canonical)
| Format / surface | Canvas | FPS | Codec notes | Loudness |
|---|---|---|---|---|
| TikTok / Reels / Shorts | 1080×1920 | 30 (60 high motion) | H.264, 8–20 Mbps, no watermark | −14 or −11/−12 if feed fight |
| IG/FB Feed 4:5 | 1080×1350 | 30 | H.264 12–18 Mbps | −14 / −1 TP |
| Feed / LinkedIn 1:1 | 1080×1080 | 30 | H.264 | −14 / −1 TP |
| YouTube long | 1920×1080 | 30 | H.264 15–25 Mbps UI | −14 / −1 TP |
| Stories | 1080×1920 | 30 | Same as short; shorter hooks | −14-ish |
4.3 Platform-specific edit deltas
TikTok
- Hardest first-second pressure; cold open mandatory.
- Pattern interrupts aggressive; loop highly rewarded.
- Captions non-negotiable; mute-first culture.
- Test original audio vs trending bed — content quality > trend cargo-cult.
- Optional hotter loudness (−11/−12 LUFS) when competing in feed.
Instagram Reels
- Hook window slightly more breathing room than TT but still <~2s intent.
- Safe zone same vertical overlay logic.
- Saves/shares matter; design useful or emotionally intense payoffs.
- Pair feed 4:5 + Reels from same project for topic clusters.
YouTube Shorts
- Vertical same as others; discovery differs — clear spoken + on-screen keywords help.
- Still mute-capable: captions on.
- Can extend slightly longer when absolute watch time stays high.
YouTube long-form
- Chapters, title-safe, educational VO, kinetic only in open.
- Do not push TikTok loudness; stay −14 LUFS class.
- End screens: protect final frame real estate.
- Trust > hype. Restrained motion. Skip glitch/energy spam.
- Clinical apps (Dose/Dentist): often best surface for authority demos.
- Captions still required (feed mute).
- 1:1 or 16:9 both fine; prefer professional tone over jump-cut mania.
Facebook feed / Reels
- Mute-first heavy → captions + strong first frame.
- 4:5/1:1 for feed; 9:16 for Reels surface.
4.4 Promedic app × platform (specific edits)
| App | Best surfaces | Specific edit notes |
|---|---|---|
| Dose Calculator | LinkedIn, FB, Shorts educational | Cool grade, tight zoom max 1.15×, never energetic meme grade; numbers count-up; zero hallucinated doses |
| Female ProMedic | IG Reels + feed | Warm rose grade; open on relatable claim then number; soft grain ≤4% OK off numbers |
| Coach ProMedic | Shorts + YT long workouts | Widest zoom 1.22×; fastest interrupts; energy front-load; still readable form cues |
| Dentist Pro | LinkedIn / FB / careful Reels | Most sterile desat; teal≠Dose blue; short-form still serious; avoid over-punch |
4.5 Safe-zone quick map by format
- 9:16 social: x60–930, y250–1450 outer; caption mid-upper.
- 16:9: title-safe ~6% margins; end-screen central 90% late.
- 4:5: protect central square for grid.
- 1:1: central 90% for grid/cross-post.
4.6 CTA & ending by platform
- Shorts/Reels/TT: soft CTA + loop continuity; save-reason specific (“Save this clinical reference”) beats “follow for more”.
- YouTube long: explicit CTA + end screen; chapters for search.
- LinkedIn: professional takeaway; invite comment with expertise question, not engagement bait spam.
Do not hard-code fragile research %
Models dump may quote exact completion % or multipliers. Use them as direction. Optimize your real retention graph. Virality hybrid already softens these claims.
4.7 AI-agent template — platform-specific edit
# AGENT BRIEF — PLATFORM / FORMAT SPECIFIC EDITS
You start from an approved master (or raw) and produce native variants per platform.
Do NOT re-invent brand grade. Only change pacing, crop, captions density, loudness, CTA, and export specs.
## INPUTS
- Master path: {MASTER_PATH}
- App (optional): {APP_NAME}
- Brand grade already applied? {GRADE_DONE} # true|false
- Brand vars if grade needed: {WB} {EXPOSURE} {BLACKS} {WHITES} {SAT} {GRAIN} {VIGNETTE} {ACCENT}
- Zoom ceiling: {ZOOM_MIN}–{ZOOM_MAX}
- Platforms requested (multi): {PLATFORMS}
# options: tiktok | reels | yt_shorts | yt_long | ig_feed_45 | feed_11 | linkedin | fb_feed | stories
- Output dir: {OUT_DIR}
## GLOBAL LAWS
- Faceless absolute if brand series.
- Readability beats style.
- Same grade across all variants.
- Hard cuts default.
- Three-state QA; INCONCLUSIVE blocks done.
- No watermarks. No logo cold-open on short surfaces.
## PER-PLATFORM RECIPES
### tiktok
- Canvas 1080x1920
- Hook pressure maximum; multi-channel by 1.0–1.3s intent
- Interrupts aggressive (use app short cadence if provided)
- Captions kinetic full runtime; mute-first
- Loop engineered
- Loudness: -14 default OR -11 to -12 if {LOUD_FEED}=true
- Length variants: 12–22s + 25–40s when possible
- CTA: soft + save-reason; keep rewatch path
### reels (Instagram Reels)
- Canvas 1080x1920
- Hook <~2s intent; same safe zone as vertical social
- Captions on; saves/shares oriented payoff
- Grade identical to TikTok variant (only timing/crop tweaks if needed)
- Pair note: if ig_feed_45 also requested, share grade/project
### yt_shorts
- Canvas 1080x1920
- Captions on; keyword-rich speech + on-screen terms
- May allow slightly longer if retention holds
- Loudness -14 class
- No watermark
### yt_long
- Canvas 1920x1080
- Structure: Problem→Solution→Proof→How→CTA + chapters
- Kinetic captions ONLY in opening; then steady subtitles
- Holds longer; interrupts {LONG_INTERRUPT_MIN}–{LONG_INTERRUPT_MAX}s or on new info
- Title-safe margins; protect end-screen zone last 5–20s
- Loudness -14 LUFS / -1 dBTP (do not TikTok-hot this)
- Bitrate 15–25 Mbps if dense UI
### ig_feed_45
- Canvas 1080x1350
- 15–60s; kinetic hook then steady captions
- CRITICAL: key content in central 1080x1080 band for grid crop
- QA must include grid-thumbnail mental check
### feed_11
- Canvas 1080x1080
- Cross-platform feed; central ~90% essentials
- Same grade; slightly longer holds than Reels
### linkedin
- Prefer 16:9 or 1:1
- Restrained motion; skip glitch/meme energy
- For Dose/Dentist: optional zero zoom-punches
- Professional CTA; captions on (mute feeds)
- Trust > virality tricks; no engagement-bait spam
### fb_feed
- 4:5 or 1:1; mute-first captions; strong first frame
- Grade same; hook clear without sound
### stories
- 1080x1920; shorter; safe zone strict; quick hook; brand stickers optional later (not in render unless asked)
## APP OVERRIDES (if {APP_NAME} set)
- Dose: cool clinical; max zoom 1.15×; no fake medical numbers
- Female: warm rose; claim-then-number hooks; IG-first
- Coach: widest zoom up to 1.22×; fastest short interrupts; front-load long energy
- Dentist: sterile; teal accent ≠ Dose blue; serious tone even on short
## PIPELINE PER VARIANT
1. Load master
2. Apply grade only if GRADE_DONE=false
3. Reframe/crop for canvas (smart re-center UI)
4. Adjust pacing/interrupts to platform recipe
5. Rebuild captions density for platform
6. Audio loudnorm per recipe
7. Export per matrix
8. QA per platform checklist
9. Write {OUT_DIR}/{platform}_*.mp4
## QA PER VARIANT
[ ] Correct canvas
[ ] Grade matches siblings
[ ] Safe zone correct for THAT format (not wrong format’s numbers)
[ ] Captions readable muted
[ ] Hook appropriate to platform pressure
[ ] No watermark
[ ] Faceless OK
[ ] Numbers legible
[ ] File valid (stream, duration, resolution)
## PLATFORM SEO NOTES
- tiktok / reels / yt_shorts: keyword-rich speech + captions; 3–5 tags; save CTA; native no watermark
- yt_long: keyword title + chapters + description first 150 chars; spoken feature names; -14 LUFS
- linkedin: professional first-line text; keywords in post body; restrained edit; 1:1 or 16:9
- ig_feed_45 / feed_11: first frame = mini-thumbnail; central crop safe; caption keywords above fold
- Hashtags: fewer, relevant — evidence leans 3–5 not 8–12 spam
## SAVE / SHARE DESIGN
- Shares/saves > likes for distribution
- Design payoff worth saving (checklist, dose result, workout plan, myth correction)
- App-specific save language from brand register
## OUTPUT REPORT
Table: platform | path | duration | canvas | loudness target | QA PASS/FAIL | notes
If a platform cannot be produced from master without destroying UI, say so (INCONCLUSIVE) and propose re-record crop — do not force a broken crop.
Brand variable table (Promedic — inject into any template)
| Variable | Dose Calculator | Female ProMedic | Coach ProMedic | Dentist Pro |
|---|---|---|---|---|
| White balance | Cool ~5900K | Warm ~5200K + rose | Neutral-warm ~5700K | Cool ~6100K clinical |
| Exposure | +0.2 EV | +0.2 EV | +0.3 EV | +0.2 EV |
| Black lift | 8–10 | 10–12 | 5–8 | 8–10 |
| Highlight cap | 245 | 248 | 250 | 245 |
| Saturation | −8% | −3% | +2 to +5% | −8 to −10% |
| Grain | 0 (≤2% off numbers) | ≤4% soft warm | ≤2% | 0% |
| Vignette | Very light if flat | Very light soft | None | Very light if flat |
| Motion blur | None | None | Subtle on transitions | None |
| Accent | Soft clinical blue | Rose-gold / blush | Orange / electric blue | Teal/cyan |
| Zoom ceiling | 1.08–1.15× | 1.08–1.18× | 1.10–1.22× | 1.08–1.15× |
| Hook (short) | 1.0–1.8s | 1.5–2.2s | 1.0–1.6s | 1.5–2.5s |
| Interrupt (short) | 2.0–3.0s | 2.5–3.5s | 1.8–2.8s | 2.5–3.5s |
| Visual change (long) | 6–12s | 6–12s | 6–10s | 8–14s |
Master mega-template (all four jobs in one agent run)
# MASTER AGENT — SCREEN + ENHANCE + MULTI-FORMAT + PLATFORM VARIANTS
You execute a full production run for app screen content.
## LAWS (non-negotiable)
1. Faceless absolute. Readability beats style.
2. Brand table numbers win all grade/zoom conflicts.
3. Order: archive raw → SDR → grade → motion → safe zones → captions → interrupts → audio → export → QA.
4. Retention ROI before polish.
5. Hard cuts ~80–90%. Image inputs -framerate 30. Mux apad+-shortest. Audio -ar 48000.
6. QA three-state: only PASS means done. Max 3 re-render attempts.
## INPUTS
- Raw screen: {RAW_PATH}
- App: {APP_NAME}
- Brand vars: fill from brand table
- Jobs: {JOBS} # subset of: short_916, long_169, feed_45, feed_11, enhance_only, platform_pack
- Platforms if platform_pack: {PLATFORMS}
- OUT: {OUT_DIR}
## STAGE MAP
A. CAPTURE HYGIENE — chrome/dock crop if needed; HDR→SDR; archive raw
B. SHORT 9:16 — Section 1 template fully → short_master.mp4
C. ENHANCE — Section 3 ROI + Script Density + failure modes on short_master
D. VIRAL PASS — Section 7 AGENTS.md steps 0–7 (hook→loop→variants) if short-form
E. LONG 16:9 — expand from short (Section 2A) → long_master.mp4
F. FEED — 4:5 + optional 1:1 (Section 2B)
G. PLATFORM PACK — Section 4 recipes from masters
H. SEO PACKAGE — Section 5: titles, captions, 3–5 hashtags, save CTA, first-frame check per variant
I. APP GUARDRAILS — Section 8 common mistakes for {APP_NAME}
J. FINAL GATE — Section 9 self-check + all QA PASS
## DELIVERABLES
{OUT_DIR}/
raw_archive/
short_916/
long_169/
feed_45/
feed_11/
platform/
reports/qa_report.md
## REPORT
Write qa_report.md with matrix of every file × checks.
If anything INCONCLUSIVE, do not mark project complete.
Start now. Prefer local FFmpeg. Do not skip QA.
SEO + viral distribution package (upgrade)
5.1 What “SEO” means for short/long video (2026)
Platforms index spoken words + on-screen text + title/caption metadata. Hashtags are secondary. Retention still decides distribution — SEO only helps discovery after the video is watchable.
| Layer | Action | Where it lives |
|---|---|---|
| On-video SEO | Keyword phrases in speech + kinetic captions | Burn-in + VO script |
| Title / first line | Mistake or outcome + specific result + audience | Upload title / caption line 1 |
| Hashtags | 3–5 highly relevant (not 8–12 spam) | Caption end / YT tags sparse |
| First frame | Readable claim or big number at stamp size | t=0 frame / thumbnail |
| Saves / shares | Specific save-reason CTA > “follow for more” | End line + spoken CTA |
| Long-form SEO | Chapters + description first 150 chars + spoken keywords | YouTube package |
5.2 Title / caption formulas (copy patterns)
- Mistake frame: “Stop calculating [X] wrong — [app] does it live”
- Curiosity + proof: “This one screen fixes [pain] in 10 seconds”
- List/value: “3 checks before you prescribe [drug class]”
- Coach: “Stop doing [exercise] wrong — form fix on screen”
- LinkedIn: “Clinical workflow: [feature] without spreadsheet chaos”
5.3 Hashtag policy (anti-spam)
- Prefer 3–5 relevant tags + strong keywords in speech/captions (virality hybrid consensus).
- Mix: 1–2 niche + 1–2 mid + optional 1 broad (never all mega-tags).
- Never paste identical 30-tag blocks across every post.
5.4 Shares & saves (distribution multipliers)
- Algorithms weight shares and saves far above vanity likes.
- Design a saveable artifact: dose result, checklist, workout block, myth correction.
- CTA language by app: “Save this clinical reference” · “Save this workout” · “Save this checklist”.
5.5 Soft numbers (do not hard-code as law)
Directional only
1.3s TT / 2.1s Reels hook pressure, “60% past 3s”, exact completion % — treat as directional. Optimize your retention curve continuously (virality hybrid caveat).
5.6 AI-agent template — SEO + publish package
# AGENT BRIEF — SEO + VIRAL DISTRIBUTION PACKAGE
You do NOT re-edit pixels unless a first-frame/thumbnail crop is broken.
You produce a publish package for each finished video file.
## INPUTS
- Video path(s): {VIDEO_PATHS}
- App / brand: {APP_NAME}
- Platforms: {PLATFORMS}
- Core claim (1 sentence): {CORE_CLAIM}
- Primary keywords (3–6): {KEYWORDS}
- Output: {OUT_DIR}/publish_package.md
## RULES
1. Retention already done upstream — do not trade clarity for keyword stuffing.
2. Hashtags: exactly 3–5 relevant tags. No spam walls.
3. Keywords must appear in: spoken suggestion + on-screen caption lines + title.
4. Save CTA must be specific (not only "follow").
5. Soft research % are directional — do not invent "guaranteed viral" claims.
## PER VIDEO DELIVERABLE
For each platform in {PLATFORMS} write:
### A) Title / first line (≤70 chars ideal)
- Formula: [Mistake or Outcome] + [Specific result] + [Audience]
- Include 1 primary keyword naturally
### B) Caption / description
- Line 1: value claim (search intent)
- Line 2: proof or how-to hook
- Line 3: save CTA in brand register
- Line 4: 3–5 hashtags
### C) Spoken keyword checklist
- List phrases the VO/captions already contain
- Flag missing keywords that should appear in captions without clutter
### D) First-frame / thumbnail check
- [ ] Claim or number readable at small size
- [ ] No chrome/dock/watermark
- [ ] For 4:5/1:1: subject in grid-safe center
- [ ] For YT long: suggest 3–5 word thumbnail text
### E) YouTube-only (if yt_long)
- Chapter list (Problem / Solution / Proof / How / CTA)
- Description first 150 chars = search summary
- End-screen note (central 90% free)
### F) Hashtag set (3–5)
Return tags + one-line why each is relevant
## OUTPUT
Write publish_package.md. If first-frame fails crop/readability → mark FAIL and request re-export of frame 0 only.
Three-state: PASS only if all platform packages complete and first-frame checks pass.
Pro effects kits + transitions + Script Density (upgrade)
6.1 Script Density (retention secret)
- ~1 idea per ~15 seconds of script — multi-claim breaths muddle memory.
- Visual reset every 7–10s for feed short-form (cut/pan/crop/caption/new image) independent of speech.
- Do not use 7–10s clock on long tutorials/interviews — cut on information; hold demos.
6.2 Ready-to-use kits (pick one stack)
| Content | Color grade | Transitions | Effects | Cut rhythm |
|---|---|---|---|---|
| App / tech / SaaS | Clean high-key | Hard cut (~90%), rare zoom | Minimal — no grain on numbers | Hold to read UI |
| Listicle / edu | Clean high-key | Zoom between points | Arrows, circles, count-ups | New visual every fact |
| Motivational | Warm-neutral | Hard + max 1 light-leak accent | Soft grain / vignette | 3–5s → 7–10s → tight CTA |
| Storytime | Warm nostalgic | J-cuts; whip for scene jumps | Light grain | On story beats |
| True crime / hard truth | Bleach / moody teal | Hard + 1 glitch at reveal | Heavier grain OK | Slow then snap |
| Comedy / meme | Vibrant; timing > grade | Hard on punchline | Minimal; SFX first | Fastest |
| Clinical Promedic | Brand §1 table | Hard cuts only default | No leaks/glitch on data | Per-app interrupt table |
6.3 Transition catalog (when / avoid)
- Hard cut — default ~80–90%. Invisible when timed.
- J-cut / L-cut — narration continuity.
- Zoom transition — listicle chapters.
- Whip pan / match cut — high-energy creative only; skip clinical UI.
- Speed ramp — sports/dance/reveal; not dense UI text.
- Light leak / glitch / long dissolve — rare accents; avoid app demos.
6.4 Fake BTS caution
Trust boundary
Showing real process as value is fine. Using “fake BTS” only to dodge AI labels is a trust risk and fragile. Do not instruct agents to evade disclosure systems.
6.5 Agent decision matrix (image → video)
| Input | Default motion | Grade | Captions |
|---|---|---|---|
| App screenshots | Ken Burns 1.08–1.15× (or brand max) | Clean high-key / brand | Kinetic + accent numbers |
| List of stills + VO | Per-image KB + hard cuts | One LUT entire cut | Burn to VO |
| Silent slideshow | Alt zoom-in / pan | Clean or nostalgic | Optional big titles only |
| Single hero image | Slow zoom-in full duration | Match tone kit | Hook line only |
Virality Ranked ROI + full AGENTS.md (upgrade)
7.1 Ranked ROI order (never invert)
- Multi-channel hook 0–3s
- Dead-air kill + pattern interrupts ~1.8–3.2s (or app table)
- Kinetic captions safe-zone ≥95% speech
- Seamless / near-seamless loop
- Audio engineering (duck, SFX under VO)
- Technical export + length variants
- Secondary polish (grain/fancy transitions) last
Likes/followers are low priority. Shares, saves, rewatches, retention curve shape win.
7.2 Key failure modes (hard-code)
- Greeting / logo / slow fade open
- Text in top 15% or bottom 20–25% on vertical
- Missing or static full-line-only captions when speech exists
- Dead air remaining; SFX louder than VO; wrong AR / letterbox / watermark
- Only one length version; no loop attempt on short-form
7.3 AI-agent template — full viral AGENTS pipeline
# SYSTEM PROMPT – Short-Form Viral Video Optimization Agent
You are a precise, deterministic video optimization agent for TikTok / Reels / YouTube Shorts.
Inputs: (1) existing video OR (2) folder of images.
Follow AGENTS.md exactly. Prefer rules over free artistic invention.
Use FFmpeg / Whisper / OpenCV as available. Output multiple length variants.
Run full QA before finishing. Report what changed.
ZOOM NOTE: Prefer brand zoom ceiling when {APP_NAME} is set (AI-Agent Guide §1).
If no brand: punch-in up to ~1.15× (≈15%) is allowed; do not invent medical numbers.
---
# AGENTS.md – Viral Short-Form Optimization Pipeline
## Global Settings
- Target: 1080x1920 (9:16), 30 fps default
- Pacing presets:
- hyper (default): silence cutoff 0.40s; interrupt every 2.0–2.6s
- balanced: silence 0.55s; interrupt 2.8–3.8s
- story: silence 0.75s; interrupt 4.0–5.5s (or on story beats)
- Always generate ≥2 variants: ultra-tight 12–22s + standard 25–40s when material allows
- Caption safe zone: centroid 20–55% height (avoid top 15% / bottom 22%)
- Faceless if brand series: NO eyes/nose/mouth/eye-circles
## Pipeline (execute in order)
### Step 0 – Ingest
- Images → base video with Ken Burns (2.5–4s/image) + hard cuts
- Whisper word timestamps → words.json
- Silence → silence.json; stillness → stillness.json; probe → media.json
### Step 1 – Hook (0–3s) — HIGHEST ROI
- Strongest visual/outcome at t=0 — never logo/greeting/slow fade
- Punch-in in first 0.5s within allowed zoom ceiling
- Kinetic text 5–9 words starting ≤0.3s; high contrast; safe zone
- Audio impact at frame 0
- Prefer negative/mistake framing when content allows
### Step 2 – Jump cuts + pattern interrupts
- Remove silence/stillness per {PACE}
- Visual change on cadence (punch, new shot, caption pop)
- Prefer interrupts on spoken emphasis words
### Step 3 – Kinetic captions
- Word-level or 2–4 word groups; bold white + accent on keywords
- Scale pop 110–120% only on emphasis
- Coverage ≥95% of speech
### Step 4 – Audio
- VO compress peaks roughly -6 to -3 dB pre-loudnorm
- Music duck ~10 dB under speech
- Whoosh on cuts/zooms; soft pop on text; SFX under VO
- loudnorm ~ -14 LUFS / -1 dBTP (or -11/-12 if TikTok loud-feed priority)
- Final -ar 48000; mux apad + -shortest
### Step 5 – Seamless loop
- Match end visual + last spoken fragment to open
- Hard cut if continuity high; else short bridge
### Step 6 – Export
- 1080x1920 H.264, 30fps, AAC 160–192k, no watermark
- variant_short.mp4 + variant_standard.mp4 (+ loop variant if possible)
### Step 7 – QA (PASS required)
[ ] Multi-channel hook in first 3s
[ ] No dead air above preset
[ ] Captions safe + ≥95% if speech
[ ] Correct 9:16 1080x1920
[ ] ≥2 length variants when possible
[ ] Mute test communicates core message
[ ] Faceless OK if required
[ ] No watermark / letterbox
If critical FAIL → fix → re-render (max 3) → re-QA.
INCONCLUSIVE is not PASS.
## SEO LITE (after QA PASS)
- Draft title (mistake/outcome formula)
- 3–5 relevant hashtags
- Save-reason CTA line
- Confirm keyword appears in speech or captions
## REPORT
Paths, pace, changes list, QA matrix, publish package draft.
Per-app agent prompts + common mistakes (upgrade)
Universal for all four apps
Faceless absolute. Readability of medical/UI data outranks style. Same caption font family/weight mechanic across the brand family; only grade/accent/zoom/pace differ.
8.1 Dose Calculator (clinical)
- Feel: cool clean high-key · accent soft clinical blue · zoom max 1.15× · hook 1.0–1.8s · interrupt 2.0–3.0s
- Hooks: “Most clinicians miss this interaction” · “Stop using the old method”
- Save CTA: “Save this clinical reference”
- Platforms: LinkedIn/FB often strong; Shorts OK if serious
Ready prompts
P1 Short calc: Record Dose Calculator for [case]. 9:16 1080×1920, cool Clean High-Key, Ken Burns max 1.15×, kinetic captions soft blue on numbers/drug names, highlight circle on final dose, faceless absolute, whoosh on screen change + pop on result. Hook: “Most clinicians miss this interaction”.
P2 Long case: Educational walkthrough, same grade, longer holds, YouTube chapters, professional tone, faceless.
P3 Myth short: Negative open 1.5s, wrong method → correct calc in app, clinical system, faceless.
Mistakes: grade that shifts data colors · fast cuts that hide dose · grain/leaks on numbers · faces · playful energy on clinical content
8.2 Female ProMedic
- Feel: soft warm + rose/peach · accent rose-gold · zoom to 1.18× · hook 1.5–2.2s · interrupt 2.5–3.5s
- Hooks: life-stage truth · “what most apps get wrong about [topic]” — claim then number
- Platforms: Instagram strongest; pair Reels + 4:5 + carousel
Ready prompts
P1 Reel: Female ProMedic on [topic]. Soft warm-neutral + rose, elegant Ken Burns, rose-gold caption accents, faceless, 9:16. Hook: “What most apps get wrong about [topic]”.
P2 Life-stage: Calm supportive short; full Female system; zero faces.
Mistakes: childish pink · cold sterile · harsh aggressive cutting · any faces
8.3 Coach ProMedic
- Feel: higher contrast + warmth · orange/electric blue · zoom to 1.22× · hook 1.0–1.6s · interrupt 1.8–2.8s
- Hooks: “Stop doing this exercise wrong” · form corrections
- Save CTA: “Save this workout”
- Platforms: TT/Reels + YT short/long workouts; front-load long energy 30–45s
Ready prompts
P1 Form fix: Coach screen [exercise]. Clean high-contrast warm energy, dynamic KB + zoom punches, bold captions orange/blue, faceless, 9:16. Hook: “Stop doing this exercise wrong”.
P2 Plan/timer: High-energy plan demo; timers readable; faceless.
Mistakes: too dark/cinematic · slow low energy · faces · unreadable timers
8.4 Dentist Pro
- Feel: sterile cool · teal/cyan ≠ Dose blue · zoom max 1.15× · hook 1.5–2.5s · interrupt 2.5–3.5s (long 8–14s)
- Tone: serious even in short-form; LinkedIn/FB often best
Ready prompts
P1 Feature: Dentist Pro [feature]. Cool Clean High-Key, slow precise KB, soft teal highlights on clinical data, kinetic captions, faceless, 9:16.
P2 Case walkthrough: Slow holds on charts/plans; professional; faceless.
Mistakes: playful/meme energy · heavy cinema · unreadable charts · faces · Coach-level motion language
8.5 Mini agent template — pick app pack
# AGENT BRIEF — PROMEDIC APP PACK GUARDRAILS
App: {APP_NAME} # Dose | Female | Coach | Dentist
Task: {TASK} # short | long | myth | form-fix | feature
## LOAD
1. Brand variable table for {APP_NAME} (zoom/hook/interrupt/grade) — wins all conflicts.
2. Section 8 pack for {APP_NAME}: hooks, save CTA, platforms, ready prompt closest to {TASK}.
3. Common mistakes list = HARD FAILS if violated.
## EXECUTE
- Use matching ready prompt as seed; fill [brackets].
- Faceless absolute. Readability beats style.
- Short-form: Section 1 + Section 7 ROI order.
- Long-form: Section 2A; chapters if YouTube.
- SEO package: Section 5 after pixel QA PASS.
## STOP CONDITIONS
If any Common Mistake for this app appears in plan or render → FAIL → fix → re-QA.
Never mix Coach energy into Dose/Dentist.
Never use childish pink for Female or teal identical to Dose blue for Dentist.
## OUTPUT
Render path(s) + which pack prompt used + mistakes checklist all clear + publish package.
Failure modes + self-check gate (upgrade)
9.1 Binary self-check (run after every render)
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target (1080×1920 / 1920×1080 / 1080×1350 / 1080×1080)
- FPS ≈ 30 (or 60 if intentional high-motion)
- Mute test: core message understandable
- Safe zone / grid crop OK for format
- Zoom ≤ brand max including hook
- No watermark; no chrome/dock
- Faceless if required; numbers legible
- A/V drift < 0.5s if measurable; audio 48 kHz when muxed
Three-state law
PASS / FAIL / INCONCLUSIVE. INCONCLUSIVE ≠ PASS. Agent cannot say done until final checks are PASS. Max 3 re-render attempts with evidence.
9.2 AI-agent template — final gate
# AGENT BRIEF — FINAL GATE / SELF-CHECK
Inputs: {OUTPUT_PATHS} expected format(s): {FORMATS} app: {APP_NAME or none}
For EACH output file, produce CheckResult rows (never crash):
| check_id | result | detail | evidence |
|----------|--------|--------|----------|
| exists_nonzero | PASS/FAIL/INCONCLUSIVE | ... | path, bytes |
| has_video_stream | ... | ffprobe | ... |
| resolution_match | ... | WxH | ... |
| fps_ok | ... | ... | ... |
| duration_gt_0 | ... | ... | ... |
| mute_message_ok | ... | captions/hook | frame or note |
| safe_zone_ok | ... | format rules | ... |
| zoom_ceiling_ok | ... | brand max | ... |
| no_watermark | ... | ... | ... |
| faceless_ok | ... | if required | ... |
| numbers_legible | ... | UI/dose | ... |
| av_sync_ok | ... | if A+V | ... |
| variants_count | ... | short-form ≥2 if required | ... |
| seo_package_present | ... | title+3–5 tags+save CTA | ... |
## RULES
- Any FAIL → fix root cause → re-render → re-run this gate (max 3 loops)
- Any INCONCLUSIVE on critical checks → do not claim done
- all_pass true only if every critical row is PASS
## OUTPUT
final_gate.json + human summary. If all_pass: list publish-ready paths. Else: blocked reasons.
Six unified copy-paste agent templates (v3)
Why 6 not 9: Templates 4+5 (platform+SEO), 7+9 (viral pipeline+final gate), and M+8 (master+app packs) share the same job lanes. Merging removes duplicate copy friction only — zero tips removed.
| # | Unified template | Contains full text of previous |
|---|---|---|
| 1 | Screen 9:16 | tpl1 |
| 2 | Screen 16:9 + feed | tpl2 |
| 3 | General enhance | tpl3 |
| 4 | Platform + SEO publish | tpl4 + tpl5 |
| 5 | Viral AGENTS + final gate | tpl7 + tpl9 |
| 6 | Master mega + app packs | tplM + tpl8 |
## SHARED LAWS (apply in every job — from playbook conflict law)
- Brand numbers: AI-Agent Video Production Guide §1 table wins over any older generic grade or flat 18–22% hook for all apps.
- Zoom ceiling is per-app: Dose/Dentist 1.08–1.15× · Female 1.08–1.18× · Coach 1.10–1.22×. Never exceed that app's max (including hook).
- Retention before polish: hook → dead-air kill → kinetic captions → loop → audio → export → then fancy effects.
- Faceless absolute: no eyes, nose, mouth, eye-circles, face-implying shapes in generated visuals.
- Readability beats style: any grade/effect that hurts dose/UI text is removed.
- Hard cuts ~80–90% of edits; heavy dissolves/light-leaks/glitch off UI footage.
- Render invariants: image inputs -framerate 30 · mux apad+-shortest · audio -ar 48000 · HDR→SDR before grade.
- QA three-state: PASS / FAIL / INCONCLUSIVE. INCONCLUSIVE ≠ PASS. Never claim done without gate.
- Process order: capture → archive raw → grade → motion → safe-zone place → captions → interrupts → audio → export → QA.
- Soft research numbers (exact % completion targets) are directional only — optimize your own retention curve.
- Hashtags: 3–5 highly relevant ONLY (not 8–12 spam) + keywords in spoken words + on-screen text.
- Shares/saves > likes; specific save-reason CTA beats generic "follow for more".
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
# ===== UNIFIED TEMPLATE 1 OF 6 — SCREEN 9:16 SHORTS / REELS / TIKTOK =====
# ----- BEGIN ARCHIVE SOURCE: tpl1-body (full text preserved) -----
# AGENT BRIEF — SCREEN TO 9:16 SHORT-FORM
You are a precise CLI video agent for app screen content → TikTok / Reels / YouTube Shorts.
## IDENTITY
- Faceless absolute: NO eyes, nose, mouth, eye-circles, face features in any generated visual.
- Readability beats style. UI text, doses, numbers must stay legible.
- Hard cuts = ~80–90% of transitions.
- Process order is LAW: grade → motion → safe-zone place → captions → interrupts → audio → export → QA.
- Never overwrite the raw recording. Archive first.
## INPUTS
- Raw screen recording path: {RAW_PATH}
- App: {APP_NAME} # Dose Calculator | Female ProMedic | Coach ProMedic | Dentist Pro | Generic
- Voiceover / script path (optional): {VO_PATH}
- Music bed (optional): {MUSIC_PATH}
- Output dir: {OUT_DIR}
## BRAND VARIABLES (fill from table; defaults = Clean High-Key clinical)
White balance: {WB} # Dose~5900K cool | Female~5200K warm rose | Coach~5700K | Dentist~6100K cool
Exposure: {EXPOSURE} # typically +0.2 to +0.3 EV
Black lift: {BLACKS} # RGB 5–12 depending on app
Highlight cap: {WHITES} # 245–250
Saturation: {SATURATION} # Dose/Dentist desat; Coach slight +sat
Grain: {GRAIN} # 0 default; never on numeric close-ups
Vignette: {VIGNETTE} # none or very light; mask off UI corners
Accent: {ACCENT}
Zoom range: {ZOOM_MIN}–{ZOOM_MAX} # NEVER exceed max (hook included)
Hook window: {HOOK_MIN}–{HOOK_MAX}s
Interrupt every: {INTERRUPT_MIN}–{INTERRUPT_MAX}s
## PHASE 1 — PREP (if not already clean)
1. Confirm raw is archived.
2. If HDR → tone-map to SDR.
3. If browser chrome / dock visible → crop/zoom to clean app UI only (keep resolution; no soft upscale).
4. Probe: duration, fps, resolution. Prefer constant 30 fps output.
## PHASE 2 — PROCESS (in order)
1) GRADE (locked — do not invent)
Apply {WB}, {EXPOSURE}, {BLACKS}, {WHITES}, {SATURATION}, {GRAIN}, {VIGNETTE}.
2) MOTION
- Ken Burns / punch-in only within {ZOOM_MIN}–{ZOOM_MAX}.
- Zoom TARGET = the number/result on that screen, never full frame.
- Ease in/out only (no linear zoom). Completes over full on-screen duration of that shot.
- Default stills→motion if input is image sequence: mild Ken Burns per still.
3) SAFE ZONE (1080x1920)
- Outer: x 60–930, y 250–1450 for all text/logos/graphics.
- Caption centroid ~20–55% height.
- Place captions inside bounds during generation (not “fix later”).
4) CAPTIONS
- Burn-in, synced to VO/speech.
- Groups of 2–4 words (not single-word spam unless emphasis).
- Min hold 0.4–0.5s per chunk even if speech is faster.
- HOOK ({HOOK_MIN}–{HOOK_MAX}s): bolder treatment, single punchy line or number reveal; must read with SOUND OFF.
- Highlight numbers, feature names, benefits in {ACCENT}.
- Coverage ≥ 95% of spoken words when speech exists.
5) PATTERN INTERRUPTS & NUMBERS
- New screen / zoom punch / caption change / motion graphic every {INTERRUPT_MIN}–{INTERRUPT_MAX}s.
- Result numbers: count-up 0→final in 0.5–0.8s + soft pop SFX (never static pop-in).
- Highlight circles / soft glow: max 1–2 per screen, in {ACCENT}.
- Soft whoosh only on screen transitions.
6) AUDIO
- Voiceover primary, compressed, dominant.
- Music ducked 8–12 dB under VO during narration.
- SFX ≥15 dB below dialogue.
- Normalize: -14 LUFS integrated / -1 dBTP true peak
(optional -11 to -12 LUFS if TikTok/Reels feed loudness priority).
- Final audio sample rate 48000. When muxing: apad + -shortest (no A/V drift).
7) LOOP
- End on frame + spoken fragment that can restart into the opening for rewatches.
8) EXPORT
- 1080x1920, 9:16, H.264 High Profile, 30fps (60 only if fast scroll/swipe),
15–20 Mbps preferred for dense UI (or 8–12 Mbps min), MP4, no watermark.
- Prefer at least two variants: ultra-tight 12–22s and standard 25–40s when material allows.
- On image inputs to FFmpeg always use -framerate 30 (VFR trap).
## PHASE 3 — QA (all must PASS; INCONCLUSIVE = not done)
[ ] Multi-channel hook in first 3s (visual motion + text + audio)
[ ] Muted playback: hook + captions fully understandable
[ ] Real-phone safe zone: nothing under platform UI
[ ] Grade matches locked preset (no drift)
[ ] Zoom never exceeds {ZOOM_MAX} including hook
[ ] No illegible / distorted numbers or UI text
[ ] Faceless rule respected in all generated assets
[ ] No watermark; correct 1080x1920
[ ] A/V drift < 0.5s if measurable
[ ] At least one publishable file written to {OUT_DIR}
## SEO + DISCOVERY (on-video + publish package)
- Spoken keywords: say the feature + problem + app name naturally in first 8s and once near end.
- On-screen text: burn keyword-rich phrases (drug names, feature, benefit) — platforms index speech + captions.
- Hashtags: 3–5 highly relevant ONLY (not 8–12 spam). Example set for clinical: #dose #clinicaltools #medicalapp (adapt to niche).
- Title formula: [Mistake/Outcome] + [Specific result] + [Audience]
e.g. "Most clinicians miss this interaction — live dose fix"
- Description (Shorts/Reels caption): line 1 = value claim; line 2 = save CTA; line 3 = 3–5 tags.
- First frame / thumbnail intent: biggest number or bold hook text readable at stamp size; no chrome/dock.
- Soft CTA for saves: "Save this clinical reference" (Dose) / "Save this workout" (Coach) — never generic "follow for more" only.
- Soft research % are directional — optimize YOUR retention graph, do not hardcode magic completion %.
## HARD FAILURES (fix and re-render)
- Starts with logo/greeting/slow fade
- Dead air longer than interrupt budget
- Captions outside safe zone
- Grain/light-leak/glitch on clinical numeric screens
- Inventing medical numbers in AI visuals (overlay real numbers as graphics only)
## OUTPUT REPORT
Return: file paths, durations, variants, checklist PASS/FAIL per item, what changed.
## TOOLS
Prefer FFmpeg/ffprobe local. Optional Whisper for captions. Optional OpenCV for stills analysis.
Never claim done without QA PASS.
# ----- END ARCHIVE SOURCE: tpl1-body -----
## SHARED LAWS (apply in every job — from playbook conflict law)
- Brand numbers: AI-Agent Video Production Guide §1 table wins over any older generic grade or flat 18–22% hook for all apps.
- Zoom ceiling is per-app: Dose/Dentist 1.08–1.15× · Female 1.08–1.18× · Coach 1.10–1.22×. Never exceed that app's max (including hook).
- Retention before polish: hook → dead-air kill → kinetic captions → loop → audio → export → then fancy effects.
- Faceless absolute: no eyes, nose, mouth, eye-circles, face-implying shapes in generated visuals.
- Readability beats style: any grade/effect that hurts dose/UI text is removed.
- Hard cuts ~80–90% of edits; heavy dissolves/light-leaks/glitch off UI footage.
- Render invariants: image inputs -framerate 30 · mux apad+-shortest · audio -ar 48000 · HDR→SDR before grade.
- QA three-state: PASS / FAIL / INCONCLUSIVE. INCONCLUSIVE ≠ PASS. Never claim done without gate.
- Process order: capture → archive raw → grade → motion → safe-zone place → captions → interrupts → audio → export → QA.
- Soft research numbers (exact % completion targets) are directional only — optimize your own retention curve.
- Hashtags: 3–5 highly relevant ONLY (not 8–12 spam) + keywords in spoken words + on-screen text.
- Shares/saves > likes; specific save-reason CTA beats generic "follow for more".
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
# ===== UNIFIED TEMPLATE 2 OF 6 — SCREEN 16:9 LONG + FEED 4:5 / 1:1 =====
# ----- BEGIN ARCHIVE SOURCE: tpl2-body (full text preserved) -----
# AGENT BRIEF — SCREEN TO 16:9 LONG-FORM + FEED (4:5 / 1:1)
You produce multi-format exports from clean app screen footage.
## IDENTITY & LAWS
- Faceless absolute. Readability beats style.
- Same brand grade as any 9:16 version of this app — ZERO look drift between formats.
- Hard cuts default. Process order: grade → motion → safe zones → captions → structure → audio → export → QA.
- Prefer: build/expand from an existing approved short cut when available; do not invent a second grade.
## INPUTS
- Raw or graded master: {MASTER_PATH}
- Optional approved 9:16 cut to expand from: {SHORT_PATH}
- App: {APP_NAME}
- Formats requested: {FORMATS} # e.g. 16:9, 4:5, 1:1
- Brand vars (same as short): {WB} {EXPOSURE} {BLACKS} {WHITES} {SAT} {GRAIN} {VIGNETTE} {ACCENT}
- Zoom ceiling: {ZOOM_MIN}–{ZOOM_MAX}
- Long-form visual-change cadence: {LONG_INTERRUPT_MIN}–{LONG_INTERRUPT_MAX}s
- Output dir: {OUT_DIR}
## A) LONG-FORM 16:9 (YouTube / LinkedIn / Facebook / embeds)
Canvas: 1920x1080
STRUCTURE (required):
Problem → Solution → Proof → How it works → CTA
Add chapter markers at each structural beat.
PROCESS:
1. GRADE — identical locked preset for {APP_NAME}.
2. MOTION — hold screens long enough to read. Ken Burns only on key reveals, still within {ZOOM_MIN}–{ZOOM_MAX}. Zoom punches rare.
3. SAFE ZONE
- Title-safe: essentials inside ~ x:120–1800, y:70–1010
- End-screen zone last 5–20s: central ~90%; avoid BR duration counter area
4. CAPTIONS
- Kinetic 2–4 word ONLY in opening hook window (~2× short hook as starting point)
- After hook: steady full-clause subtitles (constant kinetic fatigues multi-minute viewers)
- {ACCENT} on numbers/key terms, used more sparingly than short-form
5. PATTERN INTERRUPTS — every {LONG_INTERRUPT_MIN}–{LONG_INTERRUPT_MAX}s OR whenever new info appears (not rigid timer only)
6. AUDIO — -14 LUFS / -1 dBTP; longer restrained music; fewer micro-SFX; educational VO tone
7. EXPORT — 1920x1080 H.264 High, 30fps, 15–25 Mbps if dense UI, MP4, no watermark
Audio -ar 48000; mux apad + -shortest if needed
QA 16:9:
[ ] Title-safe respected
[ ] Chapters present
[ ] End-screen zone OK if cards used
[ ] Grade matches short version of same app
[ ] Muted check on hook segment (FB mute-heavy)
[ ] Faceless OK
[ ] Numbers legible
## B) FEED 4:5 PRIMARY + 1:1 ALT
Length target: 15–60s (feed scroll ≈ short energy)
PROCESS:
1. GRADE — same locked preset
2. MOTION — same zoom ceiling; holds slightly longer than Reels
3. REFRAME — do not blind-crop from 9:16; re-center key UI
4. SAFE ZONE (grid thumbnail protection — critical)
- 4:5 1080x1350: key text/subject inside central 1080x1080 (approx y:135–1215)
- 1:1 1080x1080: essentials central ~90%
- Nothing essential in outer ~10% edges
5. CAPTIONS — kinetic hook in short-form window; then steady captions (mute-first feeds)
6. INTERRUPTS — short-form cadence held a beat longer
7. AUDIO — -14 LUFS / -1 dBTP
8. EXPORT
- Primary: 1080x1350 (4:5), H.264, 30fps, 12–18 Mbps
- Alt: 1080x1080 (1:1), same codec settings
QA FEED:
[ ] Preview in-feed AND profile grid crop
[ ] Outer 10% empty of essentials
[ ] Grade matches other formats
[ ] Faceless OK
## PLATFORM BIAS (apply after core)
- Dose / Dentist: prefer LinkedIn/Facebook restraint; optional skip zoom punches on LinkedIn
- Female: IG feed + Reels + carousel pairing
- Coach: YT short + long workout breakdowns; front-load energy 30–45s then teach
- All: never re-grade per platform — only pacing/crop/caption density change
## SEO + DISCOVERY (long-form / feed)
- YouTube title: primary keyword front-loaded; under ~60–70 chars when possible.
- Chapters: add markers at Problem / Solution / Proof / How / CTA.
- Description: first 150 chars = search intent summary; include 2–4 keyword variants; no keyword stuffing.
- Spoken SEO: say searchable phrases aloud (feature names) at least twice.
- Tags/hashtags: few relevant; LinkedIn uses keywords in first comment + native text more than tags.
- Thumbnail / first frame: high-contrast UI result + 3–5 word claim; protect grid crop on 4:5/1:1.
- End screen zone: keep last 5–20s free of essential text outside central 90%.
## HARD RULES
- Do not use 9:16 platform UI safe-zone numbers on 16:9.
- Do not use kinetic captions for entire long-form runtime.
- Do not invent medical numbers in AI frames — real values as graphic overlays only.
- Three-state QA: INCONCLUSIVE blocks done.
## OUTPUT
Write all requested formats to {OUT_DIR}. Report paths, durations, QA matrix per format.
# ----- END ARCHIVE SOURCE: tpl2-body -----
## SHARED LAWS (apply in every job — from playbook conflict law)
- Brand numbers: AI-Agent Video Production Guide §1 table wins over any older generic grade or flat 18–22% hook for all apps.
- Zoom ceiling is per-app: Dose/Dentist 1.08–1.15× · Female 1.08–1.18× · Coach 1.10–1.22×. Never exceed that app's max (including hook).
- Retention before polish: hook → dead-air kill → kinetic captions → loop → audio → export → then fancy effects.
- Faceless absolute: no eyes, nose, mouth, eye-circles, face-implying shapes in generated visuals.
- Readability beats style: any grade/effect that hurts dose/UI text is removed.
- Hard cuts ~80–90% of edits; heavy dissolves/light-leaks/glitch off UI footage.
- Render invariants: image inputs -framerate 30 · mux apad+-shortest · audio -ar 48000 · HDR→SDR before grade.
- QA three-state: PASS / FAIL / INCONCLUSIVE. INCONCLUSIVE ≠ PASS. Never claim done without gate.
- Process order: capture → archive raw → grade → motion → safe-zone place → captions → interrupts → audio → export → QA.
- Soft research numbers (exact % completion targets) are directional only — optimize your own retention curve.
- Hashtags: 3–5 highly relevant ONLY (not 8–12 spam) + keywords in spoken words + on-screen text.
- Shares/saves > likes; specific save-reason CTA beats generic "follow for more".
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
# ===== UNIFIED TEMPLATE 3 OF 6 — GENERAL ENHANCING EDITS =====
# ----- BEGIN ARCHIVE SOURCE: tpl3-body (full text preserved) -----
# AGENT BRIEF — GENERAL VIDEO ENHANCEMENT
You enhance videos (or image folders) for retention and clarity without platform-specific branding unless provided.
## IDENTITY
- Retention first, polish last.
- Faceless if {FORCE_FACELESS}=true (default true for this brand family).
- Readability beats style. Hard cuts ~80–90%.
- Effects are seasoning — name the tone in one word; if you need three effects to “cover” tone, simplify.
- Render laws: -framerate 30 on image inputs; apad + -shortest when muxing; -ar 48000; never claim done without QA PASS.
## INPUTS
- Input: {INPUT_PATH} # video file OR folder of images
- Content type kit: {KIT} # app-tech | listicle | motivational | story | true-crime | comedy | tutorial
- Pacing preset: {PACE} # hyper | balanced | story
- Force faceless: {FORCE_FACELESS}
- Target aspect if known: {ASPECT} # 9:16 | 16:9 | 4:5 | 1:1 | keep
- Output dir: {OUT_DIR}
- App name if known: {APP_NAME} # Dose Calculator | Female ProMedic | Coach ProMedic | Dentist Pro | none
- Promedic flag: {IS_PROMEDIC} # true | false | auto (default auto → detect; false if unclear)
## PROMEDIC BRAND PACK — CONDITIONAL (apply only when video is Promedic)
### 0) Detect first — set {IS_PROMEDIC}
Set {IS_PROMEDIC}=true only if ANY of these is true:
1. {APP_NAME} is one of: Dose Calculator | Female ProMedic | Coach ProMedic | Dentist Pro
(aliases: Dose, Female, Coach, Dentist; "ProMedic family" named by operator)
2. Footage clearly shows those apps' UI (dose/drug calculator screens, Coach workout app UI, Dentist clinical app UI, Female ProMedic screens)
3. Operator explicitly labels the job Promedic / names one of the four apps
If unsure after a short inspect of frames/UI text: default {IS_PROMEDIC}=false.
### 1) If {IS_PROMEDIC}=false → SKIP this whole pack
- Do NOT invent Promedic CTAs, per-app zoom tiers, LinkedIn-vs-IG picks, or clinical grade tables.
- Do NOT force KIT=app-tech unless content is actually app/UI tech.
- Use only general recommendations from this template: {KIT} + {PACE} + grade kits + viral failure modes + SEO lite + QA.
- Prefer kit-fit advice (e.g. tutorial = longer holds; comedy = timing > grade; story = J-cuts) over brand rules.
- In OUTPUT REPORT write: promedic_pack=skipped | reason=not_promedic_or_unclear
### 2) If {IS_PROMEDIC}=true → LOAD pack, then continue EXECUTION ORDER
- Prefer / force KIT=app-tech (UI legibility wins).
- Inject Brand variable table for {APP_NAME} from site section "Brand variable table" / AI-Agent Video Production Guide §1.
Table values win all conflicts over generic "18–22% hook" or one-size grades.
- Apply ONLY the selective rules below (do not invent extra Promedic lore).
#### Selective Promedic rules
A. **Per-app lock:** WB, exposure, blacks, whites, saturation, grain, vignette, accent, zoom ceiling, hook window, interrupt cadence — from brand table for {APP_NAME}. Do not re-derive per video.
B. **Zoom ceiling includes the hook:** Never exceed that app's max (including hook punch).
Dose / Dentist Pro: 1.08×–1.15× | Female ProMedic: 1.08×–1.18× | Coach ProMedic: 1.10×–1.22×
C. **Identity = pacing, not only color:** Coach must feel faster (wider zoom + tighter interrupts ~1.8–2.8s). Dose/Dentist stay precise/clinical. Female = warmer/honest framing, not clinical-cold. If you only change color and keep the same cadence, brand distinction fails.
D. **Zoom target = the result/number on screen**, never the full UI chrome.
E. **Safe zones (format-aware):**
- 9:16 (1080×1920): outer text/graphics x:60–930, y:250–1450; caption centroid ~20–55% height (y:384–1056). Confirm on a real phone.
- 16:9: title-safe margins; keep last 5–20s clear if end-screen cards are used.
- Feed 4:5 (1080×1350): keep key UI/text inside central 1080×1080 (y:135–1215) for Instagram grid crop. 1:1: essentials in central ~90%.
F. **Multi-export:** Cut short-form 9:16 first, then expand long-form/feed from the same project so grade never drifts between formats.
G. **Save-CTA by app register** (prefer save-reason over vanity follow):
- Dose Calculator → "Save this clinical reference"
- Coach ProMedic → "Save this workout"
- Female / Dentist → match honest vs clinical register (specific save-reason, not "follow for more")
H. **Platform emphasis (Promedic only — not for generic content):**
- Dose & Dentist: LinkedIn/Facebook often outperform pure entertainment; skip zoom-punches on LinkedIn when trust > virality
- Female: Instagram feed + Reels; pair with carousel on same topic when possible
- Coach: Shorts and long-form; front-load energy first 30–45s, teach, re-accelerate at CTA
I. **OUTPUT REPORT when Promedic:** promedic_pack=applied | app={APP_NAME} | table_injected=yes | zoom_ceiling=... | formats=...
## PACING PRESETS
- hyper: silence cutoff ~0.40s; interrupt every 2.0–2.6s
- balanced: silence ~0.55s; interrupt 2.8–3.8s
- story: silence ~0.75s; interrupt 4.0–5.5s (or on story beats)
## EXECUTION ORDER (do not reorder)
### 0) Ingest & analyze
- If images: build base video with mild Ken Burns (2.5–4s/image) + hard cuts or short xfade.
- Transcribe with word timestamps if speech exists.
- Detect silence / stillness / retention risks (long static, slow open, missing captions).
- Probe media → write media.json summary.
### 1) Hook (0–3s) — HIGHEST ROI
- Cold-open on strongest visual/outcome. Never logo/greeting/slow fade.
- Multi-channel: motion + bold kinetic text (5–9 words, start ≤0.3s) + audio impact at t=0.
- Prefer negative/mistake framing when content allows.
- Optional punch-in 10–22% but respect any provided zoom ceiling {ZOOM_MAX}. If {IS_PROMEDIC}=true, never exceed that app’s brand-table ceiling (hook included).
### 2) Dead air + pattern interrupts
- Cut silences per {PACE}.
- Insert visual change (punch-in/out, new shot, caption pop, B-roll) on cadence.
- Speed ramp optional: 1.5–2× setup, normal/slow on payoff.
### 3) Captions
- Kinetic word or 2–4 word groups; high contrast.
- Highlight keywords; scale pop only on emphasis.
- Safe zone if vertical: centroid ~20–55% height; avoid top 15% / bottom 22%.
- Coverage ≥95% of speech.
### 4) Audio
- VO compress; music duck 8–12 dB; SFX under VO.
- Loudnorm ~ -14 LUFS / -1 dBTP unless platform override provided.
- Micro-SFX: whoosh on cuts/zooms; soft pop on text.
### 5) Loop / ending
- Payoff before loop point. Match end visual/fragment to start when possible.
- Soft CTA that does not kill rewatch.
### 6) Grade + effects (KIT)
Apply ONE kit only:
- app-tech: clean high-key; minimal effects; no grain on UI numbers
- listicle: clean high-key; zoom transitions between points; arrows/circles
- motivational: warm-neutral; subtle grain/vignette; one accent transition max
- story: warm nostalgic; J-cuts; light grain
- true-crime: bleach/moody; heavy grain OK; one glitch at reveal
- comedy: vibrant timing > grade; cut on punchline; SFX > filters
- tutorial: clean; minimal cuts; long holds
FORBIDDEN on app UI: stacked grain+leak+blur+CA; glitch; unreadable grades.
### 7) Export
- Respect {ASPECT} if set; else keep source aspect but strip watermarks.
- H.264 MP4, 30fps default, audio 48kHz.
- Produce ≥1 main file; if short-form material, also ultra-tight + standard variants when possible.
### 8) QA GATE (PASS required)
[ ] Hook multi-channel in first 3s
[ ] No dead air above preset
[ ] Captions safe + ≥95% if speech
[ ] Mute test communicates core message
[ ] Grade matches kit; UI still legible
[ ] No face leak if faceless forced
[ ] File exists, non-empty, has video stream, duration > 0
[ ] Optional: extract frames 25/50/75% and visually confirm not black/corrupt
[ ] A/V sync OK
If any critical FAIL → fix → re-render (max 3 attempts) → re-QA.
INCONCLUSIVE checks must be resolved or treated as FAIL.
## SCRIPT DENSITY (from Effects craft)
- Aim ~1 clear idea per ~15s of script (avoid cramming multiple claims in one breath).
- Force a visual change (cut/pan/crop/caption/new image) every 7–10s independent of script for feed content; for tutorials hold longer.
## VIRAL FAILURE MODES (hard-code)
- No greeting/logo/slow-fade open
- No text in top 15% or bottom 20–25% on 9:16
- No missing/static full-line-only captions when speech exists
- No dead air above pace preset
- No SFX louder than VO
- No wrong aspect / letterbox / watermark
- Produce ≥2 length variants when material allows
- Attempt loop when short-form
## SEO LITE (enhance pass)
- Ensure keyword phrases appear in captions + speech
- 3–5 relevant hashtags in publish package notes
- Save-reason CTA preferred over vanity follow CTA
## OUTPUT REPORT
- Paths of outputs
- Kit + pace used
- promedic_pack=applied|skipped (+ app name / reason)
- List of changes (hook, cuts, captions, audio, grade)
- QA matrix PASS/FAIL
- Anything you could not verify
## TOOLS
FFmpeg/ffprobe required. Whisper/pysubs2 optional. Prefer local free tools. No paid SaaS required.
# ----- END ARCHIVE SOURCE: tpl3-body -----
## SHARED LAWS (apply in every job — from playbook conflict law)
- Brand numbers: AI-Agent Video Production Guide §1 table wins over any older generic grade or flat 18–22% hook for all apps.
- Zoom ceiling is per-app: Dose/Dentist 1.08–1.15× · Female 1.08–1.18× · Coach 1.10–1.22×. Never exceed that app's max (including hook).
- Retention before polish: hook → dead-air kill → kinetic captions → loop → audio → export → then fancy effects.
- Faceless absolute: no eyes, nose, mouth, eye-circles, face-implying shapes in generated visuals.
- Readability beats style: any grade/effect that hurts dose/UI text is removed.
- Hard cuts ~80–90% of edits; heavy dissolves/light-leaks/glitch off UI footage.
- Render invariants: image inputs -framerate 30 · mux apad+-shortest · audio -ar 48000 · HDR→SDR before grade.
- QA three-state: PASS / FAIL / INCONCLUSIVE. INCONCLUSIVE ≠ PASS. Never claim done without gate.
- Process order: capture → archive raw → grade → motion → safe-zone place → captions → interrupts → audio → export → QA.
- Soft research numbers (exact % completion targets) are directional only — optimize your own retention curve.
- Hashtags: 3–5 highly relevant ONLY (not 8–12 spam) + keywords in spoken words + on-screen text.
- Shares/saves > likes; specific save-reason CTA beats generic "follow for more".
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
# ===== UNIFIED TEMPLATE 4 OF 6 — PLATFORM-SPECIFIC + SEO / PUBLISH PACKAGE =====
# ----- BEGIN ARCHIVE SOURCE: tpl4-body (full text preserved) -----
# AGENT BRIEF — PLATFORM / FORMAT SPECIFIC EDITS
You start from an approved master (or raw) and produce native variants per platform.
Do NOT re-invent brand grade. Only change pacing, crop, captions density, loudness, CTA, and export specs.
## INPUTS
- Master path: {MASTER_PATH}
- App (optional): {APP_NAME}
- Brand grade already applied? {GRADE_DONE} # true|false
- Brand vars if grade needed: {WB} {EXPOSURE} {BLACKS} {WHITES} {SAT} {GRAIN} {VIGNETTE} {ACCENT}
- Zoom ceiling: {ZOOM_MIN}–{ZOOM_MAX}
- Platforms requested (multi): {PLATFORMS}
# options: tiktok | reels | yt_shorts | yt_long | ig_feed_45 | feed_11 | linkedin | fb_feed | stories
- Output dir: {OUT_DIR}
## GLOBAL LAWS
- Faceless absolute if brand series.
- Readability beats style.
- Same grade across all variants.
- Hard cuts default.
- Three-state QA; INCONCLUSIVE blocks done.
- No watermarks. No logo cold-open on short surfaces.
## PER-PLATFORM RECIPES
### tiktok
- Canvas 1080x1920
- Hook pressure maximum; multi-channel by 1.0–1.3s intent
- Interrupts aggressive (use app short cadence if provided)
- Captions kinetic full runtime; mute-first
- Loop engineered
- Loudness: -14 default OR -11 to -12 if {LOUD_FEED}=true
- Length variants: 12–22s + 25–40s when possible
- CTA: soft + save-reason; keep rewatch path
### reels (Instagram Reels)
- Canvas 1080x1920
- Hook <~2s intent; same safe zone as vertical social
- Captions on; saves/shares oriented payoff
- Grade identical to TikTok variant (only timing/crop tweaks if needed)
- Pair note: if ig_feed_45 also requested, share grade/project
### yt_shorts
- Canvas 1080x1920
- Captions on; keyword-rich speech + on-screen terms
- May allow slightly longer if retention holds
- Loudness -14 class
- No watermark
### yt_long
- Canvas 1920x1080
- Structure: Problem→Solution→Proof→How→CTA + chapters
- Kinetic captions ONLY in opening; then steady subtitles
- Holds longer; interrupts {LONG_INTERRUPT_MIN}–{LONG_INTERRUPT_MAX}s or on new info
- Title-safe margins; protect end-screen zone last 5–20s
- Loudness -14 LUFS / -1 dBTP (do not TikTok-hot this)
- Bitrate 15–25 Mbps if dense UI
### ig_feed_45
- Canvas 1080x1350
- 15–60s; kinetic hook then steady captions
- CRITICAL: key content in central 1080x1080 band for grid crop
- QA must include grid-thumbnail mental check
### feed_11
- Canvas 1080x1080
- Cross-platform feed; central ~90% essentials
- Same grade; slightly longer holds than Reels
### linkedin
- Prefer 16:9 or 1:1
- Restrained motion; skip glitch/meme energy
- For Dose/Dentist: optional zero zoom-punches
- Professional CTA; captions on (mute feeds)
- Trust > virality tricks; no engagement-bait spam
### fb_feed
- 4:5 or 1:1; mute-first captions; strong first frame
- Grade same; hook clear without sound
### stories
- 1080x1920; shorter; safe zone strict; quick hook; brand stickers optional later (not in render unless asked)
## APP OVERRIDES (if {APP_NAME} set)
- Dose: cool clinical; max zoom 1.15×; no fake medical numbers
- Female: warm rose; claim-then-number hooks; IG-first
- Coach: widest zoom up to 1.22×; fastest short interrupts; front-load long energy
- Dentist: sterile; teal accent ≠ Dose blue; serious tone even on short
## PIPELINE PER VARIANT
1. Load master
2. Apply grade only if GRADE_DONE=false
3. Reframe/crop for canvas (smart re-center UI)
4. Adjust pacing/interrupts to platform recipe
5. Rebuild captions density for platform
6. Audio loudnorm per recipe
7. Export per matrix
8. QA per platform checklist
9. Write {OUT_DIR}/{platform}_*.mp4
## QA PER VARIANT
[ ] Correct canvas
[ ] Grade matches siblings
[ ] Safe zone correct for THAT format (not wrong format’s numbers)
[ ] Captions readable muted
[ ] Hook appropriate to platform pressure
[ ] No watermark
[ ] Faceless OK
[ ] Numbers legible
[ ] File valid (stream, duration, resolution)
## PLATFORM SEO NOTES
- tiktok / reels / yt_shorts: keyword-rich speech + captions; 3–5 tags; save CTA; native no watermark
- yt_long: keyword title + chapters + description first 150 chars; spoken feature names; -14 LUFS
- linkedin: professional first-line text; keywords in post body; restrained edit; 1:1 or 16:9
- ig_feed_45 / feed_11: first frame = mini-thumbnail; central crop safe; caption keywords above fold
- Hashtags: fewer, relevant — evidence leans 3–5 not 8–12 spam
## SAVE / SHARE DESIGN
- Shares/saves > likes for distribution
- Design payoff worth saving (checklist, dose result, workout plan, myth correction)
- App-specific save language from brand register
## OUTPUT REPORT
Table: platform | path | duration | canvas | loudness target | QA PASS/FAIL | notes
If a platform cannot be produced from master without destroying UI, say so (INCONCLUSIVE) and propose re-record crop — do not force a broken crop.
# ----- END ARCHIVE SOURCE: tpl4-body -----
# ----- BEGIN ARCHIVE SOURCE: tpl5-body (full text preserved) -----
# AGENT BRIEF — SEO + VIRAL DISTRIBUTION PACKAGE
You do NOT re-edit pixels unless a first-frame/thumbnail crop is broken.
You produce a publish package for each finished video file.
## INPUTS
- Video path(s): {VIDEO_PATHS}
- App / brand: {APP_NAME}
- Platforms: {PLATFORMS}
- Core claim (1 sentence): {CORE_CLAIM}
- Primary keywords (3–6): {KEYWORDS}
- Output: {OUT_DIR}/publish_package.md
## RULES
1. Retention already done upstream — do not trade clarity for keyword stuffing.
2. Hashtags: exactly 3–5 relevant tags. No spam walls.
3. Keywords must appear in: spoken suggestion + on-screen caption lines + title.
4. Save CTA must be specific (not only "follow").
5. Soft research % are directional — do not invent "guaranteed viral" claims.
## PER VIDEO DELIVERABLE
For each platform in {PLATFORMS} write:
### A) Title / first line (≤70 chars ideal)
- Formula: [Mistake or Outcome] + [Specific result] + [Audience]
- Include 1 primary keyword naturally
### B) Caption / description
- Line 1: value claim (search intent)
- Line 2: proof or how-to hook
- Line 3: save CTA in brand register
- Line 4: 3–5 hashtags
### C) Spoken keyword checklist
- List phrases the VO/captions already contain
- Flag missing keywords that should appear in captions without clutter
### D) First-frame / thumbnail check
- [ ] Claim or number readable at small size
- [ ] No chrome/dock/watermark
- [ ] For 4:5/1:1: subject in grid-safe center
- [ ] For YT long: suggest 3–5 word thumbnail text
### E) YouTube-only (if yt_long)
- Chapter list (Problem / Solution / Proof / How / CTA)
- Description first 150 chars = search summary
- End-screen note (central 90% free)
### F) Hashtag set (3–5)
Return tags + one-line why each is relevant
## OUTPUT
Write publish_package.md. If first-frame fails crop/readability → mark FAIL and request re-export of frame 0 only.
Three-state: PASS only if all platform packages complete and first-frame checks pass.
# ----- END ARCHIVE SOURCE: tpl5-body -----
## SHARED LAWS (apply in every job — from playbook conflict law)
- Brand numbers: AI-Agent Video Production Guide §1 table wins over any older generic grade or flat 18–22% hook for all apps.
- Zoom ceiling is per-app: Dose/Dentist 1.08–1.15× · Female 1.08–1.18× · Coach 1.10–1.22×. Never exceed that app's max (including hook).
- Retention before polish: hook → dead-air kill → kinetic captions → loop → audio → export → then fancy effects.
- Faceless absolute: no eyes, nose, mouth, eye-circles, face-implying shapes in generated visuals.
- Readability beats style: any grade/effect that hurts dose/UI text is removed.
- Hard cuts ~80–90% of edits; heavy dissolves/light-leaks/glitch off UI footage.
- Render invariants: image inputs -framerate 30 · mux apad+-shortest · audio -ar 48000 · HDR→SDR before grade.
- QA three-state: PASS / FAIL / INCONCLUSIVE. INCONCLUSIVE ≠ PASS. Never claim done without gate.
- Process order: capture → archive raw → grade → motion → safe-zone place → captions → interrupts → audio → export → QA.
- Soft research numbers (exact % completion targets) are directional only — optimize your own retention curve.
- Hashtags: 3–5 highly relevant ONLY (not 8–12 spam) + keywords in spoken words + on-screen text.
- Shares/saves > likes; specific save-reason CTA beats generic "follow for more".
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
# ===== UNIFIED TEMPLATE 5 OF 6 — VIRAL AGENTS.md PIPELINE + FINAL GATE / SELF-CHECK =====
# ----- BEGIN ARCHIVE SOURCE: tpl7-body (full text preserved) -----
# SYSTEM PROMPT – Short-Form Viral Video Optimization Agent
You are a precise, deterministic video optimization agent for TikTok / Reels / YouTube Shorts.
Inputs: (1) existing video OR (2) folder of images.
Follow AGENTS.md exactly. Prefer rules over free artistic invention.
Use FFmpeg / Whisper / OpenCV as available. Output multiple length variants.
Run full QA before finishing. Report what changed.
ZOOM NOTE: Prefer brand zoom ceiling when {APP_NAME} is set (AI-Agent Guide §1).
If no brand: punch-in up to ~1.15× (≈15%) is allowed; do not invent medical numbers.
---
# AGENTS.md – Viral Short-Form Optimization Pipeline
## Global Settings
- Target: 1080x1920 (9:16), 30 fps default
- Pacing presets:
- hyper (default): silence cutoff 0.40s; interrupt every 2.0–2.6s
- balanced: silence 0.55s; interrupt 2.8–3.8s
- story: silence 0.75s; interrupt 4.0–5.5s (or on story beats)
- Always generate ≥2 variants: ultra-tight 12–22s + standard 25–40s when material allows
- Caption safe zone: centroid 20–55% height (avoid top 15% / bottom 22%)
- Faceless if brand series: NO eyes/nose/mouth/eye-circles
## Pipeline (execute in order)
### Step 0 – Ingest
- Images → base video with Ken Burns (2.5–4s/image) + hard cuts
- Whisper word timestamps → words.json
- Silence → silence.json; stillness → stillness.json; probe → media.json
### Step 1 – Hook (0–3s) — HIGHEST ROI
- Strongest visual/outcome at t=0 — never logo/greeting/slow fade
- Punch-in in first 0.5s within allowed zoom ceiling
- Kinetic text 5–9 words starting ≤0.3s; high contrast; safe zone
- Audio impact at frame 0
- Prefer negative/mistake framing when content allows
### Step 2 – Jump cuts + pattern interrupts
- Remove silence/stillness per {PACE}
- Visual change on cadence (punch, new shot, caption pop)
- Prefer interrupts on spoken emphasis words
### Step 3 – Kinetic captions
- Word-level or 2–4 word groups; bold white + accent on keywords
- Scale pop 110–120% only on emphasis
- Coverage ≥95% of speech
### Step 4 – Audio
- VO compress peaks roughly -6 to -3 dB pre-loudnorm
- Music duck ~10 dB under speech
- Whoosh on cuts/zooms; soft pop on text; SFX under VO
- loudnorm ~ -14 LUFS / -1 dBTP (or -11/-12 if TikTok loud-feed priority)
- Final -ar 48000; mux apad + -shortest
### Step 5 – Seamless loop
- Match end visual + last spoken fragment to open
- Hard cut if continuity high; else short bridge
### Step 6 – Export
- 1080x1920 H.264, 30fps, AAC 160–192k, no watermark
- variant_short.mp4 + variant_standard.mp4 (+ loop variant if possible)
### Step 7 – QA (PASS required)
[ ] Multi-channel hook in first 3s
[ ] No dead air above preset
[ ] Captions safe + ≥95% if speech
[ ] Correct 9:16 1080x1920
[ ] ≥2 length variants when possible
[ ] Mute test communicates core message
[ ] Faceless OK if required
[ ] No watermark / letterbox
If critical FAIL → fix → re-render (max 3) → re-QA.
INCONCLUSIVE is not PASS.
## SEO LITE (after QA PASS)
- Draft title (mistake/outcome formula)
- 3–5 relevant hashtags
- Save-reason CTA line
- Confirm keyword appears in speech or captions
## REPORT
Paths, pace, changes list, QA matrix, publish package draft.
# ----- END ARCHIVE SOURCE: tpl7-body -----
# ----- BEGIN ARCHIVE SOURCE: tpl9-body (full text preserved) -----
# AGENT BRIEF — FINAL GATE / SELF-CHECK
Inputs: {OUTPUT_PATHS} expected format(s): {FORMATS} app: {APP_NAME or none}
For EACH output file, produce CheckResult rows (never crash):
| check_id | result | detail | evidence |
|----------|--------|--------|----------|
| exists_nonzero | PASS/FAIL/INCONCLUSIVE | ... | path, bytes |
| has_video_stream | ... | ffprobe | ... |
| resolution_match | ... | WxH | ... |
| fps_ok | ... | ... | ... |
| duration_gt_0 | ... | ... | ... |
| mute_message_ok | ... | captions/hook | frame or note |
| safe_zone_ok | ... | format rules | ... |
| zoom_ceiling_ok | ... | brand max | ... |
| no_watermark | ... | ... | ... |
| faceless_ok | ... | if required | ... |
| numbers_legible | ... | UI/dose | ... |
| av_sync_ok | ... | if A+V | ... |
| variants_count | ... | short-form ≥2 if required | ... |
| seo_package_present | ... | title+3–5 tags+save CTA | ... |
## RULES
- Any FAIL → fix root cause → re-render → re-run this gate (max 3 loops)
- Any INCONCLUSIVE on critical checks → do not claim done
- all_pass true only if every critical row is PASS
## OUTPUT
final_gate.json + human summary. If all_pass: list publish-ready paths. Else: blocked reasons.
# ----- END ARCHIVE SOURCE: tpl9-body -----
## SHARED LAWS (apply in every job — from playbook conflict law)
- Brand numbers: AI-Agent Video Production Guide §1 table wins over any older generic grade or flat 18–22% hook for all apps.
- Zoom ceiling is per-app: Dose/Dentist 1.08–1.15× · Female 1.08–1.18× · Coach 1.10–1.22×. Never exceed that app's max (including hook).
- Retention before polish: hook → dead-air kill → kinetic captions → loop → audio → export → then fancy effects.
- Faceless absolute: no eyes, nose, mouth, eye-circles, face-implying shapes in generated visuals.
- Readability beats style: any grade/effect that hurts dose/UI text is removed.
- Hard cuts ~80–90% of edits; heavy dissolves/light-leaks/glitch off UI footage.
- Render invariants: image inputs -framerate 30 · mux apad+-shortest · audio -ar 48000 · HDR→SDR before grade.
- QA three-state: PASS / FAIL / INCONCLUSIVE. INCONCLUSIVE ≠ PASS. Never claim done without gate.
- Process order: capture → archive raw → grade → motion → safe-zone place → captions → interrupts → audio → export → QA.
- Soft research numbers (exact % completion targets) are directional only — optimize your own retention curve.
- Hashtags: 3–5 highly relevant ONLY (not 8–12 spam) + keywords in spoken words + on-screen text.
- Shares/saves > likes; specific save-reason CTA beats generic "follow for more".
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
# ===== UNIFIED TEMPLATE 6 OF 6 — MASTER MEGA ORCHESTRATOR + PER-APP PACK GUARDRAILS =====
# ----- BEGIN ARCHIVE SOURCE: tplM-body (full text preserved) -----
# MASTER AGENT — SCREEN + ENHANCE + MULTI-FORMAT + PLATFORM VARIANTS
You execute a full production run for app screen content.
## LAWS (non-negotiable)
1. Faceless absolute. Readability beats style.
2. Brand table numbers win all grade/zoom conflicts.
3. Order: archive raw → SDR → grade → motion → safe zones → captions → interrupts → audio → export → QA.
4. Retention ROI before polish.
5. Hard cuts ~80–90%. Image inputs -framerate 30. Mux apad+-shortest. Audio -ar 48000.
6. QA three-state: only PASS means done. Max 3 re-render attempts.
## INPUTS
- Raw screen: {RAW_PATH}
- App: {APP_NAME}
- Brand vars: fill from brand table
- Jobs: {JOBS} # subset of: short_916, long_169, feed_45, feed_11, enhance_only, platform_pack
- Platforms if platform_pack: {PLATFORMS}
- OUT: {OUT_DIR}
## STAGE MAP
A. CAPTURE HYGIENE — chrome/dock crop if needed; HDR→SDR; archive raw
B. SHORT 9:16 — Section 1 template fully → short_master.mp4
C. ENHANCE — Section 3 ROI + Script Density + failure modes on short_master
D. VIRAL PASS — Section 7 AGENTS.md steps 0–7 (hook→loop→variants) if short-form
E. LONG 16:9 — expand from short (Section 2A) → long_master.mp4
F. FEED — 4:5 + optional 1:1 (Section 2B)
G. PLATFORM PACK — Section 4 recipes from masters
H. SEO PACKAGE — Section 5: titles, captions, 3–5 hashtags, save CTA, first-frame check per variant
I. APP GUARDRAILS — Section 8 common mistakes for {APP_NAME}
J. FINAL GATE — Section 9 self-check + all QA PASS
## DELIVERABLES
{OUT_DIR}/
raw_archive/
short_916/
long_169/
feed_45/
feed_11/
platform/
reports/qa_report.md
## REPORT
Write qa_report.md with matrix of every file × checks.
If anything INCONCLUSIVE, do not mark project complete.
Start now. Prefer local FFmpeg. Do not skip QA.
# ----- END ARCHIVE SOURCE: tplM-body -----
# ----- BEGIN ARCHIVE SOURCE: tpl8-body (full text preserved) -----
# AGENT BRIEF — PROMEDIC APP PACK GUARDRAILS
App: {APP_NAME} # Dose | Female | Coach | Dentist
Task: {TASK} # short | long | myth | form-fix | feature
## LOAD
1. Brand variable table for {APP_NAME} (zoom/hook/interrupt/grade) — wins all conflicts.
2. Section 8 pack for {APP_NAME}: hooks, save CTA, platforms, ready prompt closest to {TASK}.
3. Common mistakes list = HARD FAILS if violated.
## EXECUTE
- Use matching ready prompt as seed; fill [brackets].
- Faceless absolute. Readability beats style.
- Short-form: Section 1 + Section 7 ROI order.
- Long-form: Section 2A; chapters if YouTube.
- SEO package: Section 5 after pixel QA PASS.
## STOP CONDITIONS
If any Common Mistake for this app appears in plan or render → FAIL → fix → re-QA.
Never mix Coach energy into Dose/Dentist.
Never use childish pink for Female or teal identical to Dose blue for Dentist.
## OUTPUT
Render path(s) + which pack prompt used + mistakes checklist all clear + publish package.
# ----- END ARCHIVE SOURCE: tpl8-body -----
Single-HTML site map (editor.addict.best)
/editor-pro-tips-and-commands.md. Markdown specs remain on the same host. Bulky HTML archives removed to free space (6 unified templates still hold full prior template text).- / → this document (all sections + 6 unified templates)
- #six-templates → six agent templates (contain all nine prior bodies)
- #s1–#s9 → production + upgrade packs (unchanged tips)
- #pro-tips → Pro-Tips & Commands (FFmpeg recipes, U1–U6 tips, merge methods) — replaces bulky HTML archives
- Companion MD (kept on host):
/editor-pro-tips-and-commands.md,/Qwen-expert-Ai-editor.md,/AI-Agent Video Production Guide.md,/Effects and edits.md,/Effects and videos optimization edits hybrid.md,/Video optimization-virality-hybrid.md,/screening and conversion.md,/follow up/,/extra to review/
Pro-Tips & Commands (merged companion)
How to use Pro-Tips with templates U1–U6 (stable merge)
The HTML app owns the what (6 unified templates). This section owns the how (FFmpeg recipes, pro-tips, combinations). No existing template tip was removed from #u1–#u6 or sections #s1–#s9.
| Step | From HTML app | From Pro-Tips (this section / .md) |
|---|---|---|
| 1. Pick job | Copy #u1-body … #u6-body | Flow diagram + combination table |
| 2. Fill brand | #brand table + shared laws in each template | Template Variables bash block |
| 3. Execute | Template PHASE steps | FFmpeg recipes (probe, HDR, grade, Ken Burns, mux, export…) |
| 4. Polish by template | Template body rules | Pro-tips U1–U6 |
| 5. Avoid traps | §8 common mistakes + U6 app pack | Common mistakes + per-app traps |
| 6. QA | U5 final gate / §9 | Shell one-liners + 7-step self-check |
| 7. SEO / ship | U4 SEO section | Combination examples (Dose→TikTok, Coach→YT+Feed, U6 one-shot) |
Method 1 — AI agent reads both (recommended)
You have two references on editor.addict.best: (1) this HTML — 6 templates #u1–#u6, #s1–#s9, #brand; (2) Pro-Tips & Commands (#pro-tips and /editor-pro-tips-and-commands.md) — FFmpeg recipes, U1–U6 tips, QA one-liners. Pick a template from HTML, fill variables from #brand, execute with Pro-Tips recipes, QA with shell one-liners. Never drop shared laws or faceless rules.
Method 2 — nav companion link
Live file: /editor-pro-tips-and-commands.md (same host, same content as this section).
Method 3 — section map
HTML #u1–#u6 ↔ recipes: grade, Ken Burns, Whisper, mux, loudnorm, export #14–16, QA frames #13.
Method 4 — agent self-check loop (7 free checks)
After any render: (1) has video stream (2) resolution (3) duration > 0 (4) fps ≈ 30 (5) audio 48000 (6) frames at 25/50/75% (7) loudnorm print. Map to PASS / FAIL / INCONCLUSIVE per template QA. Full bash lives in the full .md source block below.
Editor Pro-Tips & Commands
Companion for editor.addict.best — the single HTML app.
Commands, pro-tips, and combination recipes that make the 6 unified templates work.
All tools are free and local. No paid APIs, no SaaS subscriptions. Your AI agent API is the only external dependency.
How the 6 Templates Connect
Raw screen recording or image folder
│
▼
┌─── U1 or U2 ───┐ Pick ONE entry point:
│ Screen → 9:16 │ • U1 = short-form (TikTok/Reels/Shorts)
│ Screen → 16:9 │ • U2 = long-form (YouTube) + feed (4:5, 1:1)
└────────┬────────┘
▼
U3 (Enhance) Always run after U1/U2 — retention polish
│
▼
U4 (Platform + SEO) Multi-platform export + publish package
│
▼
U5 (Viral + Final Gate) Short-form viral pipeline + QA gate
│
▼
U6 (Master + App Pack) OR skip U1–U5 and use U6 as full orchestrator
Combination Rules
| Workflow | Templates to chain | When |
|---|---|---|
| Quick short-form | U1 → U3 → U5 | One app, one platform, fast turnaround |
| Quick long-form | U2 → U3 → U4 | YouTube + feed variants |
| Full multi-platform | U1 → U3 → U4 → U5 | Short-form master → all platform exports |
| One-shot everything | U6 alone | Full production run, all formats, all QA |
| SEO-only pass | U4 (SEO section only) | Video already rendered, need publish package |
| QA-only gate | U5 (gate section only) | Check existing renders before shipping |
Pro-tip: Template Variables
Every template uses {VARIABLES}. Fill them before running:
# ponytail: These are the variables every template needs.
# Copy this block, fill values, paste at top of your agent prompt.
RAW_PATH="/path/to/raw_screen.mp4"
APP_NAME="Dose Calculator" # Dose Calculator | Female ProMedic | Coach ProMedic | Dentist Pro | Generic
OUT_DIR="/path/to/output"
FORCE_FACELESS=true
# Brand vars (auto-fill from editor.addict.best #brand table)
WB="5900" # Kelvin
EXPOSURE="+0.2" # EV
BLACKS="8" # RGB lift
WHITES="245" # Highlight cap
SATURATION="-8" # percent
GRAIN="0" # percent
VIGNETTE="light" # none | light
ACCENT="blue" # Dose=blue | Female=rose | Coach=orange | Dentist=teal
ZOOM_MIN="1.00"
ZOOM_MAX="1.15" # Per-app ceiling — NEVER exceed
HOOK_MIN="1.0"
HOOK_MAX="1.8"
INTERRUPT_MIN="2.0"
INTERRUPT_MAX="3.0"
FFmpeg Command Recipes
1. Probe any file first (always start here)
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
Pro-tip: Pipe to jq for quick checks:
# Duration only
ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4
# Resolution
ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 input.mp4
# FPS
ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 input.mp4
2. Archive raw (always before any edit)
mkdir -p "$OUT_DIR/raw_archive"
cp "$RAW_PATH" "$OUT_DIR/raw_archive/"
3. HDR → SDR (run if ffprobe shows bt2020/hlg/pq)
ffmpeg -i "$RAW_PATH" \
-vf "zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709:t=bt709:m=bt709,tonemap=hable:desat=0,zscale=t=bt709,format=yuv420p" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
"$OUT_DIR/sdr.mp4"
4. Crop browser chrome / dock
# Pro-tip: measure chrome height with ffprobe frame grab first
# Top 80px chrome + bottom 80px dock = crop 160px total
ffmpeg -i raw.mp4 \
-vf "crop=in_w:in_h-160:0:80" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
cropped.mp4
5. Brand grade (Clean High-Key — Dose/Dentist default)
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.03:contrast=1.05:saturation=0.92,curves=m='0/0.03 0.5/0.52 1/0.96'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded.mp4
Pro-tip: For Female ProMedic (warm rose), shift saturation up and add warmth:
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.03:contrast=1.04:saturation=0.97,colorbalance=rs=0.04:gs=-0.01:bs=-0.03,curves=m='0/0.04 0.5/0.53 1/0.97'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded_female.mp4
Pro-tip: For Coach ProMedic (neutral-warm, slightly saturated):
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.04:contrast=1.06:saturation=1.03,curves=m='0/0.02 0.5/0.53 1/0.98'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded_coach.mp4
6. Ken Burns from still image → clip
# ponytail: ALWAYS -framerate 30 on image inputs (VFR trap kills sync)
ffmpeg -framerate 30 -loop 1 -t 4 -i still.png \
-vf "scale=3840:2160,zoompan=z='min(zoom+0.001,1.15)':d=120:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=1080x1920" \
-c:v libx264 -t 4 -pix_fmt yuv420p \
ken_burns.mp4
Pro-tip: Change 1.15 to your app's {ZOOM_MAX}. For Coach use 1.22, for Dose/Dentist use 1.15.
7. Image folder → slideshow video
# ponytail: -framerate 30 is mandatory, not optional
ffmpeg -framerate 30 -pattern_type glob -i 'images/*.png' \
-vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,zoompan=z='min(zoom+0.0008,1.12)':d=90:s=1080x1920" \
-c:v libx264 -pix_fmt yuv420p -r 30 \
slideshow.mp4
8. 9:16 blurred-fill from landscape source
ffmpeg -i landscape.mp4 \
-filter_complex "[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,boxblur=20:5[bg];[0:v]scale=1080:-2:force_original_aspect_ratio=decrease[fg];[bg][fg]overlay=(W-w)/2:(H-h)/2" \
-c:v libx264 -preset slow -crf 18 \
vertical_blurred.mp4
9. Mux voiceover — no A/V drift
# ponytail: apad + -shortest is the A/V drift killer. Never skip both.
ffmpeg -i video.mp4 -i voiceover.wav \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
-af "apad" -shortest \
muxed.mp4
10. Loudnorm (EBU R128 — all platforms)
# Standard: -14 LUFS (YouTube, IG, FB, LinkedIn)
ffmpeg -i input.mp4 \
-af "loudnorm=I=-14:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized.mp4
# TikTok loud-feed variant: -11 to -12 LUFS
ffmpeg -i input.mp4 \
-af "loudnorm=I=-11:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized_loud.mp4
11. Duck music under voiceover
# ponytail: volume=0.3 ducks music to ~10dB below VO; amix merges them
ffmpeg -i voiceover.wav -i music.mp3 \
-filter_complex "[1:a]volume=0.3[music];[0:a][music]amix=inputs=2:duration=first:dropout_transition=2[out]" \
-map "[out]" -c:a aac -b:a 192k -ar 48000 \
mixed_audio.aac
Pro-tip: For dynamic ducking (music dips only when VO is speaking), use FFmpeg's sidechaincompress:
ffmpeg -i voiceover.wav -i music.mp3 \
-filter_complex "[0:a]asplit=2[vo][sc];[1:a][sc]sidechaincompress=threshold=0.02:ratio=6:attack=200:release=1000[ducked];[vo][ducked]amix=inputs=2:duration=first[out]" \
-map "[out]" -c:a aac -b:a 192k -ar 48000 \
mixed_dynamic.aac
12. Silence detection (for dead-air cuts)
# Find silences longer than 0.4s at -30dB threshold (hyper pace)
ffmpeg -i input.mp4 -af "silencedetect=noise=-30dB:d=0.4" -f null - 2>&1 | grep "silence_"
# For balanced pace, use d=0.55
# For story pace, use d=0.75
13. Extract frames for QA check
# Grab frames at 25%, 50%, 75% of duration for visual QA
DURATION=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4)
for pct in 25 50 75; do
T=$(echo "$DURATION * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i input.mp4 -frames:v 1 "qa_frame_${pct}pct.png" -y
done
14. Final export — short-form (U1/U5 output)
ffmpeg -i processed.mp4 \
-c:v libx264 -profile:v high -level 4.1 \
-b:v 15M -maxrate 20M -bufsize 30M \
-r 30 -g 60 \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
-vf "scale=1080:1920" \
"$OUT_DIR/short_916.mp4"
15. Final export — long-form (U2 output)
ffmpeg -i processed.mp4 \
-c:v libx264 -profile:v high -level 4.1 \
-b:v 20M -maxrate 25M -bufsize 40M \
-r 30 -g 60 \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
-vf "scale=1920:1080" \
"$OUT_DIR/long_169.mp4"
16. Re-crop for feed formats (U4 output)
# 4:5 feed (1080x1350) — re-center, don't blind-crop
ffmpeg -i master.mp4 \
-vf "scale=1080:1350:force_original_aspect_ratio=decrease,pad=1080:1350:(ow-iw)/2:(oh-ih)/2:black" \
-c:v libx264 -crf 18 -c:a copy \
"$OUT_DIR/feed_45.mp4"
# 1:1 feed (1080x1080)
ffmpeg -i master.mp4 \
-vf "scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:black" \
-c:v libx264 -crf 18 -c:a copy \
"$OUT_DIR/feed_11.mp4"
17. Whisper transcription (for captions — U3 step 0)
# ponytail: word-level timestamps are required for kinetic captions
# Whisper is 100% free, local, no API key — runs on CPU or GPU
whisper input.mp4 --model base --language en --output_format json --word_timestamps True --output_dir "$OUT_DIR"
Pro-tip: For better accuracy on medical/technical terms, use --model small or --model medium (still free, just slower).
18. Caption burn-in from SRT (free, local)
# Burn .srt subtitles directly into the video
ffmpeg -i input.mp4 -vf "subtitles=captions.srt:force_style='FontName=Arial,FontSize=22,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,BorderStyle=3,Outline=2'" \
-c:v libx264 -crf 18 -c:a copy \
captioned.mp4
Pro-tip: For kinetic-style word-highlight, use pysubs2 to split SRT into 2–4 word groups:
python3 -c "
import pysubs2
subs = pysubs2.load('captions.srt')
# pysubs2 is free: pip install pysubs2
for line in subs:
words = line.text.split()
# Split into 3-word chunks with even timing
chunk_size = 3
duration = line.end - line.start
chunks = [words[i:i+chunk_size] for i in range(0, len(words), chunk_size)]
for i, chunk in enumerate(chunks):
t0 = line.start + (duration * i // len(chunks))
t1 = line.start + (duration * (i+1) // len(chunks))
print(f'{pysubs2.time.ms_to_str(t0)} --> {pysubs2.time.ms_to_str(t1)}')
print(' '.join(chunk))
"
19. Scene/shot detection (free, for interrupt placement)
# Detect scene changes — useful for finding where to place pattern interrupts
ffmpeg -i input.mp4 -vf "select='gt(scene,0.3)',showinfo" -f null - 2>&1 | grep showinfo
# Adjust 0.3 threshold: lower = more sensitive, higher = fewer cuts
20. Speed ramp (setup fast, payoff slow)
# 1.5× speed on setup (0-10s), normal speed on payoff (10s-end)
ffmpeg -i input.mp4 \
-filter_complex "[0:v]trim=0:10,setpts=PTS/1.5[fast];[0:v]trim=10,setpts=PTS-STARTPTS[slow];[fast][slow]concat=n=2:v=1:a=0[v];[0:a]atrim=0:10,atempo=1.5[afast];[0:a]atrim=10,asetpts=PTS-STARTPTS[aslow];[afast][aslow]concat=n=2:v=0:a=1[a]" \
-map "[v]" -map "[a]" -c:v libx264 -crf 18 -c:a aac -ar 48000 \
speed_ramped.mp4
Pro-Tips by Template
U1 — Screen → 9:16 Short-Form
- Always probe before grading. If source is already 1080×1920, skip reframe.
- Hook must work on mute. Test by playing first 3s with volume at zero — if message is unclear, your captions/visuals failed.
- Count-up numbers > static pop. For Dose Calculator results, animate 0→final in 0.5–0.8s with a soft pop SFX. Never just flash the number.
- Two variants minimum. Always cut an ultra-tight (12–22s) AND a standard (25–40s). Different platforms reward different lengths.
- Zoom target = the number, not the full screen. Ken Burns should drift toward the result/dose/value on screen.
U2 — Screen → 16:9 Long + Feed
- Build 9:16 first, then expand. Never start with long-form — you'll drift the grade. Short is the locked reference.
- Kinetic captions only in the hook. After the first 5–12s, switch to steady full-clause subtitles. Constant kinetic text fatigues viewers on 3+ minute videos.
- Chapters are mandatory for YouTube. Mark: Problem / Solution / Proof / How it works / CTA.
- Grid crop test for 4:5. The key content must sit inside the central 1080×1080 band (y:135–1215) because Instagram crops to square on the profile grid.
- End-screen zone. Keep the last 5–20s clear in the central 90% for YouTube end-screen cards.
U3 — General Enhance
- Name the tone in one word. If you need three effects to describe your look, simplify. "Clinical." "Warm." "Gritty." One word.
- Script density = ~1 idea per 15s. Don't cram multiple claims into one breath.
- Visual change every 7–10s minimum for feed content (not just when the script changes — independently).
- Effects on app UI are poison. Never stack grain + light-leak + blur + chromatic aberration on clinical numeric screens. Use
app-techkit = clean high-key, zero grain on numbers. - Speed ramp recipe: 1.5–2× on setup/context, normal or slight slow on payoff/result reveal.
- Promedic pack is conditional. Detect Dose / Female / Coach / Dentist ProMedic first. If not Promedic → skip brand table, per-app zoom tiers, app CTAs, and platform picks; use general KIT+PACE only. If Promedic → force
app-tech, inject brand table, enforce per-app zoom ceilings (hook included), format safe zones, short-form-first multi-export, save-reason CTAs, and app platform emphasis. Reportpromedic_pack=applied|skipped. - When Promedic: identity = pacing, not only color. Coach must feel faster (interrupts ~1.8–2.8s, wider zoom). Dose/Dentist stay precise. Female warmer/honest — not clinical-cold. Color alone does not brand the family.
U4 — Platform-Specific
- Same grade, different pacing. Never re-grade for a platform. Only change: crop, caption density, interrupts cadence, loudness, CTA language.
- LinkedIn is a different animal. Skip zoom-punches for Dose/Dentist. Professional CTA. Trust > virality tricks. 16:9 or 1:1 preferred.
- TikTok vs Reels: Almost identical pipeline, but TikTok rewards slightly louder (-11 LUFS vs -14) and faster hook pressure (1.0–1.3s intent vs ~2s for Reels).
- If master can't crop cleanly for a format, say so. Mark INCONCLUSIVE and request a re-record. Don't force a broken crop.
U5 — Viral Pipeline + Final Gate
- Step 1 (Hook) is highest ROI. Spend 80% of your optimization time on the first 3 seconds.
- Loop engineering: Match the last spoken word/visual fragment to flow back into the opening. Users rewatching = algorithm signal.
- QA is three-state. PASS / FAIL / INCONCLUSIVE. "I think it's fine" = INCONCLUSIVE = not done.
- Max 3 re-render attempts. If you can't pass QA in 3 tries, the input needs to change, not the render settings.
U6 — Master Orchestrator
- Use U6 when you have raw material and want everything. It chains A→J (capture → short → enhance → viral → long → feed → platform → SEO → app guardrails → final gate).
- Stage checkpoints. After each stage (B, C, D...), verify the intermediate file before proceeding. Don't discover a grade problem at stage J.
- App guardrails are STOP conditions. If any common mistake for the app appears in your plan or render → FAIL immediately. Don't finish and then check.
Common Mistakes (from editor.addict.best §8)
All Apps
- ❌ Starting with logo / greeting / slow fade → always cold-open
- ❌ Dead air longer than interrupt budget
- ❌ Captions outside safe zone
- ❌ Wrong safe-zone numbers for wrong format (e.g., using 9:16 zones on 16:9)
- ❌ SFX louder than voiceover
- ❌ Missing
-framerate 30on image inputs - ❌ Missing
apad+-shortestwhen muxing audio - ❌ Missing
-ar 48000on final audio - ❌ Claiming "done" without QA PASS
Per-App Traps
| App | Never do this |
|---|---|
| Dose Calculator | Invent/hallucinate medical numbers. Use energetic meme grade. Exceed 1.15× zoom. |
| Female ProMedic | Use childish pink (it's rose-gold/blush). Mix Coach energy/pacing. |
| Coach ProMedic | Use clinical restraint — Coach is the highest-energy app. Forget readability on form cues. |
| Dentist Pro | Use teal identical to Dose blue (Dentist = teal/cyan, Dose = clinical blue). Over-punch on short-form. |
Quick Shell One-Liners
# Check if video is HDR
ffprobe -v quiet -select_streams v:0 -show_entries stream=color_transfer -of csv=p=0 input.mp4
# If output is "smpte2084" or "arib-std-b67" → needs HDR→SDR
# Verify A/V sync drift
ffprobe -v quiet -show_entries stream=start_time -of csv=p=0 input.mp4
# Both streams should start at ~0.000000
# Check final loudness (post-loudnorm verification)
ffmpeg -i final.mp4 -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | tail -20
# Batch probe all outputs
for f in "$OUT_DIR"/*.mp4; do
echo "=== $f ==="
ffprobe -v quiet -show_entries stream=width,height,r_frame_rate,codec_name -show_entries format=duration,size -of flat "$f"
done
# Verify no watermark (check for alpha/overlay in bottom-right)
ffmpeg -ss 1 -i input.mp4 -frames:v 1 -vf "crop=200:50:iw-200:ih-50" check_watermark.png
# Quick safe-zone overlay for 9:16 (visual check)
ffmpeg -i short.mp4 -vf "drawbox=x=60:y=250:w=870:h=1200:color=red@0.3:t=2" -t 5 safezone_check.mp4
Combining Templates — Real Examples
Example 1: Dose Calculator → TikTok + Reels
1. Fill variables: APP_NAME="Dose Calculator" ZOOM_MAX="1.15" WB="5900" ...
2. Run U1 (Screen → 9:16):
- Archive raw → HDR check → crop chrome → grade (clean high-key) →
Ken Burns on dose result → safe zone 1080×1920 →
kinetic captions → count-up numbers → audio normalize →
export short (12-22s) + standard (25-40s)
3. Run U3 (Enhance):
- KIT=app-tech PACE=balanced
- Hook check → dead air cut → caption coverage check → loop attempt
4. Run U5 gate section:
- QA all outputs → verify resolution, faceless, safe zone, zoom ≤ 1.15×
5. Run U4 SEO section:
- Title: "Most clinicians miss this interaction — live dose fix"
- Hashtags: #dosecalculator #clinicaltools #medicalapp
- Save CTA: "Save this clinical reference"
Example 2: Coach ProMedic → YouTube Long + IG Feed
1. Fill variables: APP_NAME="Coach ProMedic" ZOOM_MAX="1.22" WB="5700" ...
2. Run U1 first (short master as grade reference)
3. Run U2 (Screen → 16:9 Long + Feed):
- Expand from short master → 1920×1080 → chapters →
kinetic hook only, then steady subtitles →
interrupts every 6-10s → export long
- Feed: re-center UI → 1080×1350 (4:5) + 1080×1080 (1:1)
4. Run U3 (Enhance) on long master
5. Run U5 (Final Gate) on all outputs
6. Run U4 SEO for YouTube:
- Chapters: 0:00 Problem | 0:45 Solution | 1:30 Proof | 2:15 How | 3:00 CTA
- Description first 150 chars = search intent
Example 3: Full Production — U6 One-Shot
1. Fill variables + set JOBS="short_916,long_169,feed_45,feed_11,platform_pack"
2. U6 runs stages A→J automatically:
A. Archive + HDR→SDR + chrome crop
B. Short 9:16 master
C. Enhance pass (retention ROI)
D. Viral pipeline (hook→loop→variants)
E. Long 16:9 from short
F. Feed 4:5 + 1:1
G. Platform pack (tiktok, reels, yt_shorts, yt_long, ig_feed_45, linkedin)
H. SEO publish package per variant
I. App guardrails check
J. Final gate — all_pass required
3. Output: qa_report.md in {OUT_DIR}/reports/
Six Deadly Sins (memorize these)
- VFR trap — always
-framerate 30on image inputs - A/V drift — always
apad+-shortestwhen muxing, always-ar 48000 - Context decay — save state checkpoints after every stage
- False positive "done" — only QA PASS counts (INCONCLUSIVE = not done)
- Blind acceptance — visually verify frames at 25/50/75% duration
- Face leak — faceless absolute on all brand content, always check generated assets
Safe Zone Quick Reference
| Format | Canvas | Safe area for text/captions | Grid-crop safe |
|---|---|---|---|
| 9:16 short | 1080×1920 | x: 60–930, y: 250–1450 | N/A |
| 16:9 long | 1920×1080 | x: 120–1800, y: 70–1010 | N/A |
| 4:5 feed | 1080×1350 | Central 1080×1080 (y: 135–1215) | Square center |
| 1:1 feed | 1080×1080 | Central ~90% | Full frame |
| Stories | 1080×1920 | Same as 9:16 but stricter top/bottom | N/A |
Pacing Cheat Sheet
| Preset | Silence cutoff | Interrupt cadence | Best for |
|---|---|---|---|
hyper | 0.40 s | 2.0–2.6 s | TikTok, Reels, Coach short-form |
balanced | 0.55 s | 2.8–3.8 s | General short-form, Dose/Dentist |
story | 0.75 s | 4.0–5.5 s | Long-form, tutorials, Female storytime |
Free Tools Stack (zero paid dependencies)
Every command in this file uses free, open-source, locally-run tools. No paid API keys needed (your AI agent API is the only external dependency).
| Tool | What it does | Install | Cost |
|---|---|---|---|
| FFmpeg | All video/audio processing, export, grade, crop, mux | brew install ffmpeg (mac) / apt install ffmpeg (linux) | Free |
| ffprobe | Media analysis, duration, resolution, codec detection | Included with FFmpeg | Free |
| Whisper | Speech → text with word timestamps (captions) | pip install openai-whisper (runs locally, no API key) | Free |
| pysubs2 | SRT/ASS caption manipulation, chunking, timing | pip install pysubs2 | Free |
| ImageMagick | Image resize, overlay, thumbnail generation | brew install imagemagick / apt install imagemagick | Free |
| bc | Math in shell (duration calculations) | Pre-installed on mac/linux | Free |
| jq | JSON parsing (ffprobe output, Whisper JSON) | brew install jq / apt install jq | Free |
| Python 3 | Scripting for batch ops, caption splitting | Pre-installed | Free |
Not used, not needed: No Adobe, no CapCut API, no RunwayML, no Eleven Labs, no paid cloud vision. The AI agent (your existing API) handles creative decisions; these tools handle execution.
How to Merge This .md with editor.addict.best HTML
The goal: the HTML app has the 6 unified templates (the what). This .md has the commands and pro-tips (the how). Together they form one unified system. Here's how to combine them correctly.
Method 1: AI Agent reads both files (simplest — recommended)
Give your AI agent both references in the system prompt or context:
You have two reference documents:
1. https://editor.addict.best — the master HTML app with 6 unified templates,
conflict resolution laws, brand table, and full template text.
Sections: #s1–#s9, #six-templates (u1–u6), #brand, #master
2. editor-pro-tips-and-commands.md — FFmpeg commands, pro-tips per template,
combination recipes, free tool stack, QA one-liners.
Workflow:
- Pick template from the HTML (e.g. copy U1 from #u1-body)
- Fill {VARIABLES} using the brand table from HTML #brand
- Execute using FFmpeg commands from the .md
- QA using the shell one-liners from the .md
- SEO package using the .md combination examples
Pro-tip: The HTML has a search bar (press /) — tell the agent to use section IDs (#s1, #u3, #brand) to locate content fast.
Method 2: Embed .md as a linked companion in the HTML
Add a single link in the HTML's nav or site-inventory section pointing to this file:
<!-- Add to editor.addict.best nav section -->
<a href="/editor-pro-tips-and-commands.md">📋 Pro-Tips & Commands</a>
The .md is already served from the same web root at:
https://editor.addict.best/editor-pro-tips-and-commands.md
So the agent can fetch either file from the same domain. No merge needed — the HTML is the template source, the .md is the execution guide.
Method 3: Section-to-section cross-reference
When chaining templates, map HTML sections to .md sections:
| Step | Read from HTML | Execute with .md |
|---|---|---|
| Pick template | #u1-body through #u6-body | — |
| Fill brand vars | #brand table | "Template Variables" block |
| Grade | Template's PHASE 2 step 1 | Recipe #5 (brand grade commands) |
| Motion / Ken Burns | Template's PHASE 2 step 2 | Recipe #6 (Ken Burns) or #7 (slideshow) |
| Captions | Template's PHASE 2 step 4 | Recipe #17 (Whisper) + #18 (burn-in) |
| Audio mux | Template's PHASE 2 step 6 | Recipe #9 (mux) + #10 (loudnorm) + #11 (duck) |
| Export | Template's PHASE 2 step 8 | Recipe #14 (short) or #15 (long) or #16 (feed) |
| QA | Template's PHASE 3 checklist | "Shell One-Liners" + Recipe #13 (frame extract) |
| SEO | Template's SEO section | "Combining Templates" examples |
Method 4: Agent self-check loop
After any render, the agent should run this verification sequence (all free, all local):
# 1. File exists and has video stream?
ffprobe -v quiet -show_entries stream=codec_type -of csv=p=0 "$OUTPUT" | grep -q video && echo "PASS: has video" || echo "FAIL: no video stream"
# 2. Resolution correct?
RES=$(ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "Resolution: $RES" # Compare to expected canvas
# 3. Duration > 0?
DUR=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 "$OUTPUT")
echo "Duration: ${DUR}s" # Must be > 0
# 4. FPS = 30?
FPS=$(ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "FPS: $FPS" # Should be 30/1
# 5. Audio sample rate = 48000?
SR=$(ffprobe -v quiet -show_entries stream=sample_rate -of csv=p=0 -select_streams a:0 "$OUTPUT")
echo "Sample rate: $SR" # Must be 48000
# 6. Visual QA frames
for pct in 25 50 75; do
T=$(echo "$DUR * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i "$OUTPUT" -frames:v 1 "qa_${pct}.png" -y 2>/dev/null
done
echo "QA frames saved — visually inspect for black/corrupt/face-leak"
# 7. Loudness check
ffmpeg -i "$OUTPUT" -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | grep input_i
All 7 checks use free tools. The AI agent reads the results and decides PASS / FAIL / INCONCLUSIVE per the HTML template's QA checklist.
This .md supports editor.addict.best. The HTML app owns the templates — this file owns the commands, pro-tips, and merge logic. Both are served from the same domain. Together they are the complete system.
Full source of editor-pro-tips-and-commands.md (every character preserved)
Also live at /editor-pro-tips-and-commands.md.
# Editor Pro-Tips & Commands
> Companion for **editor.addict.best** — the single HTML app.
> Commands, pro-tips, and combination recipes that make the 6 unified templates work.
> **All tools are free and local.** No paid APIs, no SaaS subscriptions. Your AI agent API is the only external dependency.
---
## How the 6 Templates Connect
```
Raw screen recording or image folder
│
▼
┌─── U1 or U2 ───┐ Pick ONE entry point:
│ Screen → 9:16 │ • U1 = short-form (TikTok/Reels/Shorts)
│ Screen → 16:9 │ • U2 = long-form (YouTube) + feed (4:5, 1:1)
└────────┬────────┘
▼
U3 (Enhance) Always run after U1/U2 — retention polish
│
▼
U4 (Platform + SEO) Multi-platform export + publish package
│
▼
U5 (Viral + Final Gate) Short-form viral pipeline + QA gate
│
▼
U6 (Master + App Pack) OR skip U1–U5 and use U6 as full orchestrator
```
### Combination Rules
| Workflow | Templates to chain | When |
|:---|:---|:---|
| Quick short-form | U1 → U3 → U5 | One app, one platform, fast turnaround |
| Quick long-form | U2 → U3 → U4 | YouTube + feed variants |
| Full multi-platform | U1 → U3 → U4 → U5 | Short-form master → all platform exports |
| One-shot everything | U6 alone | Full production run, all formats, all QA |
| SEO-only pass | U4 (SEO section only) | Video already rendered, need publish package |
| QA-only gate | U5 (gate section only) | Check existing renders before shipping |
### Pro-tip: Template Variables
Every template uses `{VARIABLES}`. Fill them before running:
```bash
# ponytail: These are the variables every template needs.
# Copy this block, fill values, paste at top of your agent prompt.
RAW_PATH="/path/to/raw_screen.mp4"
APP_NAME="Dose Calculator" # Dose Calculator | Female ProMedic | Coach ProMedic | Dentist Pro | Generic
OUT_DIR="/path/to/output"
FORCE_FACELESS=true
# Brand vars (auto-fill from editor.addict.best #brand table)
WB="5900" # Kelvin
EXPOSURE="+0.2" # EV
BLACKS="8" # RGB lift
WHITES="245" # Highlight cap
SATURATION="-8" # percent
GRAIN="0" # percent
VIGNETTE="light" # none | light
ACCENT="blue" # Dose=blue | Female=rose | Coach=orange | Dentist=teal
ZOOM_MIN="1.00"
ZOOM_MAX="1.15" # Per-app ceiling — NEVER exceed
HOOK_MIN="1.0"
HOOK_MAX="1.8"
INTERRUPT_MIN="2.0"
INTERRUPT_MAX="3.0"
```
---
## FFmpeg Command Recipes
### 1. Probe any file first (always start here)
```bash
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
```
Pro-tip: Pipe to `jq` for quick checks:
```bash
# Duration only
ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4
# Resolution
ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 input.mp4
# FPS
ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 input.mp4
```
### 2. Archive raw (always before any edit)
```bash
mkdir -p "$OUT_DIR/raw_archive"
cp "$RAW_PATH" "$OUT_DIR/raw_archive/"
```
### 3. HDR → SDR (run if ffprobe shows bt2020/hlg/pq)
```bash
ffmpeg -i "$RAW_PATH" \
-vf "zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709:t=bt709:m=bt709,tonemap=hable:desat=0,zscale=t=bt709,format=yuv420p" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
"$OUT_DIR/sdr.mp4"
```
### 4. Crop browser chrome / dock
```bash
# Pro-tip: measure chrome height with ffprobe frame grab first
# Top 80px chrome + bottom 80px dock = crop 160px total
ffmpeg -i raw.mp4 \
-vf "crop=in_w:in_h-160:0:80" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
cropped.mp4
```
### 5. Brand grade (Clean High-Key — Dose/Dentist default)
```bash
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.03:contrast=1.05:saturation=0.92,curves=m='0/0.03 0.5/0.52 1/0.96'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded.mp4
```
Pro-tip: For **Female ProMedic** (warm rose), shift saturation up and add warmth:
```bash
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.03:contrast=1.04:saturation=0.97,colorbalance=rs=0.04:gs=-0.01:bs=-0.03,curves=m='0/0.04 0.5/0.53 1/0.97'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded_female.mp4
```
Pro-tip: For **Coach ProMedic** (neutral-warm, slightly saturated):
```bash
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.04:contrast=1.06:saturation=1.03,curves=m='0/0.02 0.5/0.53 1/0.98'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded_coach.mp4
```
### 6. Ken Burns from still image → clip
```bash
# ponytail: ALWAYS -framerate 30 on image inputs (VFR trap kills sync)
ffmpeg -framerate 30 -loop 1 -t 4 -i still.png \
-vf "scale=3840:2160,zoompan=z='min(zoom+0.001,1.15)':d=120:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=1080x1920" \
-c:v libx264 -t 4 -pix_fmt yuv420p \
ken_burns.mp4
```
Pro-tip: Change `1.15` to your app's `{ZOOM_MAX}`. For Coach use `1.22`, for Dose/Dentist use `1.15`.
### 7. Image folder → slideshow video
```bash
# ponytail: -framerate 30 is mandatory, not optional
ffmpeg -framerate 30 -pattern_type glob -i 'images/*.png' \
-vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,zoompan=z='min(zoom+0.0008,1.12)':d=90:s=1080x1920" \
-c:v libx264 -pix_fmt yuv420p -r 30 \
slideshow.mp4
```
### 8. 9:16 blurred-fill from landscape source
```bash
ffmpeg -i landscape.mp4 \
-filter_complex "[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,boxblur=20:5[bg];[0:v]scale=1080:-2:force_original_aspect_ratio=decrease[fg];[bg][fg]overlay=(W-w)/2:(H-h)/2" \
-c:v libx264 -preset slow -crf 18 \
vertical_blurred.mp4
```
### 9. Mux voiceover — no A/V drift
```bash
# ponytail: apad + -shortest is the A/V drift killer. Never skip both.
ffmpeg -i video.mp4 -i voiceover.wav \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
-af "apad" -shortest \
muxed.mp4
```
### 10. Loudnorm (EBU R128 — all platforms)
```bash
# Standard: -14 LUFS (YouTube, IG, FB, LinkedIn)
ffmpeg -i input.mp4 \
-af "loudnorm=I=-14:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized.mp4
# TikTok loud-feed variant: -11 to -12 LUFS
ffmpeg -i input.mp4 \
-af "loudnorm=I=-11:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized_loud.mp4
```
### 11. Duck music under voiceover
```bash
# ponytail: volume=0.3 ducks music to ~10dB below VO; amix merges them
ffmpeg -i voiceover.wav -i music.mp3 \
-filter_complex "[1:a]volume=0.3[music];[0:a][music]amix=inputs=2:duration=first:dropout_transition=2[out]" \
-map "[out]" -c:a aac -b:a 192k -ar 48000 \
mixed_audio.aac
```
Pro-tip: For dynamic ducking (music dips only when VO is speaking), use FFmpeg's `sidechaincompress`:
```bash
ffmpeg -i voiceover.wav -i music.mp3 \
-filter_complex "[0:a]asplit=2[vo][sc];[1:a][sc]sidechaincompress=threshold=0.02:ratio=6:attack=200:release=1000[ducked];[vo][ducked]amix=inputs=2:duration=first[out]" \
-map "[out]" -c:a aac -b:a 192k -ar 48000 \
mixed_dynamic.aac
```
### 12. Silence detection (for dead-air cuts)
```bash
# Find silences longer than 0.4s at -30dB threshold (hyper pace)
ffmpeg -i input.mp4 -af "silencedetect=noise=-30dB:d=0.4" -f null - 2>&1 | grep "silence_"
# For balanced pace, use d=0.55
# For story pace, use d=0.75
```
### 13. Extract frames for QA check
```bash
# Grab frames at 25%, 50%, 75% of duration for visual QA
DURATION=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4)
for pct in 25 50 75; do
T=$(echo "$DURATION * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i input.mp4 -frames:v 1 "qa_frame_${pct}pct.png" -y
done
```
### 14. Final export — short-form (U1/U5 output)
```bash
ffmpeg -i processed.mp4 \
-c:v libx264 -profile:v high -level 4.1 \
-b:v 15M -maxrate 20M -bufsize 30M \
-r 30 -g 60 \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
-vf "scale=1080:1920" \
"$OUT_DIR/short_916.mp4"
```
### 15. Final export — long-form (U2 output)
```bash
ffmpeg -i processed.mp4 \
-c:v libx264 -profile:v high -level 4.1 \
-b:v 20M -maxrate 25M -bufsize 40M \
-r 30 -g 60 \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
-vf "scale=1920:1080" \
"$OUT_DIR/long_169.mp4"
```
### 16. Re-crop for feed formats (U4 output)
```bash
# 4:5 feed (1080x1350) — re-center, don't blind-crop
ffmpeg -i master.mp4 \
-vf "scale=1080:1350:force_original_aspect_ratio=decrease,pad=1080:1350:(ow-iw)/2:(oh-ih)/2:black" \
-c:v libx264 -crf 18 -c:a copy \
"$OUT_DIR/feed_45.mp4"
# 1:1 feed (1080x1080)
ffmpeg -i master.mp4 \
-vf "scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:black" \
-c:v libx264 -crf 18 -c:a copy \
"$OUT_DIR/feed_11.mp4"
```
### 17. Whisper transcription (for captions — U3 step 0)
```bash
# ponytail: word-level timestamps are required for kinetic captions
# Whisper is 100% free, local, no API key — runs on CPU or GPU
whisper input.mp4 --model base --language en --output_format json --word_timestamps True --output_dir "$OUT_DIR"
```
Pro-tip: For better accuracy on medical/technical terms, use `--model small` or `--model medium` (still free, just slower).
### 18. Caption burn-in from SRT (free, local)
```bash
# Burn .srt subtitles directly into the video
ffmpeg -i input.mp4 -vf "subtitles=captions.srt:force_style='FontName=Arial,FontSize=22,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,BorderStyle=3,Outline=2'" \
-c:v libx264 -crf 18 -c:a copy \
captioned.mp4
```
Pro-tip: For kinetic-style word-highlight, use `pysubs2` to split SRT into 2–4 word groups:
```bash
python3 -c "
import pysubs2
subs = pysubs2.load('captions.srt')
# pysubs2 is free: pip install pysubs2
for line in subs:
words = line.text.split()
# Split into 3-word chunks with even timing
chunk_size = 3
duration = line.end - line.start
chunks = [words[i:i+chunk_size] for i in range(0, len(words), chunk_size)]
for i, chunk in enumerate(chunks):
t0 = line.start + (duration * i // len(chunks))
t1 = line.start + (duration * (i+1) // len(chunks))
print(f'{pysubs2.time.ms_to_str(t0)} --> {pysubs2.time.ms_to_str(t1)}')
print(' '.join(chunk))
"
```
### 19. Scene/shot detection (free, for interrupt placement)
```bash
# Detect scene changes — useful for finding where to place pattern interrupts
ffmpeg -i input.mp4 -vf "select='gt(scene,0.3)',showinfo" -f null - 2>&1 | grep showinfo
# Adjust 0.3 threshold: lower = more sensitive, higher = fewer cuts
```
### 20. Speed ramp (setup fast, payoff slow)
```bash
# 1.5× speed on setup (0-10s), normal speed on payoff (10s-end)
ffmpeg -i input.mp4 \
-filter_complex "[0:v]trim=0:10,setpts=PTS/1.5[fast];[0:v]trim=10,setpts=PTS-STARTPTS[slow];[fast][slow]concat=n=2:v=1:a=0[v];[0:a]atrim=0:10,atempo=1.5[afast];[0:a]atrim=10,asetpts=PTS-STARTPTS[aslow];[afast][aslow]concat=n=2:v=0:a=1[a]" \
-map "[v]" -map "[a]" -c:v libx264 -crf 18 -c:a aac -ar 48000 \
speed_ramped.mp4
```
---
## Pro-Tips by Template
### U1 — Screen → 9:16 Short-Form
1. **Always probe before grading.** If source is already 1080×1920, skip reframe.
2. **Hook must work on mute.** Test by playing first 3s with volume at zero — if message is unclear, your captions/visuals failed.
3. **Count-up numbers > static pop.** For Dose Calculator results, animate 0→final in 0.5–0.8s with a soft pop SFX. Never just flash the number.
4. **Two variants minimum.** Always cut an ultra-tight (12–22s) AND a standard (25–40s). Different platforms reward different lengths.
5. **Zoom target = the number, not the full screen.** Ken Burns should drift toward the result/dose/value on screen.
### U2 — Screen → 16:9 Long + Feed
1. **Build 9:16 first, then expand.** Never start with long-form — you'll drift the grade. Short is the locked reference.
2. **Kinetic captions only in the hook.** After the first 5–12s, switch to steady full-clause subtitles. Constant kinetic text fatigues viewers on 3+ minute videos.
3. **Chapters are mandatory for YouTube.** Mark: Problem / Solution / Proof / How it works / CTA.
4. **Grid crop test for 4:5.** The key content must sit inside the central 1080×1080 band (y:135–1215) because Instagram crops to square on the profile grid.
5. **End-screen zone.** Keep the last 5–20s clear in the central 90% for YouTube end-screen cards.
### U3 — General Enhance
1. **Name the tone in one word.** If you need three effects to describe your look, simplify. "Clinical." "Warm." "Gritty." One word.
2. **Script density = ~1 idea per 15s.** Don't cram multiple claims into one breath.
3. **Visual change every 7–10s minimum** for feed content (not just when the script changes — independently).
4. **Effects on app UI are poison.** Never stack grain + light-leak + blur + chromatic aberration on clinical numeric screens. Use `app-tech` kit = clean high-key, zero grain on numbers.
5. **Speed ramp recipe:** 1.5–2× on setup/context, normal or slight slow on payoff/result reveal
6. **Promedic pack is conditional.** Detect Dose / Female / Coach / Dentist ProMedic first. If not Promedic → skip brand table, per-app zoom tiers, app CTAs, and platform picks; use general KIT+PACE only. If Promedic → force `app-tech`, inject brand table, enforce per-app zoom ceilings (hook included), format safe zones, short-form-first multi-export, save-reason CTAs, and app platform emphasis. Report `promedic_pack=applied|skipped`.
7. **When Promedic: identity = pacing, not only color.** Coach must feel faster (interrupts ~1.8–2.8s, wider zoom). Dose/Dentist stay precise. Female warmer/honest — not clinical-cold. Color alone does not brand the family.
### U4 — Platform-Specific
1. **Same grade, different pacing.** Never re-grade for a platform. Only change: crop, caption density, interrupts cadence, loudness, CTA language.
2. **LinkedIn is a different animal.** Skip zoom-punches for Dose/Dentist. Professional CTA. Trust > virality tricks. 16:9 or 1:1 preferred.
3. **TikTok vs Reels:** Almost identical pipeline, but TikTok rewards slightly louder (-11 LUFS vs -14) and faster hook pressure (1.0–1.3s intent vs ~2s for Reels).
4. **If master can't crop cleanly for a format, say so.** Mark INCONCLUSIVE and request a re-record. Don't force a broken crop.
### U5 — Viral Pipeline + Final Gate
1. **Step 1 (Hook) is highest ROI.** Spend 80% of your optimization time on the first 3 seconds.
2. **Loop engineering:** Match the last spoken word/visual fragment to flow back into the opening. Users rewatching = algorithm signal.
3. **QA is three-state.** PASS / FAIL / INCONCLUSIVE. "I think it's fine" = INCONCLUSIVE = not done.
4. **Max 3 re-render attempts.** If you can't pass QA in 3 tries, the input needs to change, not the render settings.
### U6 — Master Orchestrator
1. **Use U6 when you have raw material and want everything.** It chains A→J (capture → short → enhance → viral → long → feed → platform → SEO → app guardrails → final gate).
2. **Stage checkpoints.** After each stage (B, C, D...), verify the intermediate file before proceeding. Don't discover a grade problem at stage J.
3. **App guardrails are STOP conditions.** If any common mistake for the app appears in your plan or render → FAIL immediately. Don't finish and then check.
---
## Common Mistakes (from editor.addict.best §8)
### All Apps
- ❌ Starting with logo / greeting / slow fade → always cold-open
- ❌ Dead air longer than interrupt budget
- ❌ Captions outside safe zone
- ❌ Wrong safe-zone numbers for wrong format (e.g., using 9:16 zones on 16:9)
- ❌ SFX louder than voiceover
- ❌ Missing `-framerate 30` on image inputs
- ❌ Missing `apad` + `-shortest` when muxing audio
- ❌ Missing `-ar 48000` on final audio
- ❌ Claiming "done" without QA PASS
### Per-App Traps
| App | Never do this |
|:---|:---|
| Dose Calculator | Invent/hallucinate medical numbers. Use energetic meme grade. Exceed 1.15× zoom. |
| Female ProMedic | Use childish pink (it's rose-gold/blush). Mix Coach energy/pacing. |
| Coach ProMedic | Use clinical restraint — Coach is the highest-energy app. Forget readability on form cues. |
| Dentist Pro | Use teal identical to Dose blue (Dentist = teal/cyan, Dose = clinical blue). Over-punch on short-form. |
---
## Quick Shell One-Liners
```bash
# Check if video is HDR
ffprobe -v quiet -select_streams v:0 -show_entries stream=color_transfer -of csv=p=0 input.mp4
# If output is "smpte2084" or "arib-std-b67" → needs HDR→SDR
# Verify A/V sync drift
ffprobe -v quiet -show_entries stream=start_time -of csv=p=0 input.mp4
# Both streams should start at ~0.000000
# Check final loudness (post-loudnorm verification)
ffmpeg -i final.mp4 -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | tail -20
# Batch probe all outputs
for f in "$OUT_DIR"/*.mp4; do
echo "=== $f ==="
ffprobe -v quiet -show_entries stream=width,height,r_frame_rate,codec_name -show_entries format=duration,size -of flat "$f"
done
# Verify no watermark (check for alpha/overlay in bottom-right)
ffmpeg -ss 1 -i input.mp4 -frames:v 1 -vf "crop=200:50:iw-200:ih-50" check_watermark.png
# Quick safe-zone overlay for 9:16 (visual check)
ffmpeg -i short.mp4 -vf "drawbox=x=60:y=250:w=870:h=1200:color=red@0.3:t=2" -t 5 safezone_check.mp4
```
---
## Combining Templates — Real Examples
### Example 1: Dose Calculator → TikTok + Reels
```
1. Fill variables: APP_NAME="Dose Calculator" ZOOM_MAX="1.15" WB="5900" ...
2. Run U1 (Screen → 9:16):
- Archive raw → HDR check → crop chrome → grade (clean high-key) →
Ken Burns on dose result → safe zone 1080×1920 →
kinetic captions → count-up numbers → audio normalize →
export short (12-22s) + standard (25-40s)
3. Run U3 (Enhance):
- KIT=app-tech PACE=balanced
- Hook check → dead air cut → caption coverage check → loop attempt
4. Run U5 gate section:
- QA all outputs → verify resolution, faceless, safe zone, zoom ≤ 1.15×
5. Run U4 SEO section:
- Title: "Most clinicians miss this interaction — live dose fix"
- Hashtags: #dosecalculator #clinicaltools #medicalapp
- Save CTA: "Save this clinical reference"
```
### Example 2: Coach ProMedic → YouTube Long + IG Feed
```
1. Fill variables: APP_NAME="Coach ProMedic" ZOOM_MAX="1.22" WB="5700" ...
2. Run U1 first (short master as grade reference)
3. Run U2 (Screen → 16:9 Long + Feed):
- Expand from short master → 1920×1080 → chapters →
kinetic hook only, then steady subtitles →
interrupts every 6-10s → export long
- Feed: re-center UI → 1080×1350 (4:5) + 1080×1080 (1:1)
4. Run U3 (Enhance) on long master
5. Run U5 (Final Gate) on all outputs
6. Run U4 SEO for YouTube:
- Chapters: 0:00 Problem | 0:45 Solution | 1:30 Proof | 2:15 How | 3:00 CTA
- Description first 150 chars = search intent
```
### Example 3: Full Production — U6 One-Shot
```
1. Fill variables + set JOBS="short_916,long_169,feed_45,feed_11,platform_pack"
2. U6 runs stages A→J automatically:
A. Archive + HDR→SDR + chrome crop
B. Short 9:16 master
C. Enhance pass (retention ROI)
D. Viral pipeline (hook→loop→variants)
E. Long 16:9 from short
F. Feed 4:5 + 1:1
G. Platform pack (tiktok, reels, yt_shorts, yt_long, ig_feed_45, linkedin)
H. SEO publish package per variant
I. App guardrails check
J. Final gate — all_pass required
3. Output: qa_report.md in {OUT_DIR}/reports/
```
---
## Six Deadly Sins (memorize these)
1. **VFR trap** — always `-framerate 30` on image inputs
2. **A/V drift** — always `apad` + `-shortest` when muxing, always `-ar 48000`
3. **Context decay** — save state checkpoints after every stage
4. **False positive "done"** — only QA PASS counts (INCONCLUSIVE = not done)
5. **Blind acceptance** — visually verify frames at 25/50/75% duration
6. **Face leak** — faceless absolute on all brand content, always check generated assets
---
## Safe Zone Quick Reference
| Format | Canvas | Safe area for text/captions | Grid-crop safe |
|:---|:---|:---|:---|
| 9:16 short | 1080×1920 | x: 60–930, y: 250–1450 | N/A |
| 16:9 long | 1920×1080 | x: 120–1800, y: 70–1010 | N/A |
| 4:5 feed | 1080×1350 | Central 1080×1080 (y: 135–1215) | Square center |
| 1:1 feed | 1080×1080 | Central ~90% | Full frame |
| Stories | 1080×1920 | Same as 9:16 but stricter top/bottom | N/A |
---
## Pacing Cheat Sheet
| Preset | Silence cutoff | Interrupt cadence | Best for |
|:---|:---|:---|:---|
| `hyper` | 0.40 s | 2.0–2.6 s | TikTok, Reels, Coach short-form |
| `balanced` | 0.55 s | 2.8–3.8 s | General short-form, Dose/Dentist |
| `story` | 0.75 s | 4.0–5.5 s | Long-form, tutorials, Female storytime |
---
## Free Tools Stack (zero paid dependencies)
Every command in this file uses free, open-source, locally-run tools. No paid API keys needed (your AI agent API is the only external dependency).
| Tool | What it does | Install | Cost |
|:---|:---|:---|:---|
| **FFmpeg** | All video/audio processing, export, grade, crop, mux | `brew install ffmpeg` (mac) / `apt install ffmpeg` (linux) | Free |
| **ffprobe** | Media analysis, duration, resolution, codec detection | Included with FFmpeg | Free |
| **Whisper** | Speech → text with word timestamps (captions) | `pip install openai-whisper` (runs locally, no API key) | Free |
| **pysubs2** | SRT/ASS caption manipulation, chunking, timing | `pip install pysubs2` | Free |
| **ImageMagick** | Image resize, overlay, thumbnail generation | `brew install imagemagick` / `apt install imagemagick` | Free |
| **bc** | Math in shell (duration calculations) | Pre-installed on mac/linux | Free |
| **jq** | JSON parsing (ffprobe output, Whisper JSON) | `brew install jq` / `apt install jq` | Free |
| **Python 3** | Scripting for batch ops, caption splitting | Pre-installed | Free |
**Not used, not needed:** No Adobe, no CapCut API, no RunwayML, no Eleven Labs, no paid cloud vision. The AI agent (your existing API) handles creative decisions; these tools handle execution.
---
## How to Merge This .md with editor.addict.best HTML
The goal: the HTML app has the 6 unified templates (the **what**). This .md has the commands and pro-tips (the **how**). Together they form one unified system. Here's how to combine them correctly.
### Method 1: AI Agent reads both files (simplest — recommended)
Give your AI agent both references in the system prompt or context:
```
You have two reference documents:
1. https://editor.addict.best — the master HTML app with 6 unified templates,
conflict resolution laws, brand table, and full template text.
Sections: #s1–#s9, #six-templates (u1–u6), #brand, #master
2. editor-pro-tips-and-commands.md — FFmpeg commands, pro-tips per template,
combination recipes, free tool stack, QA one-liners.
Workflow:
- Pick template from the HTML (e.g. copy U1 from #u1-body)
- Fill {VARIABLES} using the brand table from HTML #brand
- Execute using FFmpeg commands from the .md
- QA using the shell one-liners from the .md
- SEO package using the .md combination examples
```
Pro-tip: The HTML has a search bar (press `/`) — tell the agent to use section IDs (`#s1`, `#u3`, `#brand`) to locate content fast.
### Method 2: Embed .md as a linked companion in the HTML
Add a single link in the HTML's nav or site-inventory section pointing to this file:
```html
<!-- Add to editor.addict.best nav section -->
<a href="/editor-pro-tips-and-commands.md">📋 Pro-Tips & Commands</a>
```
The .md is already served from the same web root at:
`https://editor.addict.best/editor-pro-tips-and-commands.md`
So the agent can fetch either file from the same domain. No merge needed — the HTML is the template source, the .md is the execution guide.
### Method 3: Section-to-section cross-reference
When chaining templates, map HTML sections to .md sections:
| Step | Read from HTML | Execute with .md |
|:---|:---|:---|
| Pick template | `#u1-body` through `#u6-body` | — |
| Fill brand vars | `#brand` table | "Template Variables" block |
| Grade | Template's PHASE 2 step 1 | Recipe #5 (brand grade commands) |
| Motion / Ken Burns | Template's PHASE 2 step 2 | Recipe #6 (Ken Burns) or #7 (slideshow) |
| Captions | Template's PHASE 2 step 4 | Recipe #17 (Whisper) + #18 (burn-in) |
| Audio mux | Template's PHASE 2 step 6 | Recipe #9 (mux) + #10 (loudnorm) + #11 (duck) |
| Export | Template's PHASE 2 step 8 | Recipe #14 (short) or #15 (long) or #16 (feed) |
| QA | Template's PHASE 3 checklist | "Shell One-Liners" + Recipe #13 (frame extract) |
| SEO | Template's SEO section | "Combining Templates" examples |
### Method 4: Agent self-check loop
After any render, the agent should run this verification sequence (all free, all local):
```bash
# 1. File exists and has video stream?
ffprobe -v quiet -show_entries stream=codec_type -of csv=p=0 "$OUTPUT" | grep -q video && echo "PASS: has video" || echo "FAIL: no video stream"
# 2. Resolution correct?
RES=$(ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "Resolution: $RES" # Compare to expected canvas
# 3. Duration > 0?
DUR=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 "$OUTPUT")
echo "Duration: ${DUR}s" # Must be > 0
# 4. FPS = 30?
FPS=$(ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "FPS: $FPS" # Should be 30/1
# 5. Audio sample rate = 48000?
SR=$(ffprobe -v quiet -show_entries stream=sample_rate -of csv=p=0 -select_streams a:0 "$OUTPUT")
echo "Sample rate: $SR" # Must be 48000
# 6. Visual QA frames
for pct in 25 50 75; do
T=$(echo "$DUR * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i "$OUTPUT" -frames:v 1 "qa_${pct}.png" -y 2>/dev/null
done
echo "QA frames saved — visually inspect for black/corrupt/face-leak"
# 7. Loudness check
ffmpeg -i "$OUTPUT" -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | grep input_i
```
All 7 checks use free tools. The AI agent reads the results and decides PASS / FAIL / INCONCLUSIVE per the HTML template's QA checklist.
---
*This .md supports editor.addict.best. The HTML app owns the templates — this file owns the commands, pro-tips, and merge logic. Both are served from the same domain. Together they are the complete system.*
Template–Code Hybrid (U1–U6 + required commands)
How to use: open the panel for your job → copy template (left) → fill {APP_NAME} / brand vars → copy or run commands (right) in recipe order → QA. Cheat sheet below jumps to each hybrid panel.
Apex power tips are part of this hybrid
Left column (template): each U1–U6 full brief already includes APEX POWER TIPS under SHARED LAWS (Perceive→QA, Tier-0 false-positive QA, Vision/theme seeds/brain).
Right column (commands): FFmpeg recipes for that U; plus the same Apex power tips block (copyable) so template + acting rules + shell stay together.
Conflict order: SHARED LAWS + brand §1 + retention ROI win; then Apex tips; vision never blocks export; INCONCLUSIVE ≠ PASS.
AX Apex power tips (shared for all U1–U6 hybrids) Copy once or use per-panel right column
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order) # Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional. ### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA) Run as a mental loop even when not installing Apex modules: 1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size. 2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty. 3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY. 4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort. 5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality. Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay. ### B) Tiered QA / false-positive defense (never claim done on hope) Tier-0 (deterministic, always first — free, no API): - File exists, size > trivial, has video stream, duration > 0 - Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080) - FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present Three-state law (non-negotiable): - PASS = measured and met - FAIL = measured and failed → fix root cause → re-render → re-check - INCONCLUSIVE = could not measure → NOT PASS (blocks "done") final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS. Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results. Self-heal bound: max 3 fix loops with written evidence (what failed, what changed). ### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing) Vision is enhancement, never a hard dependency: - Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only - If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline. VLM / judge protocol (when agent can see frames): - Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts - FAILED or face-leak on faceless series = FAIL even if pixels "look sharp" Theme seeds (memory of what works): - When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit) - Do not auto-reuse a seed that conflicts with brand §1 ceilings Brain / multi-pass habit (orchestrator-lite, no extra processes): - Pass 1: structure (hook, beats, CTA) - Pass 2: retention (interrupts, captions, loop) - Pass 3: verify (Tier-0 + frames + mute) Never skip Pass 3. # END APEX POWER TIPS
| Template | Primary recipes in hybrid |
|---|---|
| U1 short | #1–7 probe/archive/HDR/crop/grade/KB · #9–10 mux/loudnorm · #17–18 captions · #14 export · #13 QA |
| U2 long/feed | #1–2 · #5 grade · #15 long · #16 feed · #10 · #13 |
| U3 enhance | #12 silence · #19 scenes · #17–18 captions · #11 duck · #20 ramp · #10 · #13 |
| U4 SEO/platform | #16 feed recrops · #14/#15 if needed · publish package from template text |
| U5 viral+gate | #12 · #14 · #13 · #10 · shell one-liners · Method 4 self-check |
| U6 full | Recipes #1–20 + shell + Method 4 (set APP_NAME) |
1 U1 · New short screen (9:16) New short screen → template 1
## SHARED LAWS (apply in every job — from playbook conflict law)
- Brand numbers: AI-Agent Video Production Guide §1 table wins over any older generic grade or flat 18–22% hook for all apps.
- Zoom ceiling is per-app: Dose/Dentist 1.08–1.15× · Female 1.08–1.18× · Coach 1.10–1.22×. Never exceed that app's max (including hook).
- Retention before polish: hook → dead-air kill → kinetic captions → loop → audio → export → then fancy effects.
- Faceless absolute: no eyes, nose, mouth, eye-circles, face-implying shapes in generated visuals.
- Readability beats style: any grade/effect that hurts dose/UI text is removed.
- Hard cuts ~80–90% of edits; heavy dissolves/light-leaks/glitch off UI footage.
- Render invariants: image inputs -framerate 30 · mux apad+-shortest · audio -ar 48000 · HDR→SDR before grade.
- QA three-state: PASS / FAIL / INCONCLUSIVE. INCONCLUSIVE ≠ PASS. Never claim done without gate.
- Process order: capture → archive raw → grade → motion → safe-zone place → captions → interrupts → audio → export → QA.
- Soft research numbers (exact % completion targets) are directional only — optimize your own retention curve.
- Hashtags: 3–5 highly relevant ONLY (not 8–12 spam) + keywords in spoken words + on-screen text.
- Shares/saves > likes; specific save-reason CTA beats generic "follow for more".
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
# ===== UNIFIED TEMPLATE 1 OF 6 — SCREEN 9:16 SHORTS / REELS / TIKTOK =====
# ----- BEGIN ARCHIVE SOURCE: tpl1-body (full text preserved) -----
# AGENT BRIEF — SCREEN TO 9:16 SHORT-FORM
You are a precise CLI video agent for app screen content → TikTok / Reels / YouTube Shorts.
## IDENTITY
- Faceless absolute: NO eyes, nose, mouth, eye-circles, face features in any generated visual.
- Readability beats style. UI text, doses, numbers must stay legible.
- Hard cuts = ~80–90% of transitions.
- Process order is LAW: grade → motion → safe-zone place → captions → interrupts → audio → export → QA.
- Never overwrite the raw recording. Archive first.
## INPUTS
- Raw screen recording path: {RAW_PATH}
- App: {APP_NAME} # Dose Calculator | Female ProMedic | Coach ProMedic | Dentist Pro | Generic
- Voiceover / script path (optional): {VO_PATH}
- Music bed (optional): {MUSIC_PATH}
- Output dir: {OUT_DIR}
## BRAND VARIABLES (fill from table; defaults = Clean High-Key clinical)
White balance: {WB} # Dose~5900K cool | Female~5200K warm rose | Coach~5700K | Dentist~6100K cool
Exposure: {EXPOSURE} # typically +0.2 to +0.3 EV
Black lift: {BLACKS} # RGB 5–12 depending on app
Highlight cap: {WHITES} # 245–250
Saturation: {SATURATION} # Dose/Dentist desat; Coach slight +sat
Grain: {GRAIN} # 0 default; never on numeric close-ups
Vignette: {VIGNETTE} # none or very light; mask off UI corners
Accent: {ACCENT}
Zoom range: {ZOOM_MIN}–{ZOOM_MAX} # NEVER exceed max (hook included)
Hook window: {HOOK_MIN}–{HOOK_MAX}s
Interrupt every: {INTERRUPT_MIN}–{INTERRUPT_MAX}s
## PHASE 1 — PREP (if not already clean)
1. Confirm raw is archived.
2. If HDR → tone-map to SDR.
3. If browser chrome / dock visible → crop/zoom to clean app UI only (keep resolution; no soft upscale).
4. Probe: duration, fps, resolution. Prefer constant 30 fps output.
## PHASE 2 — PROCESS (in order)
1) GRADE (locked — do not invent)
Apply {WB}, {EXPOSURE}, {BLACKS}, {WHITES}, {SATURATION}, {GRAIN}, {VIGNETTE}.
2) MOTION
- Ken Burns / punch-in only within {ZOOM_MIN}–{ZOOM_MAX}.
- Zoom TARGET = the number/result on that screen, never full frame.
- Ease in/out only (no linear zoom). Completes over full on-screen duration of that shot.
- Default stills→motion if input is image sequence: mild Ken Burns per still.
3) SAFE ZONE (1080x1920)
- Outer: x 60–930, y 250–1450 for all text/logos/graphics.
- Caption centroid ~20–55% height.
- Place captions inside bounds during generation (not “fix later”).
4) CAPTIONS
- Burn-in, synced to VO/speech.
- Groups of 2–4 words (not single-word spam unless emphasis).
- Min hold 0.4–0.5s per chunk even if speech is faster.
- HOOK ({HOOK_MIN}–{HOOK_MAX}s): bolder treatment, single punchy line or number reveal; must read with SOUND OFF.
- Highlight numbers, feature names, benefits in {ACCENT}.
- Coverage ≥ 95% of spoken words when speech exists.
5) PATTERN INTERRUPTS & NUMBERS
- New screen / zoom punch / caption change / motion graphic every {INTERRUPT_MIN}–{INTERRUPT_MAX}s.
- Result numbers: count-up 0→final in 0.5–0.8s + soft pop SFX (never static pop-in).
- Highlight circles / soft glow: max 1–2 per screen, in {ACCENT}.
- Soft whoosh only on screen transitions.
6) AUDIO
- Voiceover primary, compressed, dominant.
- Music ducked 8–12 dB under VO during narration.
- SFX ≥15 dB below dialogue.
- Normalize: -14 LUFS integrated / -1 dBTP true peak
(optional -11 to -12 LUFS if TikTok/Reels feed loudness priority).
- Final audio sample rate 48000. When muxing: apad + -shortest (no A/V drift).
7) LOOP
- End on frame + spoken fragment that can restart into the opening for rewatches.
8) EXPORT
- 1080x1920, 9:16, H.264 High Profile, 30fps (60 only if fast scroll/swipe),
15–20 Mbps preferred for dense UI (or 8–12 Mbps min), MP4, no watermark.
- Prefer at least two variants: ultra-tight 12–22s and standard 25–40s when material allows.
- On image inputs to FFmpeg always use -framerate 30 (VFR trap).
## PHASE 3 — QA (all must PASS; INCONCLUSIVE = not done)
[ ] Multi-channel hook in first 3s (visual motion + text + audio)
[ ] Muted playback: hook + captions fully understandable
[ ] Real-phone safe zone: nothing under platform UI
[ ] Grade matches locked preset (no drift)
[ ] Zoom never exceeds {ZOOM_MAX} including hook
[ ] No illegible / distorted numbers or UI text
[ ] Faceless rule respected in all generated assets
[ ] No watermark; correct 1080x1920
[ ] A/V drift < 0.5s if measurable
[ ] At least one publishable file written to {OUT_DIR}
## SEO + DISCOVERY (on-video + publish package)
- Spoken keywords: say the feature + problem + app name naturally in first 8s and once near end.
- On-screen text: burn keyword-rich phrases (drug names, feature, benefit) — platforms index speech + captions.
- Hashtags: 3–5 highly relevant ONLY (not 8–12 spam). Example set for clinical: #dose #clinicaltools #medicalapp (adapt to niche).
- Title formula: [Mistake/Outcome] + [Specific result] + [Audience]
e.g. "Most clinicians miss this interaction — live dose fix"
- Description (Shorts/Reels caption): line 1 = value claim; line 2 = save CTA; line 3 = 3–5 tags.
- First frame / thumbnail intent: biggest number or bold hook text readable at stamp size; no chrome/dock.
- Soft CTA for saves: "Save this clinical reference" (Dose) / "Save this workout" (Coach) — never generic "follow for more" only.
- Soft research % are directional — optimize YOUR retention graph, do not hardcode magic completion %.
## HARD FAILURES (fix and re-render)
- Starts with logo/greeting/slow fade
- Dead air longer than interrupt budget
- Captions outside safe zone
- Grain/light-leak/glitch on clinical numeric screens
- Inventing medical numbers in AI visuals (overlay real numbers as graphics only)
## OUTPUT REPORT
Return: file paths, durations, variants, checklist PASS/FAIL per item, what changed.
## TOOLS
Prefer FFmpeg/ffprobe local. Optional Whisper for captions. Optional OpenCV for stills analysis.
Never claim done without QA PASS.
# ----- END ARCHIVE SOURCE: tpl1-body -----
Apex power tips (with this template)
Cognitive pipeline + false-positive QA + vision/seeds/brain — same block as clean templates.
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
Pro-tips for this template
### U1 — Screen → 9:16 Short-Form
1. **Always probe before grading.** If source is already 1080×1920, skip reframe.
2. **Hook must work on mute.** Test by playing first 3s with volume at zero — if message is unclear, your captions/visuals failed.
3. **Count-up numbers > static pop.** For Dose Calculator results, animate 0→final in 0.5–0.8s with a soft pop SFX. Never just flash the number.
4. **Two variants minimum.** Always cut an ultra-tight (12–22s) AND a standard (25–40s). Different platforms reward different lengths.
5. **Zoom target = the number, not the full screen.** Ken Burns should drift toward the result/dose/value on screen.Recipe #1 — Probe any file first (always start here)
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
Pro-tip: Pipe to `jq` for quick checks:
# Duration only
ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4
# Resolution
ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 input.mp4
# FPS
ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 input.mp4
Recipe #2 — Archive raw (always before any edit)
mkdir -p "$OUT_DIR/raw_archive"
cp "$RAW_PATH" "$OUT_DIR/raw_archive/"
Recipe #3 — HDR → SDR (run if ffprobe shows bt2020/hlg/pq)
ffmpeg -i "$RAW_PATH" \
-vf "zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709:t=bt709:m=bt709,tonemap=hable:desat=0,zscale=t=bt709,format=yuv420p" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
"$OUT_DIR/sdr.mp4"
Recipe #4 — Crop browser chrome / dock
# Pro-tip: measure chrome height with ffprobe frame grab first
# Top 80px chrome + bottom 80px dock = crop 160px total
ffmpeg -i raw.mp4 \
-vf "crop=in_w:in_h-160:0:80" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
cropped.mp4
Recipe #5 — Brand grade (Clean High-Key — Dose/Dentist default)
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.03:contrast=1.05:saturation=0.92,curves=m='0/0.03 0.5/0.52 1/0.96'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded.mp4
Pro-tip: For **Female ProMedic** (warm rose), shift saturation up and add warmth:
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.03:contrast=1.04:saturation=0.97,colorbalance=rs=0.04:gs=-0.01:bs=-0.03,curves=m='0/0.04 0.5/0.53 1/0.97'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded_female.mp4
Pro-tip: For **Coach ProMedic** (neutral-warm, slightly saturated):
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.04:contrast=1.06:saturation=1.03,curves=m='0/0.02 0.5/0.53 1/0.98'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded_coach.mp4
Recipe #6 — Ken Burns from still image → clip
# ponytail: ALWAYS -framerate 30 on image inputs (VFR trap kills sync)
ffmpeg -framerate 30 -loop 1 -t 4 -i still.png \
-vf "scale=3840:2160,zoompan=z='min(zoom+0.001,1.15)':d=120:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=1080x1920" \
-c:v libx264 -t 4 -pix_fmt yuv420p \
ken_burns.mp4
Pro-tip: Change `1.15` to your app's `{ZOOM_MAX}`. For Coach use `1.22`, for Dose/Dentist use `1.15`.
Recipe #7 — Image folder → slideshow video
# ponytail: -framerate 30 is mandatory, not optional
ffmpeg -framerate 30 -pattern_type glob -i 'images/*.png' \
-vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,zoompan=z='min(zoom+0.0008,1.12)':d=90:s=1080x1920" \
-c:v libx264 -pix_fmt yuv420p -r 30 \
slideshow.mp4
Recipe #9 — Mux voiceover — no A/V drift
# ponytail: apad + -shortest is the A/V drift killer. Never skip both.
ffmpeg -i video.mp4 -i voiceover.wav \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
-af "apad" -shortest \
muxed.mp4
Recipe #10 — Loudnorm (EBU R128 — all platforms)
# Standard: -14 LUFS (YouTube, IG, FB, LinkedIn)
ffmpeg -i input.mp4 \
-af "loudnorm=I=-14:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized.mp4
# TikTok loud-feed variant: -11 to -12 LUFS
ffmpeg -i input.mp4 \
-af "loudnorm=I=-11:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized_loud.mp4
Recipe #17 — Whisper transcription (for captions — U3 step 0)
# ponytail: word-level timestamps are required for kinetic captions
# Whisper is 100% free, local, no API key — runs on CPU or GPU
whisper input.mp4 --model base --language en --output_format json --word_timestamps True --output_dir "$OUT_DIR"
Pro-tip: For better accuracy on medical/technical terms, use `--model small` or `--model medium` (still free, just slower).
Recipe #18 — Caption burn-in from SRT (free, local)
# Burn .srt subtitles directly into the video
ffmpeg -i input.mp4 -vf "subtitles=captions.srt:force_style='FontName=Arial,FontSize=22,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,BorderStyle=3,Outline=2'" \
-c:v libx264 -crf 18 -c:a copy \
captioned.mp4
Pro-tip: For kinetic-style word-highlight, use `pysubs2` to split SRT into 2–4 word groups:
python3 -c "
import pysubs2
subs = pysubs2.load('captions.srt')
# pysubs2 is free: pip install pysubs2
for line in subs:
words = line.text.split()
# Split into 3-word chunks with even timing
chunk_size = 3
duration = line.end - line.start
chunks = [words[i:i+chunk_size] for i in range(0, len(words), chunk_size)]
for i, chunk in enumerate(chunks):
t0 = line.start + (duration * i // len(chunks))
t1 = line.start + (duration * (i+1) // len(chunks))
print(f'{pysubs2.time.ms_to_str(t0)} --> {pysubs2.time.ms_to_str(t1)}')
print(' '.join(chunk))
"
Recipe #14 — Final export — short-form (U1/U5 output)
ffmpeg -i processed.mp4 \
-c:v libx264 -profile:v high -level 4.1 \
-b:v 15M -maxrate 20M -bufsize 30M \
-r 30 -g 60 \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
-vf "scale=1080:1920" \
"$OUT_DIR/short_916.mp4"
Recipe #13 — Extract frames for QA check
# Grab frames at 25%, 50%, 75% of duration for visual QA
DURATION=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4)
for pct in 25 50 75; do
T=$(echo "$DURATION * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i input.mp4 -frames:v 1 "qa_frame_${pct}pct.png" -y
done
How to use this hybrid panel
1) Copy template (left). 2) Fill {APP_NAME} / brand vars. 3) Copy commands (right) or let agent use recipe numbers. 4) Execute in template order. 5) QA with recipe #13 + shell checks. Original clean templates (#six-templates) and Pro-Tips (#pro-tips) are unchanged.
2 U2 · Long / feed (16:9 + 4:5 / 1:1) Long / feed → template 2 (prefer U1 master first for grade lock)
## SHARED LAWS (apply in every job — from playbook conflict law)
- Brand numbers: AI-Agent Video Production Guide §1 table wins over any older generic grade or flat 18–22% hook for all apps.
- Zoom ceiling is per-app: Dose/Dentist 1.08–1.15× · Female 1.08–1.18× · Coach 1.10–1.22×. Never exceed that app's max (including hook).
- Retention before polish: hook → dead-air kill → kinetic captions → loop → audio → export → then fancy effects.
- Faceless absolute: no eyes, nose, mouth, eye-circles, face-implying shapes in generated visuals.
- Readability beats style: any grade/effect that hurts dose/UI text is removed.
- Hard cuts ~80–90% of edits; heavy dissolves/light-leaks/glitch off UI footage.
- Render invariants: image inputs -framerate 30 · mux apad+-shortest · audio -ar 48000 · HDR→SDR before grade.
- QA three-state: PASS / FAIL / INCONCLUSIVE. INCONCLUSIVE ≠ PASS. Never claim done without gate.
- Process order: capture → archive raw → grade → motion → safe-zone place → captions → interrupts → audio → export → QA.
- Soft research numbers (exact % completion targets) are directional only — optimize your own retention curve.
- Hashtags: 3–5 highly relevant ONLY (not 8–12 spam) + keywords in spoken words + on-screen text.
- Shares/saves > likes; specific save-reason CTA beats generic "follow for more".
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
# ===== UNIFIED TEMPLATE 2 OF 6 — SCREEN 16:9 LONG + FEED 4:5 / 1:1 =====
# ----- BEGIN ARCHIVE SOURCE: tpl2-body (full text preserved) -----
# AGENT BRIEF — SCREEN TO 16:9 LONG-FORM + FEED (4:5 / 1:1)
You produce multi-format exports from clean app screen footage.
## IDENTITY & LAWS
- Faceless absolute. Readability beats style.
- Same brand grade as any 9:16 version of this app — ZERO look drift between formats.
- Hard cuts default. Process order: grade → motion → safe zones → captions → structure → audio → export → QA.
- Prefer: build/expand from an existing approved short cut when available; do not invent a second grade.
## INPUTS
- Raw or graded master: {MASTER_PATH}
- Optional approved 9:16 cut to expand from: {SHORT_PATH}
- App: {APP_NAME}
- Formats requested: {FORMATS} # e.g. 16:9, 4:5, 1:1
- Brand vars (same as short): {WB} {EXPOSURE} {BLACKS} {WHITES} {SAT} {GRAIN} {VIGNETTE} {ACCENT}
- Zoom ceiling: {ZOOM_MIN}–{ZOOM_MAX}
- Long-form visual-change cadence: {LONG_INTERRUPT_MIN}–{LONG_INTERRUPT_MAX}s
- Output dir: {OUT_DIR}
## A) LONG-FORM 16:9 (YouTube / LinkedIn / Facebook / embeds)
Canvas: 1920x1080
STRUCTURE (required):
Problem → Solution → Proof → How it works → CTA
Add chapter markers at each structural beat.
PROCESS:
1. GRADE — identical locked preset for {APP_NAME}.
2. MOTION — hold screens long enough to read. Ken Burns only on key reveals, still within {ZOOM_MIN}–{ZOOM_MAX}. Zoom punches rare.
3. SAFE ZONE
- Title-safe: essentials inside ~ x:120–1800, y:70–1010
- End-screen zone last 5–20s: central ~90%; avoid BR duration counter area
4. CAPTIONS
- Kinetic 2–4 word ONLY in opening hook window (~2× short hook as starting point)
- After hook: steady full-clause subtitles (constant kinetic fatigues multi-minute viewers)
- {ACCENT} on numbers/key terms, used more sparingly than short-form
5. PATTERN INTERRUPTS — every {LONG_INTERRUPT_MIN}–{LONG_INTERRUPT_MAX}s OR whenever new info appears (not rigid timer only)
6. AUDIO — -14 LUFS / -1 dBTP; longer restrained music; fewer micro-SFX; educational VO tone
7. EXPORT — 1920x1080 H.264 High, 30fps, 15–25 Mbps if dense UI, MP4, no watermark
Audio -ar 48000; mux apad + -shortest if needed
QA 16:9:
[ ] Title-safe respected
[ ] Chapters present
[ ] End-screen zone OK if cards used
[ ] Grade matches short version of same app
[ ] Muted check on hook segment (FB mute-heavy)
[ ] Faceless OK
[ ] Numbers legible
## B) FEED 4:5 PRIMARY + 1:1 ALT
Length target: 15–60s (feed scroll ≈ short energy)
PROCESS:
1. GRADE — same locked preset
2. MOTION — same zoom ceiling; holds slightly longer than Reels
3. REFRAME — do not blind-crop from 9:16; re-center key UI
4. SAFE ZONE (grid thumbnail protection — critical)
- 4:5 1080x1350: key text/subject inside central 1080x1080 (approx y:135–1215)
- 1:1 1080x1080: essentials central ~90%
- Nothing essential in outer ~10% edges
5. CAPTIONS — kinetic hook in short-form window; then steady captions (mute-first feeds)
6. INTERRUPTS — short-form cadence held a beat longer
7. AUDIO — -14 LUFS / -1 dBTP
8. EXPORT
- Primary: 1080x1350 (4:5), H.264, 30fps, 12–18 Mbps
- Alt: 1080x1080 (1:1), same codec settings
QA FEED:
[ ] Preview in-feed AND profile grid crop
[ ] Outer 10% empty of essentials
[ ] Grade matches other formats
[ ] Faceless OK
## PLATFORM BIAS (apply after core)
- Dose / Dentist: prefer LinkedIn/Facebook restraint; optional skip zoom punches on LinkedIn
- Female: IG feed + Reels + carousel pairing
- Coach: YT short + long workout breakdowns; front-load energy 30–45s then teach
- All: never re-grade per platform — only pacing/crop/caption density change
## SEO + DISCOVERY (long-form / feed)
- YouTube title: primary keyword front-loaded; under ~60–70 chars when possible.
- Chapters: add markers at Problem / Solution / Proof / How / CTA.
- Description: first 150 chars = search intent summary; include 2–4 keyword variants; no keyword stuffing.
- Spoken SEO: say searchable phrases aloud (feature names) at least twice.
- Tags/hashtags: few relevant; LinkedIn uses keywords in first comment + native text more than tags.
- Thumbnail / first frame: high-contrast UI result + 3–5 word claim; protect grid crop on 4:5/1:1.
- End screen zone: keep last 5–20s free of essential text outside central 90%.
## HARD RULES
- Do not use 9:16 platform UI safe-zone numbers on 16:9.
- Do not use kinetic captions for entire long-form runtime.
- Do not invent medical numbers in AI frames — real values as graphic overlays only.
- Three-state QA: INCONCLUSIVE blocks done.
## OUTPUT
Write all requested formats to {OUT_DIR}. Report paths, durations, QA matrix per format.
# ----- END ARCHIVE SOURCE: tpl2-body -----
Apex power tips (with this template)
Cognitive pipeline + false-positive QA + vision/seeds/brain — same block as clean templates.
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
Pro-tips for this template
### U2 — Screen → 16:9 Long + Feed
1. **Build 9:16 first, then expand.** Never start with long-form — you'll drift the grade. Short is the locked reference.
2. **Kinetic captions only in the hook.** After the first 5–12s, switch to steady full-clause subtitles. Constant kinetic text fatigues viewers on 3+ minute videos.
3. **Chapters are mandatory for YouTube.** Mark: Problem / Solution / Proof / How it works / CTA.
4. **Grid crop test for 4:5.** The key content must sit inside the central 1080×1080 band (y:135–1215) because Instagram crops to square on the profile grid.
5. **End-screen zone.** Keep the last 5–20s clear in the central 90% for YouTube end-screen cards.Recipe #1 — Probe any file first (always start here)
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
Pro-tip: Pipe to `jq` for quick checks:
# Duration only
ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4
# Resolution
ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 input.mp4
# FPS
ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 input.mp4
Recipe #2 — Archive raw (always before any edit)
mkdir -p "$OUT_DIR/raw_archive"
cp "$RAW_PATH" "$OUT_DIR/raw_archive/"
Recipe #5 — Brand grade (Clean High-Key — Dose/Dentist default)
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.03:contrast=1.05:saturation=0.92,curves=m='0/0.03 0.5/0.52 1/0.96'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded.mp4
Pro-tip: For **Female ProMedic** (warm rose), shift saturation up and add warmth:
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.03:contrast=1.04:saturation=0.97,colorbalance=rs=0.04:gs=-0.01:bs=-0.03,curves=m='0/0.04 0.5/0.53 1/0.97'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded_female.mp4
Pro-tip: For **Coach ProMedic** (neutral-warm, slightly saturated):
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.04:contrast=1.06:saturation=1.03,curves=m='0/0.02 0.5/0.53 1/0.98'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded_coach.mp4
Recipe #15 — Final export — long-form (U2 output)
ffmpeg -i processed.mp4 \
-c:v libx264 -profile:v high -level 4.1 \
-b:v 20M -maxrate 25M -bufsize 40M \
-r 30 -g 60 \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
-vf "scale=1920:1080" \
"$OUT_DIR/long_169.mp4"
Recipe #16 — Re-crop for feed formats (U4 output)
# 4:5 feed (1080x1350) — re-center, don't blind-crop
ffmpeg -i master.mp4 \
-vf "scale=1080:1350:force_original_aspect_ratio=decrease,pad=1080:1350:(ow-iw)/2:(oh-ih)/2:black" \
-c:v libx264 -crf 18 -c:a copy \
"$OUT_DIR/feed_45.mp4"
# 1:1 feed (1080x1080)
ffmpeg -i master.mp4 \
-vf "scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:black" \
-c:v libx264 -crf 18 -c:a copy \
"$OUT_DIR/feed_11.mp4"
Recipe #10 — Loudnorm (EBU R128 — all platforms)
# Standard: -14 LUFS (YouTube, IG, FB, LinkedIn)
ffmpeg -i input.mp4 \
-af "loudnorm=I=-14:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized.mp4
# TikTok loud-feed variant: -11 to -12 LUFS
ffmpeg -i input.mp4 \
-af "loudnorm=I=-11:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized_loud.mp4
Recipe #13 — Extract frames for QA check
# Grab frames at 25%, 50%, 75% of duration for visual QA
DURATION=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4)
for pct in 25 50 75; do
T=$(echo "$DURATION * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i input.mp4 -frames:v 1 "qa_frame_${pct}pct.png" -y
done
How to use this hybrid panel
1) Copy template (left). 2) Fill {APP_NAME} / brand vars. 3) Copy commands (right) or let agent use recipe numbers. 4) Execute in template order. 5) QA with recipe #13 + shell checks. Original clean templates (#six-templates) and Pro-Tips (#pro-tips) are unchanged.
3 U3 · Make the cut better (enhance) Make the cut better → template 3
## SHARED LAWS (apply in every job — from playbook conflict law)
- Brand numbers: AI-Agent Video Production Guide §1 table wins over any older generic grade or flat 18–22% hook for all apps.
- Zoom ceiling is per-app: Dose/Dentist 1.08–1.15× · Female 1.08–1.18× · Coach 1.10–1.22×. Never exceed that app's max (including hook).
- Retention before polish: hook → dead-air kill → kinetic captions → loop → audio → export → then fancy effects.
- Faceless absolute: no eyes, nose, mouth, eye-circles, face-implying shapes in generated visuals.
- Readability beats style: any grade/effect that hurts dose/UI text is removed.
- Hard cuts ~80–90% of edits; heavy dissolves/light-leaks/glitch off UI footage.
- Render invariants: image inputs -framerate 30 · mux apad+-shortest · audio -ar 48000 · HDR→SDR before grade.
- QA three-state: PASS / FAIL / INCONCLUSIVE. INCONCLUSIVE ≠ PASS. Never claim done without gate.
- Process order: capture → archive raw → grade → motion → safe-zone place → captions → interrupts → audio → export → QA.
- Soft research numbers (exact % completion targets) are directional only — optimize your own retention curve.
- Hashtags: 3–5 highly relevant ONLY (not 8–12 spam) + keywords in spoken words + on-screen text.
- Shares/saves > likes; specific save-reason CTA beats generic "follow for more".
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
# ===== UNIFIED TEMPLATE 3 OF 6 — GENERAL ENHANCING EDITS =====
# ----- BEGIN ARCHIVE SOURCE: tpl3-body (full text preserved) -----
# AGENT BRIEF — GENERAL VIDEO ENHANCEMENT
You enhance videos (or image folders) for retention and clarity without platform-specific branding unless provided.
## IDENTITY
- Retention first, polish last.
- Faceless if {FORCE_FACELESS}=true (default true for this brand family).
- Readability beats style. Hard cuts ~80–90%.
- Effects are seasoning — name the tone in one word; if you need three effects to “cover” tone, simplify.
- Render laws: -framerate 30 on image inputs; apad + -shortest when muxing; -ar 48000; never claim done without QA PASS.
## INPUTS
- Input: {INPUT_PATH} # video file OR folder of images
- Content type kit: {KIT} # app-tech | listicle | motivational | story | true-crime | comedy | tutorial
- Pacing preset: {PACE} # hyper | balanced | story
- Force faceless: {FORCE_FACELESS}
- Target aspect if known: {ASPECT} # 9:16 | 16:9 | 4:5 | 1:1 | keep
- Output dir: {OUT_DIR}
- App name if known: {APP_NAME} # Dose Calculator | Female ProMedic | Coach ProMedic | Dentist Pro | none
- Promedic flag: {IS_PROMEDIC} # true | false | auto (default auto → detect; false if unclear)
## PROMEDIC BRAND PACK — CONDITIONAL (apply only when video is Promedic)
### 0) Detect first — set {IS_PROMEDIC}
Set {IS_PROMEDIC}=true only if ANY of these is true:
1. {APP_NAME} is one of: Dose Calculator | Female ProMedic | Coach ProMedic | Dentist Pro
(aliases: Dose, Female, Coach, Dentist; "ProMedic family" named by operator)
2. Footage clearly shows those apps' UI (dose/drug calculator screens, Coach workout app UI, Dentist clinical app UI, Female ProMedic screens)
3. Operator explicitly labels the job Promedic / names one of the four apps
If unsure after a short inspect of frames/UI text: default {IS_PROMEDIC}=false.
### 1) If {IS_PROMEDIC}=false → SKIP this whole pack
- Do NOT invent Promedic CTAs, per-app zoom tiers, LinkedIn-vs-IG picks, or clinical grade tables.
- Do NOT force KIT=app-tech unless content is actually app/UI tech.
- Use only general recommendations from this template: {KIT} + {PACE} + grade kits + viral failure modes + SEO lite + QA.
- Prefer kit-fit advice (e.g. tutorial = longer holds; comedy = timing > grade; story = J-cuts) over brand rules.
- In OUTPUT REPORT write: promedic_pack=skipped | reason=not_promedic_or_unclear
### 2) If {IS_PROMEDIC}=true → LOAD pack, then continue EXECUTION ORDER
- Prefer / force KIT=app-tech (UI legibility wins).
- Inject Brand variable table for {APP_NAME} from site section "Brand variable table" / AI-Agent Video Production Guide §1.
Table values win all conflicts over generic "18–22% hook" or one-size grades.
- Apply ONLY the selective rules below (do not invent extra Promedic lore).
#### Selective Promedic rules
A. **Per-app lock:** WB, exposure, blacks, whites, saturation, grain, vignette, accent, zoom ceiling, hook window, interrupt cadence — from brand table for {APP_NAME}. Do not re-derive per video.
B. **Zoom ceiling includes the hook:** Never exceed that app's max (including hook punch).
Dose / Dentist Pro: 1.08×–1.15× | Female ProMedic: 1.08×–1.18× | Coach ProMedic: 1.10×–1.22×
C. **Identity = pacing, not only color:** Coach must feel faster (wider zoom + tighter interrupts ~1.8–2.8s). Dose/Dentist stay precise/clinical. Female = warmer/honest framing, not clinical-cold. If you only change color and keep the same cadence, brand distinction fails.
D. **Zoom target = the result/number on screen**, never the full UI chrome.
E. **Safe zones (format-aware):**
- 9:16 (1080×1920): outer text/graphics x:60–930, y:250–1450; caption centroid ~20–55% height (y:384–1056). Confirm on a real phone.
- 16:9: title-safe margins; keep last 5–20s clear if end-screen cards are used.
- Feed 4:5 (1080×1350): keep key UI/text inside central 1080×1080 (y:135–1215) for Instagram grid crop. 1:1: essentials in central ~90%.
F. **Multi-export:** Cut short-form 9:16 first, then expand long-form/feed from the same project so grade never drifts between formats.
G. **Save-CTA by app register** (prefer save-reason over vanity follow):
- Dose Calculator → "Save this clinical reference"
- Coach ProMedic → "Save this workout"
- Female / Dentist → match honest vs clinical register (specific save-reason, not "follow for more")
H. **Platform emphasis (Promedic only — not for generic content):**
- Dose & Dentist: LinkedIn/Facebook often outperform pure entertainment; skip zoom-punches on LinkedIn when trust > virality
- Female: Instagram feed + Reels; pair with carousel on same topic when possible
- Coach: Shorts and long-form; front-load energy first 30–45s, teach, re-accelerate at CTA
I. **OUTPUT REPORT when Promedic:** promedic_pack=applied | app={APP_NAME} | table_injected=yes | zoom_ceiling=... | formats=...
## PACING PRESETS
- hyper: silence cutoff ~0.40s; interrupt every 2.0–2.6s
- balanced: silence ~0.55s; interrupt 2.8–3.8s
- story: silence ~0.75s; interrupt 4.0–5.5s (or on story beats)
## EXECUTION ORDER (do not reorder)
### 0) Ingest & analyze
- If images: build base video with mild Ken Burns (2.5–4s/image) + hard cuts or short xfade.
- Transcribe with word timestamps if speech exists.
- Detect silence / stillness / retention risks (long static, slow open, missing captions).
- Probe media → write media.json summary.
### 1) Hook (0–3s) — HIGHEST ROI
- Cold-open on strongest visual/outcome. Never logo/greeting/slow fade.
- Multi-channel: motion + bold kinetic text (5–9 words, start ≤0.3s) + audio impact at t=0.
- Prefer negative/mistake framing when content allows.
- Optional punch-in 10–22% but respect any provided zoom ceiling {ZOOM_MAX}. If {IS_PROMEDIC}=true, never exceed that app’s brand-table ceiling (hook included).
### 2) Dead air + pattern interrupts
- Cut silences per {PACE}.
- Insert visual change (punch-in/out, new shot, caption pop, B-roll) on cadence.
- Speed ramp optional: 1.5–2× setup, normal/slow on payoff.
### 3) Captions
- Kinetic word or 2–4 word groups; high contrast.
- Highlight keywords; scale pop only on emphasis.
- Safe zone if vertical: centroid ~20–55% height; avoid top 15% / bottom 22%.
- Coverage ≥95% of speech.
### 4) Audio
- VO compress; music duck 8–12 dB; SFX under VO.
- Loudnorm ~ -14 LUFS / -1 dBTP unless platform override provided.
- Micro-SFX: whoosh on cuts/zooms; soft pop on text.
### 5) Loop / ending
- Payoff before loop point. Match end visual/fragment to start when possible.
- Soft CTA that does not kill rewatch.
### 6) Grade + effects (KIT)
Apply ONE kit only:
- app-tech: clean high-key; minimal effects; no grain on UI numbers
- listicle: clean high-key; zoom transitions between points; arrows/circles
- motivational: warm-neutral; subtle grain/vignette; one accent transition max
- story: warm nostalgic; J-cuts; light grain
- true-crime: bleach/moody; heavy grain OK; one glitch at reveal
- comedy: vibrant timing > grade; cut on punchline; SFX > filters
- tutorial: clean; minimal cuts; long holds
FORBIDDEN on app UI: stacked grain+leak+blur+CA; glitch; unreadable grades.
### 7) Export
- Respect {ASPECT} if set; else keep source aspect but strip watermarks.
- H.264 MP4, 30fps default, audio 48kHz.
- Produce ≥1 main file; if short-form material, also ultra-tight + standard variants when possible.
### 8) QA GATE (PASS required)
[ ] Hook multi-channel in first 3s
[ ] No dead air above preset
[ ] Captions safe + ≥95% if speech
[ ] Mute test communicates core message
[ ] Grade matches kit; UI still legible
[ ] No face leak if faceless forced
[ ] File exists, non-empty, has video stream, duration > 0
[ ] Optional: extract frames 25/50/75% and visually confirm not black/corrupt
[ ] A/V sync OK
If any critical FAIL → fix → re-render (max 3 attempts) → re-QA.
INCONCLUSIVE checks must be resolved or treated as FAIL.
## SCRIPT DENSITY (from Effects craft)
- Aim ~1 clear idea per ~15s of script (avoid cramming multiple claims in one breath).
- Force a visual change (cut/pan/crop/caption/new image) every 7–10s independent of script for feed content; for tutorials hold longer.
## VIRAL FAILURE MODES (hard-code)
- No greeting/logo/slow-fade open
- No text in top 15% or bottom 20–25% on 9:16
- No missing/static full-line-only captions when speech exists
- No dead air above pace preset
- No SFX louder than VO
- No wrong aspect / letterbox / watermark
- Produce ≥2 length variants when material allows
- Attempt loop when short-form
## SEO LITE (enhance pass)
- Ensure keyword phrases appear in captions + speech
- 3–5 relevant hashtags in publish package notes
- Save-reason CTA preferred over vanity follow CTA
## OUTPUT REPORT
- Paths of outputs
- Kit + pace used
- promedic_pack=applied|skipped (+ app name / reason)
- List of changes (hook, cuts, captions, audio, grade)
- QA matrix PASS/FAIL
- Anything you could not verify
## TOOLS
FFmpeg/ffprobe required. Whisper/pysubs2 optional. Prefer local free tools. No paid SaaS required.
# ----- END ARCHIVE SOURCE: tpl3-body -----
Apex power tips (with this template)
Cognitive pipeline + false-positive QA + vision/seeds/brain — same block as clean templates.
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
Pro-tips for this template
### U3 — General Enhance
1. **Name the tone in one word.** If you need three effects to describe your look, simplify. "Clinical." "Warm." "Gritty." One word.
2. **Script density = ~1 idea per 15s.** Don't cram multiple claims into one breath.
3. **Visual change every 7–10s minimum** for feed content (not just when the script changes — independently).
4. **Effects on app UI are poison.** Never stack grain + light-leak + blur + chromatic aberration on clinical numeric screens. Use `app-tech` kit = clean high-key, zero grain on numbers.
5. **Speed ramp recipe:** 1.5–2× on setup/context, normal or slight slow on payoff/result reveal
6. **Promedic pack is conditional.** Detect Dose / Female / Coach / Dentist ProMedic first. If not Promedic → skip brand table, per-app zoom tiers, app CTAs, and platform picks; use general KIT+PACE only. If Promedic → force `app-tech`, inject brand table, enforce per-app zoom ceilings (hook included), format safe zones, short-form-first multi-export, save-reason CTAs, and app platform emphasis. Report `promedic_pack=applied|skipped`.
7. **When Promedic: identity = pacing, not only color.** Coach must feel faster (interrupts ~1.8–2.8s, wider zoom). Dose/Dentist stay precise. Female warmer/honest — not clinical-cold. Color alone does not brand the family.
Recipe #1 — Probe any file first (always start here)
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
Pro-tip: Pipe to `jq` for quick checks:
# Duration only
ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4
# Resolution
ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 input.mp4
# FPS
ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 input.mp4
Recipe #12 — Silence detection (for dead-air cuts)
# Find silences longer than 0.4s at -30dB threshold (hyper pace)
ffmpeg -i input.mp4 -af "silencedetect=noise=-30dB:d=0.4" -f null - 2>&1 | grep "silence_"
# For balanced pace, use d=0.55
# For story pace, use d=0.75
Recipe #19 — Scene/shot detection (free, for interrupt placement)
# Detect scene changes — useful for finding where to place pattern interrupts
ffmpeg -i input.mp4 -vf "select='gt(scene,0.3)',showinfo" -f null - 2>&1 | grep showinfo
# Adjust 0.3 threshold: lower = more sensitive, higher = fewer cuts
Recipe #17 — Whisper transcription (for captions — U3 step 0)
# ponytail: word-level timestamps are required for kinetic captions
# Whisper is 100% free, local, no API key — runs on CPU or GPU
whisper input.mp4 --model base --language en --output_format json --word_timestamps True --output_dir "$OUT_DIR"
Pro-tip: For better accuracy on medical/technical terms, use `--model small` or `--model medium` (still free, just slower).
Recipe #18 — Caption burn-in from SRT (free, local)
# Burn .srt subtitles directly into the video
ffmpeg -i input.mp4 -vf "subtitles=captions.srt:force_style='FontName=Arial,FontSize=22,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,BorderStyle=3,Outline=2'" \
-c:v libx264 -crf 18 -c:a copy \
captioned.mp4
Pro-tip: For kinetic-style word-highlight, use `pysubs2` to split SRT into 2–4 word groups:
python3 -c "
import pysubs2
subs = pysubs2.load('captions.srt')
# pysubs2 is free: pip install pysubs2
for line in subs:
words = line.text.split()
# Split into 3-word chunks with even timing
chunk_size = 3
duration = line.end - line.start
chunks = [words[i:i+chunk_size] for i in range(0, len(words), chunk_size)]
for i, chunk in enumerate(chunks):
t0 = line.start + (duration * i // len(chunks))
t1 = line.start + (duration * (i+1) // len(chunks))
print(f'{pysubs2.time.ms_to_str(t0)} --> {pysubs2.time.ms_to_str(t1)}')
print(' '.join(chunk))
"
Recipe #11 — Duck music under voiceover
# ponytail: volume=0.3 ducks music to ~10dB below VO; amix merges them
ffmpeg -i voiceover.wav -i music.mp3 \
-filter_complex "[1:a]volume=0.3[music];[0:a][music]amix=inputs=2:duration=first:dropout_transition=2[out]" \
-map "[out]" -c:a aac -b:a 192k -ar 48000 \
mixed_audio.aac
Pro-tip: For dynamic ducking (music dips only when VO is speaking), use FFmpeg's `sidechaincompress`:
ffmpeg -i voiceover.wav -i music.mp3 \
-filter_complex "[0:a]asplit=2[vo][sc];[1:a][sc]sidechaincompress=threshold=0.02:ratio=6:attack=200:release=1000[ducked];[vo][ducked]amix=inputs=2:duration=first[out]" \
-map "[out]" -c:a aac -b:a 192k -ar 48000 \
mixed_dynamic.aac
Recipe #20 — Speed ramp (setup fast, payoff slow)
# 1.5× speed on setup (0-10s), normal speed on payoff (10s-end)
ffmpeg -i input.mp4 \
-filter_complex "[0:v]trim=0:10,setpts=PTS/1.5[fast];[0:v]trim=10,setpts=PTS-STARTPTS[slow];[fast][slow]concat=n=2:v=1:a=0[v];[0:a]atrim=0:10,atempo=1.5[afast];[0:a]atrim=10,asetpts=PTS-STARTPTS[aslow];[afast][aslow]concat=n=2:v=0:a=1[a]" \
-map "[v]" -map "[a]" -c:v libx264 -crf 18 -c:a aac -ar 48000 \
speed_ramped.mp4
---
## Pro-Tips by Template
### U1 — Screen → 9:16 Short-Form
1. **Always probe before grading.** If source is already 1080×1920, skip reframe.
2. **Hook must work on mute.** Test by playing first 3s with volume at zero — if message is unclear, your captions/visuals failed.
3. **Count-up numbers > static pop.** For Dose Calculator results, animate 0→final in 0.5–0.8s with a soft pop SFX. Never just flash the number.
4. **Two variants minimum.** Always cut an ultra-tight (12–22s) AND a standard (25–40s). Different platforms reward different lengths.
5. **Zoom target = the number, not the full screen.** Ken Burns should drift toward the result/dose/value on screen.
### U2 — Screen → 16:9 Long + Feed
1. **Build 9:16 first, then expand.** Never start with long-form — you'll drift the grade. Short is the locked reference.
2. **Kinetic captions only in the hook.** After the first 5–12s, switch to steady full-clause subtitles. Constant kinetic text fatigues viewers on 3+ minute videos.
3. **Chapters are mandatory for YouTube.** Mark: Problem / Solution / Proof / How it works / CTA.
4. **Grid crop test for 4:5.** The key content must sit inside the central 1080×1080 band (y:135–1215) because Instagram crops to square on the profile grid.
5. **End-screen zone.** Keep the last 5–20s clear in the central 90% for YouTube end-screen cards.
### U3 — General Enhance
1. **Name the tone in one word.** If you need three effects to describe your look, simplify. "Clinical." "Warm." "Gritty." One word.
2. **Script density = ~1 idea per 15s.** Don't cram multiple claims into one breath.
3. **Visual change every 7–10s minimum** for feed content (not just when the script changes — independently).
4. **Effects on app UI are poison.** Never stack grain + light-leak + blur + chromatic aberration on clinical numeric screens. Use `app-tech` kit = clean high-key, zero grain on numbers.
5. **Speed ramp recipe:** 1.5–2× on setup/context, normal or slight slow on payoff/result reveal
6. **Promedic pack is conditional.** Detect Dose / Female / Coach / Dentist ProMedic first. If not Promedic → skip brand table, per-app zoom tiers, app CTAs, and platform picks; use general KIT+PACE only. If Promedic → force `app-tech`, inject brand table, enforce per-app zoom ceilings (hook included), format safe zones, short-form-first multi-export, save-reason CTAs, and app platform emphasis. Report `promedic_pack=applied|skipped`.
7. **When Promedic: identity = pacing, not only color.** Coach must feel faster (interrupts ~1.8–2.8s, wider zoom). Dose/Dentist stay precise. Female warmer/honest — not clinical-cold. Color alone does not brand the family.
### U4 — Platform-Specific
1. **Same grade, different pacing.** Never re-grade for a platform. Only change: crop, caption density, interrupts cadence, loudness, CTA language.
2. **LinkedIn is a different animal.** Skip zoom-punches for Dose/Dentist. Professional CTA. Trust > virality tricks. 16:9 or 1:1 preferred.
3. **TikTok vs Reels:** Almost identical pipeline, but TikTok rewards slightly louder (-11 LUFS vs -14) and faster hook pressure (1.0–1.3s intent vs ~2s for Reels).
4. **If master can't crop cleanly for a format, say so.** Mark INCONCLUSIVE and request a re-record. Don't force a broken crop.
### U5 — Viral Pipeline + Final Gate
1. **Step 1 (Hook) is highest ROI.** Spend 80% of your optimization time on the first 3 seconds.
2. **Loop engineering:** Match the last spoken word/visual fragment to flow back into the opening. Users rewatching = algorithm signal.
3. **QA is three-state.** PASS / FAIL / INCONCLUSIVE. "I think it's fine" = INCONCLUSIVE = not done.
4. **Max 3 re-render attempts.** If you can't pass QA in 3 tries, the input needs to change, not the render settings.
### U6 — Master Orchestrator
1. **Use U6 when you have raw material and want everything.** It chains A→J (capture → short → enhance → viral → long → feed → platform → SEO → app guardrails → final gate).
2. **Stage checkpoints.** After each stage (B, C, D...), verify the intermediate file before proceeding. Don't discover a grade problem at stage J.
3. **App guardrails are STOP conditions.** If any common mistake for the app appears in your plan or render → FAIL immediately. Don't finish and then check.
---
## Common Mistakes (from editor.addict.best §8)
### All Apps
- ❌ Starting with logo / greeting / slow fade → always cold-open
- ❌ Dead air longer than interrupt budget
- ❌ Captions outside safe zone
- ❌ Wrong safe-zone numbers for wrong format (e.g., using 9:16 zones on 16:9)
- ❌ SFX louder than voiceover
- ❌ Missing `-framerate 30` on image inputs
- ❌ Missing `apad` + `-shortest` when muxing audio
- ❌ Missing `-ar 48000` on final audio
- ❌ Claiming "done" without QA PASS
### Per-App Traps
| App | Never do this |
|:---|:---|
| Dose Calculator | Invent/hallucinate medical numbers. Use energetic meme grade. Exceed 1.15× zoom. |
| Female ProMedic | Use childish pink (it's rose-gold/blush). Mix Coach energy/pacing. |
| Coach ProMedic | Use clinical restraint — Coach is the highest-energy app. Forget readability on form cues. |
| Dentist Pro | Use teal identical to Dose blue (Dentist = teal/cyan, Dose = clinical blue). Over-punch on short-form. |
---
## Quick Shell One-Liners
# Check if video is HDR
ffprobe -v quiet -select_streams v:0 -show_entries stream=color_transfer -of csv=p=0 input.mp4
# If output is "smpte2084" or "arib-std-b67" → needs HDR→SDR
# Verify A/V sync drift
ffprobe -v quiet -show_entries stream=start_time -of csv=p=0 input.mp4
# Both streams should start at ~0.000000
# Check final loudness (post-loudnorm verification)
ffmpeg -i final.mp4 -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | tail -20
# Batch probe all outputs
for f in "$OUT_DIR"/*.mp4; do
echo "=== $f ==="
ffprobe -v quiet -show_entries stream=width,height,r_frame_rate,codec_name -show_entries format=duration,size -of flat "$f"
done
# Verify no watermark (check for alpha/overlay in bottom-right)
ffmpeg -ss 1 -i input.mp4 -frames:v 1 -vf "crop=200:50:iw-200:ih-50" check_watermark.png
# Quick safe-zone overlay for 9:16 (visual check)
ffmpeg -i short.mp4 -vf "drawbox=x=60:y=250:w=870:h=1200:color=red@0.3:t=2" -t 5 safezone_check.mp4
---
## Combining Templates — Real Examples
### Example 1: Dose Calculator → TikTok + Reels
1. Fill variables: APP_NAME="Dose Calculator" ZOOM_MAX="1.15" WB="5900" ...
2. Run U1 (Screen → 9:16):
- Archive raw → HDR check → crop chrome → grade (clean high-key) →
Ken Burns on dose result → safe zone 1080×1920 →
kinetic captions → count-up numbers → audio normalize →
export short (12-22s) + standard (25-40s)
3. Run U3 (Enhance):
- KIT=app-tech PACE=balanced
- Hook check → dead air cut → caption coverage check → loop attempt
4. Run U5 gate section:
- QA all outputs → verify resolution, faceless, safe zone, zoom ≤ 1.15×
5. Run U4 SEO section:
- Title: "Most clinicians miss this interaction — live dose fix"
- Hashtags: #dosecalculator #clinicaltools #medicalapp
- Save CTA: "Save this clinical reference"
### Example 2: Coach ProMedic → YouTube Long + IG Feed
1. Fill variables: APP_NAME="Coach ProMedic" ZOOM_MAX="1.22" WB="5700" ...
2. Run U1 first (short master as grade reference)
3. Run U2 (Screen → 16:9 Long + Feed):
- Expand from short master → 1920×1080 → chapters →
kinetic hook only, then steady subtitles →
interrupts every 6-10s → export long
- Feed: re-center UI → 1080×1350 (4:5) + 1080×1080 (1:1)
4. Run U3 (Enhance) on long master
5. Run U5 (Final Gate) on all outputs
6. Run U4 SEO for YouTube:
- Chapters: 0:00 Problem | 0:45 Solution | 1:30 Proof | 2:15 How | 3:00 CTA
- Description first 150 chars = search intent
### Example 3: Full Production — U6 One-Shot
1. Fill variables + set JOBS="short_916,long_169,feed_45,feed_11,platform_pack"
2. U6 runs stages A→J automatically:
A. Archive + HDR→SDR + chrome crop
B. Short 9:16 master
C. Enhance pass (retention ROI)
D. Viral pipeline (hook→loop→variants)
E. Long 16:9 from short
F. Feed 4:5 + 1:1
G. Platform pack (tiktok, reels, yt_shorts, yt_long, ig_feed_45, linkedin)
H. SEO publish package per variant
I. App guardrails check
J. Final gate — all_pass required
3. Output: qa_report.md in {OUT_DIR}/reports/
---
## Six Deadly Sins (memorize these)
1. **VFR trap** — always `-framerate 30` on image inputs
2. **A/V drift** — always `apad` + `-shortest` when muxing, always `-ar 48000`
3. **Context decay** — save state checkpoints after every stage
4. **False positive "done"** — only QA PASS counts (INCONCLUSIVE = not done)
5. **Blind acceptance** — visually verify frames at 25/50/75% duration
6. **Face leak** — faceless absolute on all brand content, always check generated assets
---
## Safe Zone Quick Reference
| Format | Canvas | Safe area for text/captions | Grid-crop safe |
|:---|:---|:---|:---|
| 9:16 short | 1080×1920 | x: 60–930, y: 250–1450 | N/A |
| 16:9 long | 1920×1080 | x: 120–1800, y: 70–1010 | N/A |
| 4:5 feed | 1080×1350 | Central 1080×1080 (y: 135–1215) | Square center |
| 1:1 feed | 1080×1080 | Central ~90% | Full frame |
| Stories | 1080×1920 | Same as 9:16 but stricter top/bottom | N/A |
---
## Pacing Cheat Sheet
| Preset | Silence cutoff | Interrupt cadence | Best for |
|:---|:---|:---|:---|
| `hyper` | 0.40 s | 2.0–2.6 s | TikTok, Reels, Coach short-form |
| `balanced` | 0.55 s | 2.8–3.8 s | General short-form, Dose/Dentist |
| `story` | 0.75 s | 4.0–5.5 s | Long-form, tutorials, Female storytime |
---
## Free Tools Stack (zero paid dependencies)
Every command in this file uses free, open-source, locally-run tools. No paid API keys needed (your AI agent API is the only external dependency).
| Tool | What it does | Install | Cost |
|:---|:---|:---|:---|
| **FFmpeg** | All video/audio processing, export, grade, crop, mux | `brew install ffmpeg` (mac) / `apt install ffmpeg` (linux) | Free |
| **ffprobe** | Media analysis, duration, resolution, codec detection | Included with FFmpeg | Free |
| **Whisper** | Speech → text with word timestamps (captions) | `pip install openai-whisper` (runs locally, no API key) | Free |
| **pysubs2** | SRT/ASS caption manipulation, chunking, timing | `pip install pysubs2` | Free |
| **ImageMagick** | Image resize, overlay, thumbnail generation | `brew install imagemagick` / `apt install imagemagick` | Free |
| **bc** | Math in shell (duration calculations) | Pre-installed on mac/linux | Free |
| **jq** | JSON parsing (ffprobe output, Whisper JSON) | `brew install jq` / `apt install jq` | Free |
| **Python 3** | Scripting for batch ops, caption splitting | Pre-installed | Free |
**Not used, not needed:** No Adobe, no CapCut API, no RunwayML, no Eleven Labs, no paid cloud vision. The AI agent (your existing API) handles creative decisions; these tools handle execution.
---
## How to Merge This .md with editor.addict.best HTML
The goal: the HTML app has the 6 unified templates (the **what**). This .md has the commands and pro-tips (the **how**). Together they form one unified system. Here's how to combine them correctly.
### Method 1: AI Agent reads both files (simplest — recommended)
Give your AI agent both references in the system prompt or context:
You have two reference documents:
1. https://editor.addict.best — the master HTML app with 6 unified templates,
conflict resolution laws, brand table, and full template text.
Sections: #s1–#s9, #six-templates (u1–u6), #brand, #master
2. editor-pro-tips-and-commands.md — FFmpeg commands, pro-tips per template,
combination recipes, free tool stack, QA one-liners.
Workflow:
- Pick template from the HTML (e.g. copy U1 from #u1-body)
- Fill {VARIABLES} using the brand table from HTML #brand
- Execute using FFmpeg commands from the .md
- QA using the shell one-liners from the .md
- SEO package using the .md combination examples
Pro-tip: The HTML has a search bar (press `/`) — tell the agent to use section IDs (`#s1`, `#u3`, `#brand`) to locate content fast.
### Method 2: Embed .md as a linked companion in the HTML
Add a single link in the HTML's nav or site-inventory section pointing to this file:
html
<!-- Add to editor.addict.best nav section -->
<a href="/editor-pro-tips-and-commands.md">📋 Pro-Tips & Commands</a>
The .md is already served from the same web root at:
`https://editor.addict.best/editor-pro-tips-and-commands.md`
So the agent can fetch either file from the same domain. No merge needed — the HTML is the template source, the .md is the execution guide.
### Method 3: Section-to-section cross-reference
When chaining templates, map HTML sections to .md sections:
| Step | Read from HTML | Execute with .md |
|:---|:---|:---|
| Pick template | `#u1-body` through `#u6-body` | — |
| Fill brand vars | `#brand` table | "Template Variables" block |
| Grade | Template's PHASE 2 step 1 | Recipe #5 (brand grade commands) |
| Motion / Ken Burns | Template's PHASE 2 step 2 | Recipe #6 (Ken Burns) or #7 (slideshow) |
| Captions | Template's PHASE 2 step 4 | Recipe #17 (Whisper) + #18 (burn-in) |
| Audio mux | Template's PHASE 2 step 6 | Recipe #9 (mux) + #10 (loudnorm) + #11 (duck) |
| Export | Template's PHASE 2 step 8 | Recipe #14 (short) or #15 (long) or #16 (feed) |
| QA | Template's PHASE 3 checklist | "Shell One-Liners" + Recipe #13 (frame extract) |
| SEO | Template's SEO section | "Combining Templates" examples |
### Method 4: Agent self-check loop
After any render, the agent should run this verification sequence (all free, all local):
# 1. File exists and has video stream?
ffprobe -v quiet -show_entries stream=codec_type -of csv=p=0 "$OUTPUT" | grep -q video && echo "PASS: has video" || echo "FAIL: no video stream"
# 2. Resolution correct?
RES=$(ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "Resolution: $RES" # Compare to expected canvas
# 3. Duration > 0?
DUR=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 "$OUTPUT")
echo "Duration: ${DUR}s" # Must be > 0
# 4. FPS = 30?
FPS=$(ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "FPS: $FPS" # Should be 30/1
# 5. Audio sample rate = 48000?
SR=$(ffprobe -v quiet -show_entries stream=sample_rate -of csv=p=0 -select_streams a:0 "$OUTPUT")
echo "Sample rate: $SR" # Must be 48000
# 6. Visual QA frames
for pct in 25 50 75; do
T=$(echo "$DUR * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i "$OUTPUT" -frames:v 1 "qa_${pct}.png" -y 2>/dev/null
done
echo "QA frames saved — visually inspect for black/corrupt/face-leak"
# 7. Loudness check
ffmpeg -i "$OUTPUT" -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | grep input_i
All 7 checks use free tools. The AI agent reads the results and decides PASS / FAIL / INCONCLUSIVE per the HTML template's QA checklist.
---
*This .md supports editor.addict.best. The HTML app owns the templates — this file owns the commands, pro-tips, and merge logic. Both are served from the same domain. Together they are the complete system.*
Recipe #10 — Loudnorm (EBU R128 — all platforms)
# Standard: -14 LUFS (YouTube, IG, FB, LinkedIn)
ffmpeg -i input.mp4 \
-af "loudnorm=I=-14:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized.mp4
# TikTok loud-feed variant: -11 to -12 LUFS
ffmpeg -i input.mp4 \
-af "loudnorm=I=-11:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized_loud.mp4
Recipe #13 — Extract frames for QA check
# Grab frames at 25%, 50%, 75% of duration for visual QA
DURATION=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4)
for pct in 25 50 75; do
T=$(echo "$DURATION * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i input.mp4 -frames:v 1 "qa_frame_${pct}pct.png" -y
done
How to use this hybrid panel
1) Copy template (left). 2) Fill {APP_NAME} / brand vars. 3) Copy commands (right) or let agent use recipe numbers. 4) Execute in template order. 5) QA with recipe #13 + shell checks. Original clean templates (#six-templates) and Pro-Tips (#pro-tips) are unchanged.
4 U4 · Platform variants + SEO / publish package SEO/publish text + tags → template 4
## SHARED LAWS (apply in every job — from playbook conflict law)
- Brand numbers: AI-Agent Video Production Guide §1 table wins over any older generic grade or flat 18–22% hook for all apps.
- Zoom ceiling is per-app: Dose/Dentist 1.08–1.15× · Female 1.08–1.18× · Coach 1.10–1.22×. Never exceed that app's max (including hook).
- Retention before polish: hook → dead-air kill → kinetic captions → loop → audio → export → then fancy effects.
- Faceless absolute: no eyes, nose, mouth, eye-circles, face-implying shapes in generated visuals.
- Readability beats style: any grade/effect that hurts dose/UI text is removed.
- Hard cuts ~80–90% of edits; heavy dissolves/light-leaks/glitch off UI footage.
- Render invariants: image inputs -framerate 30 · mux apad+-shortest · audio -ar 48000 · HDR→SDR before grade.
- QA three-state: PASS / FAIL / INCONCLUSIVE. INCONCLUSIVE ≠ PASS. Never claim done without gate.
- Process order: capture → archive raw → grade → motion → safe-zone place → captions → interrupts → audio → export → QA.
- Soft research numbers (exact % completion targets) are directional only — optimize your own retention curve.
- Hashtags: 3–5 highly relevant ONLY (not 8–12 spam) + keywords in spoken words + on-screen text.
- Shares/saves > likes; specific save-reason CTA beats generic "follow for more".
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
# ===== UNIFIED TEMPLATE 4 OF 6 — PLATFORM-SPECIFIC + SEO / PUBLISH PACKAGE =====
# ----- BEGIN ARCHIVE SOURCE: tpl4-body (full text preserved) -----
# AGENT BRIEF — PLATFORM / FORMAT SPECIFIC EDITS
You start from an approved master (or raw) and produce native variants per platform.
Do NOT re-invent brand grade. Only change pacing, crop, captions density, loudness, CTA, and export specs.
## INPUTS
- Master path: {MASTER_PATH}
- App (optional): {APP_NAME}
- Brand grade already applied? {GRADE_DONE} # true|false
- Brand vars if grade needed: {WB} {EXPOSURE} {BLACKS} {WHITES} {SAT} {GRAIN} {VIGNETTE} {ACCENT}
- Zoom ceiling: {ZOOM_MIN}–{ZOOM_MAX}
- Platforms requested (multi): {PLATFORMS}
# options: tiktok | reels | yt_shorts | yt_long | ig_feed_45 | feed_11 | linkedin | fb_feed | stories
- Output dir: {OUT_DIR}
## GLOBAL LAWS
- Faceless absolute if brand series.
- Readability beats style.
- Same grade across all variants.
- Hard cuts default.
- Three-state QA; INCONCLUSIVE blocks done.
- No watermarks. No logo cold-open on short surfaces.
## PER-PLATFORM RECIPES
### tiktok
- Canvas 1080x1920
- Hook pressure maximum; multi-channel by 1.0–1.3s intent
- Interrupts aggressive (use app short cadence if provided)
- Captions kinetic full runtime; mute-first
- Loop engineered
- Loudness: -14 default OR -11 to -12 if {LOUD_FEED}=true
- Length variants: 12–22s + 25–40s when possible
- CTA: soft + save-reason; keep rewatch path
### reels (Instagram Reels)
- Canvas 1080x1920
- Hook <~2s intent; same safe zone as vertical social
- Captions on; saves/shares oriented payoff
- Grade identical to TikTok variant (only timing/crop tweaks if needed)
- Pair note: if ig_feed_45 also requested, share grade/project
### yt_shorts
- Canvas 1080x1920
- Captions on; keyword-rich speech + on-screen terms
- May allow slightly longer if retention holds
- Loudness -14 class
- No watermark
### yt_long
- Canvas 1920x1080
- Structure: Problem→Solution→Proof→How→CTA + chapters
- Kinetic captions ONLY in opening; then steady subtitles
- Holds longer; interrupts {LONG_INTERRUPT_MIN}–{LONG_INTERRUPT_MAX}s or on new info
- Title-safe margins; protect end-screen zone last 5–20s
- Loudness -14 LUFS / -1 dBTP (do not TikTok-hot this)
- Bitrate 15–25 Mbps if dense UI
### ig_feed_45
- Canvas 1080x1350
- 15–60s; kinetic hook then steady captions
- CRITICAL: key content in central 1080x1080 band for grid crop
- QA must include grid-thumbnail mental check
### feed_11
- Canvas 1080x1080
- Cross-platform feed; central ~90% essentials
- Same grade; slightly longer holds than Reels
### linkedin
- Prefer 16:9 or 1:1
- Restrained motion; skip glitch/meme energy
- For Dose/Dentist: optional zero zoom-punches
- Professional CTA; captions on (mute feeds)
- Trust > virality tricks; no engagement-bait spam
### fb_feed
- 4:5 or 1:1; mute-first captions; strong first frame
- Grade same; hook clear without sound
### stories
- 1080x1920; shorter; safe zone strict; quick hook; brand stickers optional later (not in render unless asked)
## APP OVERRIDES (if {APP_NAME} set)
- Dose: cool clinical; max zoom 1.15×; no fake medical numbers
- Female: warm rose; claim-then-number hooks; IG-first
- Coach: widest zoom up to 1.22×; fastest short interrupts; front-load long energy
- Dentist: sterile; teal accent ≠ Dose blue; serious tone even on short
## PIPELINE PER VARIANT
1. Load master
2. Apply grade only if GRADE_DONE=false
3. Reframe/crop for canvas (smart re-center UI)
4. Adjust pacing/interrupts to platform recipe
5. Rebuild captions density for platform
6. Audio loudnorm per recipe
7. Export per matrix
8. QA per platform checklist
9. Write {OUT_DIR}/{platform}_*.mp4
## QA PER VARIANT
[ ] Correct canvas
[ ] Grade matches siblings
[ ] Safe zone correct for THAT format (not wrong format’s numbers)
[ ] Captions readable muted
[ ] Hook appropriate to platform pressure
[ ] No watermark
[ ] Faceless OK
[ ] Numbers legible
[ ] File valid (stream, duration, resolution)
## PLATFORM SEO NOTES
- tiktok / reels / yt_shorts: keyword-rich speech + captions; 3–5 tags; save CTA; native no watermark
- yt_long: keyword title + chapters + description first 150 chars; spoken feature names; -14 LUFS
- linkedin: professional first-line text; keywords in post body; restrained edit; 1:1 or 16:9
- ig_feed_45 / feed_11: first frame = mini-thumbnail; central crop safe; caption keywords above fold
- Hashtags: fewer, relevant — evidence leans 3–5 not 8–12 spam
## SAVE / SHARE DESIGN
- Shares/saves > likes for distribution
- Design payoff worth saving (checklist, dose result, workout plan, myth correction)
- App-specific save language from brand register
## OUTPUT REPORT
Table: platform | path | duration | canvas | loudness target | QA PASS/FAIL | notes
If a platform cannot be produced from master without destroying UI, say so (INCONCLUSIVE) and propose re-record crop — do not force a broken crop.
# ----- END ARCHIVE SOURCE: tpl4-body -----
# ----- BEGIN ARCHIVE SOURCE: tpl5-body (full text preserved) -----
# AGENT BRIEF — SEO + VIRAL DISTRIBUTION PACKAGE
You do NOT re-edit pixels unless a first-frame/thumbnail crop is broken.
You produce a publish package for each finished video file.
## INPUTS
- Video path(s): {VIDEO_PATHS}
- App / brand: {APP_NAME}
- Platforms: {PLATFORMS}
- Core claim (1 sentence): {CORE_CLAIM}
- Primary keywords (3–6): {KEYWORDS}
- Output: {OUT_DIR}/publish_package.md
## RULES
1. Retention already done upstream — do not trade clarity for keyword stuffing.
2. Hashtags: exactly 3–5 relevant tags. No spam walls.
3. Keywords must appear in: spoken suggestion + on-screen caption lines + title.
4. Save CTA must be specific (not only "follow").
5. Soft research % are directional — do not invent "guaranteed viral" claims.
## PER VIDEO DELIVERABLE
For each platform in {PLATFORMS} write:
### A) Title / first line (≤70 chars ideal)
- Formula: [Mistake or Outcome] + [Specific result] + [Audience]
- Include 1 primary keyword naturally
### B) Caption / description
- Line 1: value claim (search intent)
- Line 2: proof or how-to hook
- Line 3: save CTA in brand register
- Line 4: 3–5 hashtags
### C) Spoken keyword checklist
- List phrases the VO/captions already contain
- Flag missing keywords that should appear in captions without clutter
### D) First-frame / thumbnail check
- [ ] Claim or number readable at small size
- [ ] No chrome/dock/watermark
- [ ] For 4:5/1:1: subject in grid-safe center
- [ ] For YT long: suggest 3–5 word thumbnail text
### E) YouTube-only (if yt_long)
- Chapter list (Problem / Solution / Proof / How / CTA)
- Description first 150 chars = search summary
- End-screen note (central 90% free)
### F) Hashtag set (3–5)
Return tags + one-line why each is relevant
## OUTPUT
Write publish_package.md. If first-frame fails crop/readability → mark FAIL and request re-export of frame 0 only.
Three-state: PASS only if all platform packages complete and first-frame checks pass.
# ----- END ARCHIVE SOURCE: tpl5-body -----
Apex power tips (with this template)
Cognitive pipeline + false-positive QA + vision/seeds/brain — same block as clean templates.
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
Pro-tips for this template
### U4 — Platform-Specific
1. **Same grade, different pacing.** Never re-grade for a platform. Only change: crop, caption density, interrupts cadence, loudness, CTA language.
2. **LinkedIn is a different animal.** Skip zoom-punches for Dose/Dentist. Professional CTA. Trust > virality tricks. 16:9 or 1:1 preferred.
3. **TikTok vs Reels:** Almost identical pipeline, but TikTok rewards slightly louder (-11 LUFS vs -14) and faster hook pressure (1.0–1.3s intent vs ~2s for Reels).
4. **If master can't crop cleanly for a format, say so.** Mark INCONCLUSIVE and request a re-record. Don't force a broken crop.Recipe #1 — Probe any file first (always start here)
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
Pro-tip: Pipe to `jq` for quick checks:
# Duration only
ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4
# Resolution
ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 input.mp4
# FPS
ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 input.mp4
Recipe #16 — Re-crop for feed formats (U4 output)
# 4:5 feed (1080x1350) — re-center, don't blind-crop
ffmpeg -i master.mp4 \
-vf "scale=1080:1350:force_original_aspect_ratio=decrease,pad=1080:1350:(ow-iw)/2:(oh-ih)/2:black" \
-c:v libx264 -crf 18 -c:a copy \
"$OUT_DIR/feed_45.mp4"
# 1:1 feed (1080x1080)
ffmpeg -i master.mp4 \
-vf "scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:black" \
-c:v libx264 -crf 18 -c:a copy \
"$OUT_DIR/feed_11.mp4"
Recipe #14 — Final export — short-form (U1/U5 output)
ffmpeg -i processed.mp4 \
-c:v libx264 -profile:v high -level 4.1 \
-b:v 15M -maxrate 20M -bufsize 30M \
-r 30 -g 60 \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
-vf "scale=1080:1920" \
"$OUT_DIR/short_916.mp4"
Recipe #15 — Final export — long-form (U2 output)
ffmpeg -i processed.mp4 \
-c:v libx264 -profile:v high -level 4.1 \
-b:v 20M -maxrate 25M -bufsize 40M \
-r 30 -g 60 \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
-vf "scale=1920:1080" \
"$OUT_DIR/long_169.mp4"
Shell one-liners (QA helpers)
## Quick Shell One-Liners
```bash
# Check if video is HDR
ffprobe -v quiet -select_streams v:0 -show_entries stream=color_transfer -of csv=p=0 input.mp4
# If output is "smpte2084" or "arib-std-b67" → needs HDR→SDR
# Verify A/V sync drift
ffprobe -v quiet -show_entries stream=start_time -of csv=p=0 input.mp4
# Both streams should start at ~0.000000
# Check final loudness (post-loudnorm verification)
ffmpeg -i final.mp4 -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | tail -20
# Batch probe all outputs
for f in "$OUT_DIR"/*.mp4; do
echo "=== $f ==="
ffprobe -v quiet -show_entries stream=width,height,r_frame_rate,codec_name -show_entries format=duration,size -of flat "$f"
done
# Verify no watermark (check for alpha/overlay in bottom-right)
ffmpeg -ss 1 -i input.mp4 -frames:v 1 -vf "crop=200:50:iw-200:ih-50" check_watermark.png
# Quick safe-zone overlay for 9:16 (visual check)
ffmpeg -i short.mp4 -vf "drawbox=x=60:y=250:w=870:h=1200:color=red@0.3:t=2" -t 5 safezone_check.mp4
```
---
How to use this hybrid panel
1) Copy template (left). 2) Fill {APP_NAME} / brand vars. 3) Copy commands (right) or let agent use recipe numbers. 4) Execute in template order. 5) QA with recipe #13 + shell checks. Original clean templates (#six-templates) and Pro-Tips (#pro-tips) are unchanged.
5 U5 · Viral polish + final PASS gate Viral polish + final PASS → template 5
## SHARED LAWS (apply in every job — from playbook conflict law)
- Brand numbers: AI-Agent Video Production Guide §1 table wins over any older generic grade or flat 18–22% hook for all apps.
- Zoom ceiling is per-app: Dose/Dentist 1.08–1.15× · Female 1.08–1.18× · Coach 1.10–1.22×. Never exceed that app's max (including hook).
- Retention before polish: hook → dead-air kill → kinetic captions → loop → audio → export → then fancy effects.
- Faceless absolute: no eyes, nose, mouth, eye-circles, face-implying shapes in generated visuals.
- Readability beats style: any grade/effect that hurts dose/UI text is removed.
- Hard cuts ~80–90% of edits; heavy dissolves/light-leaks/glitch off UI footage.
- Render invariants: image inputs -framerate 30 · mux apad+-shortest · audio -ar 48000 · HDR→SDR before grade.
- QA three-state: PASS / FAIL / INCONCLUSIVE. INCONCLUSIVE ≠ PASS. Never claim done without gate.
- Process order: capture → archive raw → grade → motion → safe-zone place → captions → interrupts → audio → export → QA.
- Soft research numbers (exact % completion targets) are directional only — optimize your own retention curve.
- Hashtags: 3–5 highly relevant ONLY (not 8–12 spam) + keywords in spoken words + on-screen text.
- Shares/saves > likes; specific save-reason CTA beats generic "follow for more".
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
# ===== UNIFIED TEMPLATE 5 OF 6 — VIRAL AGENTS.md PIPELINE + FINAL GATE / SELF-CHECK =====
# ----- BEGIN ARCHIVE SOURCE: tpl7-body (full text preserved) -----
# SYSTEM PROMPT – Short-Form Viral Video Optimization Agent
You are a precise, deterministic video optimization agent for TikTok / Reels / YouTube Shorts.
Inputs: (1) existing video OR (2) folder of images.
Follow AGENTS.md exactly. Prefer rules over free artistic invention.
Use FFmpeg / Whisper / OpenCV as available. Output multiple length variants.
Run full QA before finishing. Report what changed.
ZOOM NOTE: Prefer brand zoom ceiling when {APP_NAME} is set (AI-Agent Guide §1).
If no brand: punch-in up to ~1.15× (≈15%) is allowed; do not invent medical numbers.
---
# AGENTS.md – Viral Short-Form Optimization Pipeline
## Global Settings
- Target: 1080x1920 (9:16), 30 fps default
- Pacing presets:
- hyper (default): silence cutoff 0.40s; interrupt every 2.0–2.6s
- balanced: silence 0.55s; interrupt 2.8–3.8s
- story: silence 0.75s; interrupt 4.0–5.5s (or on story beats)
- Always generate ≥2 variants: ultra-tight 12–22s + standard 25–40s when material allows
- Caption safe zone: centroid 20–55% height (avoid top 15% / bottom 22%)
- Faceless if brand series: NO eyes/nose/mouth/eye-circles
## Pipeline (execute in order)
### Step 0 – Ingest
- Images → base video with Ken Burns (2.5–4s/image) + hard cuts
- Whisper word timestamps → words.json
- Silence → silence.json; stillness → stillness.json; probe → media.json
### Step 1 – Hook (0–3s) — HIGHEST ROI
- Strongest visual/outcome at t=0 — never logo/greeting/slow fade
- Punch-in in first 0.5s within allowed zoom ceiling
- Kinetic text 5–9 words starting ≤0.3s; high contrast; safe zone
- Audio impact at frame 0
- Prefer negative/mistake framing when content allows
### Step 2 – Jump cuts + pattern interrupts
- Remove silence/stillness per {PACE}
- Visual change on cadence (punch, new shot, caption pop)
- Prefer interrupts on spoken emphasis words
### Step 3 – Kinetic captions
- Word-level or 2–4 word groups; bold white + accent on keywords
- Scale pop 110–120% only on emphasis
- Coverage ≥95% of speech
### Step 4 – Audio
- VO compress peaks roughly -6 to -3 dB pre-loudnorm
- Music duck ~10 dB under speech
- Whoosh on cuts/zooms; soft pop on text; SFX under VO
- loudnorm ~ -14 LUFS / -1 dBTP (or -11/-12 if TikTok loud-feed priority)
- Final -ar 48000; mux apad + -shortest
### Step 5 – Seamless loop
- Match end visual + last spoken fragment to open
- Hard cut if continuity high; else short bridge
### Step 6 – Export
- 1080x1920 H.264, 30fps, AAC 160–192k, no watermark
- variant_short.mp4 + variant_standard.mp4 (+ loop variant if possible)
### Step 7 – QA (PASS required)
[ ] Multi-channel hook in first 3s
[ ] No dead air above preset
[ ] Captions safe + ≥95% if speech
[ ] Correct 9:16 1080x1920
[ ] ≥2 length variants when possible
[ ] Mute test communicates core message
[ ] Faceless OK if required
[ ] No watermark / letterbox
If critical FAIL → fix → re-render (max 3) → re-QA.
INCONCLUSIVE is not PASS.
## SEO LITE (after QA PASS)
- Draft title (mistake/outcome formula)
- 3–5 relevant hashtags
- Save-reason CTA line
- Confirm keyword appears in speech or captions
## REPORT
Paths, pace, changes list, QA matrix, publish package draft.
# ----- END ARCHIVE SOURCE: tpl7-body -----
# ----- BEGIN ARCHIVE SOURCE: tpl9-body (full text preserved) -----
# AGENT BRIEF — FINAL GATE / SELF-CHECK
Inputs: {OUTPUT_PATHS} expected format(s): {FORMATS} app: {APP_NAME or none}
For EACH output file, produce CheckResult rows (never crash):
| check_id | result | detail | evidence |
|----------|--------|--------|----------|
| exists_nonzero | PASS/FAIL/INCONCLUSIVE | ... | path, bytes |
| has_video_stream | ... | ffprobe | ... |
| resolution_match | ... | WxH | ... |
| fps_ok | ... | ... | ... |
| duration_gt_0 | ... | ... | ... |
| mute_message_ok | ... | captions/hook | frame or note |
| safe_zone_ok | ... | format rules | ... |
| zoom_ceiling_ok | ... | brand max | ... |
| no_watermark | ... | ... | ... |
| faceless_ok | ... | if required | ... |
| numbers_legible | ... | UI/dose | ... |
| av_sync_ok | ... | if A+V | ... |
| variants_count | ... | short-form ≥2 if required | ... |
| seo_package_present | ... | title+3–5 tags+save CTA | ... |
## RULES
- Any FAIL → fix root cause → re-render → re-run this gate (max 3 loops)
- Any INCONCLUSIVE on critical checks → do not claim done
- all_pass true only if every critical row is PASS
## OUTPUT
final_gate.json + human summary. If all_pass: list publish-ready paths. Else: blocked reasons.
# ----- END ARCHIVE SOURCE: tpl9-body -----
Apex power tips (with this template)
Cognitive pipeline + false-positive QA + vision/seeds/brain — same block as clean templates.
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
Pro-tips for this template
### U5 — Viral Pipeline + Final Gate
1. **Step 1 (Hook) is highest ROI.** Spend 80% of your optimization time on the first 3 seconds.
2. **Loop engineering:** Match the last spoken word/visual fragment to flow back into the opening. Users rewatching = algorithm signal.
3. **QA is three-state.** PASS / FAIL / INCONCLUSIVE. "I think it's fine" = INCONCLUSIVE = not done.
4. **Max 3 re-render attempts.** If you can't pass QA in 3 tries, the input needs to change, not the render settings.Recipe #12 — Silence detection (for dead-air cuts)
# Find silences longer than 0.4s at -30dB threshold (hyper pace)
ffmpeg -i input.mp4 -af "silencedetect=noise=-30dB:d=0.4" -f null - 2>&1 | grep "silence_"
# For balanced pace, use d=0.55
# For story pace, use d=0.75
Recipe #14 — Final export — short-form (U1/U5 output)
ffmpeg -i processed.mp4 \
-c:v libx264 -profile:v high -level 4.1 \
-b:v 15M -maxrate 20M -bufsize 30M \
-r 30 -g 60 \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
-vf "scale=1080:1920" \
"$OUT_DIR/short_916.mp4"
Recipe #13 — Extract frames for QA check
# Grab frames at 25%, 50%, 75% of duration for visual QA
DURATION=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4)
for pct in 25 50 75; do
T=$(echo "$DURATION * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i input.mp4 -frames:v 1 "qa_frame_${pct}pct.png" -y
done
Recipe #10 — Loudnorm (EBU R128 — all platforms)
# Standard: -14 LUFS (YouTube, IG, FB, LinkedIn)
ffmpeg -i input.mp4 \
-af "loudnorm=I=-14:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized.mp4
# TikTok loud-feed variant: -11 to -12 LUFS
ffmpeg -i input.mp4 \
-af "loudnorm=I=-11:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized_loud.mp4
Shell one-liners (QA helpers)
## Quick Shell One-Liners
```bash
# Check if video is HDR
ffprobe -v quiet -select_streams v:0 -show_entries stream=color_transfer -of csv=p=0 input.mp4
# If output is "smpte2084" or "arib-std-b67" → needs HDR→SDR
# Verify A/V sync drift
ffprobe -v quiet -show_entries stream=start_time -of csv=p=0 input.mp4
# Both streams should start at ~0.000000
# Check final loudness (post-loudnorm verification)
ffmpeg -i final.mp4 -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | tail -20
# Batch probe all outputs
for f in "$OUT_DIR"/*.mp4; do
echo "=== $f ==="
ffprobe -v quiet -show_entries stream=width,height,r_frame_rate,codec_name -show_entries format=duration,size -of flat "$f"
done
# Verify no watermark (check for alpha/overlay in bottom-right)
ffmpeg -ss 1 -i input.mp4 -frames:v 1 -vf "crop=200:50:iw-200:ih-50" check_watermark.png
# Quick safe-zone overlay for 9:16 (visual check)
ffmpeg -i short.mp4 -vf "drawbox=x=60:y=250:w=870:h=1200:color=red@0.3:t=2" -t 5 safezone_check.mp4
```
---
Agent self-check loop (7 free checks)
### Method 4: Agent self-check loop
After any render, the agent should run this verification sequence (all free, all local):
```bash
# 1. File exists and has video stream?
ffprobe -v quiet -show_entries stream=codec_type -of csv=p=0 "$OUTPUT" | grep -q video && echo "PASS: has video" || echo "FAIL: no video stream"
# 2. Resolution correct?
RES=$(ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "Resolution: $RES" # Compare to expected canvas
# 3. Duration > 0?
DUR=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 "$OUTPUT")
echo "Duration: ${DUR}s" # Must be > 0
# 4. FPS = 30?
FPS=$(ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "FPS: $FPS" # Should be 30/1
# 5. Audio sample rate = 48000?
SR=$(ffprobe -v quiet -show_entries stream=sample_rate -of csv=p=0 -select_streams a:0 "$OUTPUT")
echo "Sample rate: $SR" # Must be 48000
# 6. Visual QA frames
for pct in 25 50 75; do
T=$(echo "$DUR * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i "$OUTPUT" -frames:v 1 "qa_${pct}.png" -y 2>/dev/null
done
echo "QA frames saved — visually inspect for black/corrupt/face-leak"
# 7. Loudness check
ffmpeg -i "$OUTPUT" -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | grep input_i
```
All 7 checks use free tools. The AI agent reads the results and decides PASS / FAIL / INCONCLUSIVE per the HTML template's QA checklist.
How to use this hybrid panel
1) Copy template (left). 2) Fill {APP_NAME} / brand vars. 3) Copy commands (right) or let agent use recipe numbers. 4) Execute in template order. 5) QA with recipe #13 + shell checks. Original clean templates (#six-templates) and Pro-Tips (#pro-tips) are unchanged.
6 U6 · Whole pipeline for a named app Whole pipeline → template 6 (full paste + set {APP_NAME})
## SHARED LAWS (apply in every job — from playbook conflict law)
- Brand numbers: AI-Agent Video Production Guide §1 table wins over any older generic grade or flat 18–22% hook for all apps.
- Zoom ceiling is per-app: Dose/Dentist 1.08–1.15× · Female 1.08–1.18× · Coach 1.10–1.22×. Never exceed that app's max (including hook).
- Retention before polish: hook → dead-air kill → kinetic captions → loop → audio → export → then fancy effects.
- Faceless absolute: no eyes, nose, mouth, eye-circles, face-implying shapes in generated visuals.
- Readability beats style: any grade/effect that hurts dose/UI text is removed.
- Hard cuts ~80–90% of edits; heavy dissolves/light-leaks/glitch off UI footage.
- Render invariants: image inputs -framerate 30 · mux apad+-shortest · audio -ar 48000 · HDR→SDR before grade.
- QA three-state: PASS / FAIL / INCONCLUSIVE. INCONCLUSIVE ≠ PASS. Never claim done without gate.
- Process order: capture → archive raw → grade → motion → safe-zone place → captions → interrupts → audio → export → QA.
- Soft research numbers (exact % completion targets) are directional only — optimize your own retention curve.
- Hashtags: 3–5 highly relevant ONLY (not 8–12 spam) + keywords in spoken words + on-screen text.
- Shares/saves > likes; specific save-reason CTA beats generic "follow for more".
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
# ===== UNIFIED TEMPLATE 6 OF 6 — MASTER MEGA ORCHESTRATOR + PER-APP PACK GUARDRAILS =====
# ----- BEGIN ARCHIVE SOURCE: tplM-body (full text preserved) -----
# MASTER AGENT — SCREEN + ENHANCE + MULTI-FORMAT + PLATFORM VARIANTS
You execute a full production run for app screen content.
## LAWS (non-negotiable)
1. Faceless absolute. Readability beats style.
2. Brand table numbers win all grade/zoom conflicts.
3. Order: archive raw → SDR → grade → motion → safe zones → captions → interrupts → audio → export → QA.
4. Retention ROI before polish.
5. Hard cuts ~80–90%. Image inputs -framerate 30. Mux apad+-shortest. Audio -ar 48000.
6. QA three-state: only PASS means done. Max 3 re-render attempts.
## INPUTS
- Raw screen: {RAW_PATH}
- App: {APP_NAME}
- Brand vars: fill from brand table
- Jobs: {JOBS} # subset of: short_916, long_169, feed_45, feed_11, enhance_only, platform_pack
- Platforms if platform_pack: {PLATFORMS}
- OUT: {OUT_DIR}
## STAGE MAP
A. CAPTURE HYGIENE — chrome/dock crop if needed; HDR→SDR; archive raw
B. SHORT 9:16 — Section 1 template fully → short_master.mp4
C. ENHANCE — Section 3 ROI + Script Density + failure modes on short_master
D. VIRAL PASS — Section 7 AGENTS.md steps 0–7 (hook→loop→variants) if short-form
E. LONG 16:9 — expand from short (Section 2A) → long_master.mp4
F. FEED — 4:5 + optional 1:1 (Section 2B)
G. PLATFORM PACK — Section 4 recipes from masters
H. SEO PACKAGE — Section 5: titles, captions, 3–5 hashtags, save CTA, first-frame check per variant
I. APP GUARDRAILS — Section 8 common mistakes for {APP_NAME}
J. FINAL GATE — Section 9 self-check + all QA PASS
## DELIVERABLES
{OUT_DIR}/
raw_archive/
short_916/
long_169/
feed_45/
feed_11/
platform/
reports/qa_report.md
## REPORT
Write qa_report.md with matrix of every file × checks.
If anything INCONCLUSIVE, do not mark project complete.
Start now. Prefer local FFmpeg. Do not skip QA.
# ----- END ARCHIVE SOURCE: tplM-body -----
# ----- BEGIN ARCHIVE SOURCE: tpl8-body (full text preserved) -----
# AGENT BRIEF — PROMEDIC APP PACK GUARDRAILS
App: {APP_NAME} # Dose | Female | Coach | Dentist
Task: {TASK} # short | long | myth | form-fix | feature
## LOAD
1. Brand variable table for {APP_NAME} (zoom/hook/interrupt/grade) — wins all conflicts.
2. Section 8 pack for {APP_NAME}: hooks, save CTA, platforms, ready prompt closest to {TASK}.
3. Common mistakes list = HARD FAILS if violated.
## EXECUTE
- Use matching ready prompt as seed; fill [brackets].
- Faceless absolute. Readability beats style.
- Short-form: Section 1 + Section 7 ROI order.
- Long-form: Section 2A; chapters if YouTube.
- SEO package: Section 5 after pixel QA PASS.
## STOP CONDITIONS
If any Common Mistake for this app appears in plan or render → FAIL → fix → re-QA.
Never mix Coach energy into Dose/Dentist.
Never use childish pink for Female or teal identical to Dose blue for Dentist.
## OUTPUT
Render path(s) + which pack prompt used + mistakes checklist all clear + publish package.
# ----- END ARCHIVE SOURCE: tpl8-body -----
Apex power tips (with this template)
Cognitive pipeline + false-positive QA + vision/seeds/brain — same block as clean templates.
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
Pro-tips for this template
### U6 — Master Orchestrator
1. **Use U6 when you have raw material and want everything.** It chains A→J (capture → short → enhance → viral → long → feed → platform → SEO → app guardrails → final gate).
2. **Stage checkpoints.** After each stage (B, C, D...), verify the intermediate file before proceeding. Don't discover a grade problem at stage J.
3. **App guardrails are STOP conditions.** If any common mistake for the app appears in your plan or render → FAIL immediately. Don't finish and then check.
---
## Common Mistakes (from editor.addict.best §8)Recipe #1 — Probe any file first (always start here)
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
Pro-tip: Pipe to `jq` for quick checks:
# Duration only
ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4
# Resolution
ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 input.mp4
# FPS
ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 input.mp4
Recipe #2 — Archive raw (always before any edit)
mkdir -p "$OUT_DIR/raw_archive"
cp "$RAW_PATH" "$OUT_DIR/raw_archive/"
Recipe #3 — HDR → SDR (run if ffprobe shows bt2020/hlg/pq)
ffmpeg -i "$RAW_PATH" \
-vf "zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709:t=bt709:m=bt709,tonemap=hable:desat=0,zscale=t=bt709,format=yuv420p" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
"$OUT_DIR/sdr.mp4"
Recipe #4 — Crop browser chrome / dock
# Pro-tip: measure chrome height with ffprobe frame grab first
# Top 80px chrome + bottom 80px dock = crop 160px total
ffmpeg -i raw.mp4 \
-vf "crop=in_w:in_h-160:0:80" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
cropped.mp4
Recipe #5 — Brand grade (Clean High-Key — Dose/Dentist default)
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.03:contrast=1.05:saturation=0.92,curves=m='0/0.03 0.5/0.52 1/0.96'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded.mp4
Pro-tip: For **Female ProMedic** (warm rose), shift saturation up and add warmth:
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.03:contrast=1.04:saturation=0.97,colorbalance=rs=0.04:gs=-0.01:bs=-0.03,curves=m='0/0.04 0.5/0.53 1/0.97'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded_female.mp4
Pro-tip: For **Coach ProMedic** (neutral-warm, slightly saturated):
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.04:contrast=1.06:saturation=1.03,curves=m='0/0.02 0.5/0.53 1/0.98'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded_coach.mp4
Recipe #6 — Ken Burns from still image → clip
# ponytail: ALWAYS -framerate 30 on image inputs (VFR trap kills sync)
ffmpeg -framerate 30 -loop 1 -t 4 -i still.png \
-vf "scale=3840:2160,zoompan=z='min(zoom+0.001,1.15)':d=120:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=1080x1920" \
-c:v libx264 -t 4 -pix_fmt yuv420p \
ken_burns.mp4
Pro-tip: Change `1.15` to your app's `{ZOOM_MAX}`. For Coach use `1.22`, for Dose/Dentist use `1.15`.
Recipe #7 — Image folder → slideshow video
# ponytail: -framerate 30 is mandatory, not optional
ffmpeg -framerate 30 -pattern_type glob -i 'images/*.png' \
-vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,zoompan=z='min(zoom+0.0008,1.12)':d=90:s=1080x1920" \
-c:v libx264 -pix_fmt yuv420p -r 30 \
slideshow.mp4
Recipe #8 — 9:16 blurred-fill from landscape source
ffmpeg -i landscape.mp4 \
-filter_complex "[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,boxblur=20:5[bg];[0:v]scale=1080:-2:force_original_aspect_ratio=decrease[fg];[bg][fg]overlay=(W-w)/2:(H-h)/2" \
-c:v libx264 -preset slow -crf 18 \
vertical_blurred.mp4
Recipe #9 — Mux voiceover — no A/V drift
# ponytail: apad + -shortest is the A/V drift killer. Never skip both.
ffmpeg -i video.mp4 -i voiceover.wav \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
-af "apad" -shortest \
muxed.mp4
Recipe #10 — Loudnorm (EBU R128 — all platforms)
# Standard: -14 LUFS (YouTube, IG, FB, LinkedIn)
ffmpeg -i input.mp4 \
-af "loudnorm=I=-14:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized.mp4
# TikTok loud-feed variant: -11 to -12 LUFS
ffmpeg -i input.mp4 \
-af "loudnorm=I=-11:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized_loud.mp4
Recipe #11 — Duck music under voiceover
# ponytail: volume=0.3 ducks music to ~10dB below VO; amix merges them
ffmpeg -i voiceover.wav -i music.mp3 \
-filter_complex "[1:a]volume=0.3[music];[0:a][music]amix=inputs=2:duration=first:dropout_transition=2[out]" \
-map "[out]" -c:a aac -b:a 192k -ar 48000 \
mixed_audio.aac
Pro-tip: For dynamic ducking (music dips only when VO is speaking), use FFmpeg's `sidechaincompress`:
ffmpeg -i voiceover.wav -i music.mp3 \
-filter_complex "[0:a]asplit=2[vo][sc];[1:a][sc]sidechaincompress=threshold=0.02:ratio=6:attack=200:release=1000[ducked];[vo][ducked]amix=inputs=2:duration=first[out]" \
-map "[out]" -c:a aac -b:a 192k -ar 48000 \
mixed_dynamic.aac
Recipe #12 — Silence detection (for dead-air cuts)
# Find silences longer than 0.4s at -30dB threshold (hyper pace)
ffmpeg -i input.mp4 -af "silencedetect=noise=-30dB:d=0.4" -f null - 2>&1 | grep "silence_"
# For balanced pace, use d=0.55
# For story pace, use d=0.75
Recipe #13 — Extract frames for QA check
# Grab frames at 25%, 50%, 75% of duration for visual QA
DURATION=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4)
for pct in 25 50 75; do
T=$(echo "$DURATION * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i input.mp4 -frames:v 1 "qa_frame_${pct}pct.png" -y
done
Recipe #14 — Final export — short-form (U1/U5 output)
ffmpeg -i processed.mp4 \
-c:v libx264 -profile:v high -level 4.1 \
-b:v 15M -maxrate 20M -bufsize 30M \
-r 30 -g 60 \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
-vf "scale=1080:1920" \
"$OUT_DIR/short_916.mp4"
Recipe #15 — Final export — long-form (U2 output)
ffmpeg -i processed.mp4 \
-c:v libx264 -profile:v high -level 4.1 \
-b:v 20M -maxrate 25M -bufsize 40M \
-r 30 -g 60 \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
-vf "scale=1920:1080" \
"$OUT_DIR/long_169.mp4"
Recipe #16 — Re-crop for feed formats (U4 output)
# 4:5 feed (1080x1350) — re-center, don't blind-crop
ffmpeg -i master.mp4 \
-vf "scale=1080:1350:force_original_aspect_ratio=decrease,pad=1080:1350:(ow-iw)/2:(oh-ih)/2:black" \
-c:v libx264 -crf 18 -c:a copy \
"$OUT_DIR/feed_45.mp4"
# 1:1 feed (1080x1080)
ffmpeg -i master.mp4 \
-vf "scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:black" \
-c:v libx264 -crf 18 -c:a copy \
"$OUT_DIR/feed_11.mp4"
Recipe #17 — Whisper transcription (for captions — U3 step 0)
# ponytail: word-level timestamps are required for kinetic captions
# Whisper is 100% free, local, no API key — runs on CPU or GPU
whisper input.mp4 --model base --language en --output_format json --word_timestamps True --output_dir "$OUT_DIR"
Pro-tip: For better accuracy on medical/technical terms, use `--model small` or `--model medium` (still free, just slower).
Recipe #18 — Caption burn-in from SRT (free, local)
# Burn .srt subtitles directly into the video
ffmpeg -i input.mp4 -vf "subtitles=captions.srt:force_style='FontName=Arial,FontSize=22,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,BorderStyle=3,Outline=2'" \
-c:v libx264 -crf 18 -c:a copy \
captioned.mp4
Pro-tip: For kinetic-style word-highlight, use `pysubs2` to split SRT into 2–4 word groups:
python3 -c "
import pysubs2
subs = pysubs2.load('captions.srt')
# pysubs2 is free: pip install pysubs2
for line in subs:
words = line.text.split()
# Split into 3-word chunks with even timing
chunk_size = 3
duration = line.end - line.start
chunks = [words[i:i+chunk_size] for i in range(0, len(words), chunk_size)]
for i, chunk in enumerate(chunks):
t0 = line.start + (duration * i // len(chunks))
t1 = line.start + (duration * (i+1) // len(chunks))
print(f'{pysubs2.time.ms_to_str(t0)} --> {pysubs2.time.ms_to_str(t1)}')
print(' '.join(chunk))
"
Recipe #19 — Scene/shot detection (free, for interrupt placement)
# Detect scene changes — useful for finding where to place pattern interrupts
ffmpeg -i input.mp4 -vf "select='gt(scene,0.3)',showinfo" -f null - 2>&1 | grep showinfo
# Adjust 0.3 threshold: lower = more sensitive, higher = fewer cuts
Recipe #20 — Speed ramp (setup fast, payoff slow)
# 1.5× speed on setup (0-10s), normal speed on payoff (10s-end)
ffmpeg -i input.mp4 \
-filter_complex "[0:v]trim=0:10,setpts=PTS/1.5[fast];[0:v]trim=10,setpts=PTS-STARTPTS[slow];[fast][slow]concat=n=2:v=1:a=0[v];[0:a]atrim=0:10,atempo=1.5[afast];[0:a]atrim=10,asetpts=PTS-STARTPTS[aslow];[afast][aslow]concat=n=2:v=0:a=1[a]" \
-map "[v]" -map "[a]" -c:v libx264 -crf 18 -c:a aac -ar 48000 \
speed_ramped.mp4
---
## Pro-Tips by Template
### U1 — Screen → 9:16 Short-Form
1. **Always probe before grading.** If source is already 1080×1920, skip reframe.
2. **Hook must work on mute.** Test by playing first 3s with volume at zero — if message is unclear, your captions/visuals failed.
3. **Count-up numbers > static pop.** For Dose Calculator results, animate 0→final in 0.5–0.8s with a soft pop SFX. Never just flash the number.
4. **Two variants minimum.** Always cut an ultra-tight (12–22s) AND a standard (25–40s). Different platforms reward different lengths.
5. **Zoom target = the number, not the full screen.** Ken Burns should drift toward the result/dose/value on screen.
### U2 — Screen → 16:9 Long + Feed
1. **Build 9:16 first, then expand.** Never start with long-form — you'll drift the grade. Short is the locked reference.
2. **Kinetic captions only in the hook.** After the first 5–12s, switch to steady full-clause subtitles. Constant kinetic text fatigues viewers on 3+ minute videos.
3. **Chapters are mandatory for YouTube.** Mark: Problem / Solution / Proof / How it works / CTA.
4. **Grid crop test for 4:5.** The key content must sit inside the central 1080×1080 band (y:135–1215) because Instagram crops to square on the profile grid.
5. **End-screen zone.** Keep the last 5–20s clear in the central 90% for YouTube end-screen cards.
### U3 — General Enhance
1. **Name the tone in one word.** If you need three effects to describe your look, simplify. "Clinical." "Warm." "Gritty." One word.
2. **Script density = ~1 idea per 15s.** Don't cram multiple claims into one breath.
3. **Visual change every 7–10s minimum** for feed content (not just when the script changes — independently).
4. **Effects on app UI are poison.** Never stack grain + light-leak + blur + chromatic aberration on clinical numeric screens. Use `app-tech` kit = clean high-key, zero grain on numbers.
5. **Speed ramp recipe:** 1.5–2× on setup/context, normal or slight slow on payoff/result reveal
6. **Promedic pack is conditional.** Detect Dose / Female / Coach / Dentist ProMedic first. If not Promedic → skip brand table, per-app zoom tiers, app CTAs, and platform picks; use general KIT+PACE only. If Promedic → force `app-tech`, inject brand table, enforce per-app zoom ceilings (hook included), format safe zones, short-form-first multi-export, save-reason CTAs, and app platform emphasis. Report `promedic_pack=applied|skipped`.
7. **When Promedic: identity = pacing, not only color.** Coach must feel faster (interrupts ~1.8–2.8s, wider zoom). Dose/Dentist stay precise. Female warmer/honest — not clinical-cold. Color alone does not brand the family.
### U4 — Platform-Specific
1. **Same grade, different pacing.** Never re-grade for a platform. Only change: crop, caption density, interrupts cadence, loudness, CTA language.
2. **LinkedIn is a different animal.** Skip zoom-punches for Dose/Dentist. Professional CTA. Trust > virality tricks. 16:9 or 1:1 preferred.
3. **TikTok vs Reels:** Almost identical pipeline, but TikTok rewards slightly louder (-11 LUFS vs -14) and faster hook pressure (1.0–1.3s intent vs ~2s for Reels).
4. **If master can't crop cleanly for a format, say so.** Mark INCONCLUSIVE and request a re-record. Don't force a broken crop.
### U5 — Viral Pipeline + Final Gate
1. **Step 1 (Hook) is highest ROI.** Spend 80% of your optimization time on the first 3 seconds.
2. **Loop engineering:** Match the last spoken word/visual fragment to flow back into the opening. Users rewatching = algorithm signal.
3. **QA is three-state.** PASS / FAIL / INCONCLUSIVE. "I think it's fine" = INCONCLUSIVE = not done.
4. **Max 3 re-render attempts.** If you can't pass QA in 3 tries, the input needs to change, not the render settings.
### U6 — Master Orchestrator
1. **Use U6 when you have raw material and want everything.** It chains A→J (capture → short → enhance → viral → long → feed → platform → SEO → app guardrails → final gate).
2. **Stage checkpoints.** After each stage (B, C, D...), verify the intermediate file before proceeding. Don't discover a grade problem at stage J.
3. **App guardrails are STOP conditions.** If any common mistake for the app appears in your plan or render → FAIL immediately. Don't finish and then check.
---
## Common Mistakes (from editor.addict.best §8)
### All Apps
- ❌ Starting with logo / greeting / slow fade → always cold-open
- ❌ Dead air longer than interrupt budget
- ❌ Captions outside safe zone
- ❌ Wrong safe-zone numbers for wrong format (e.g., using 9:16 zones on 16:9)
- ❌ SFX louder than voiceover
- ❌ Missing `-framerate 30` on image inputs
- ❌ Missing `apad` + `-shortest` when muxing audio
- ❌ Missing `-ar 48000` on final audio
- ❌ Claiming "done" without QA PASS
### Per-App Traps
| App | Never do this |
|:---|:---|
| Dose Calculator | Invent/hallucinate medical numbers. Use energetic meme grade. Exceed 1.15× zoom. |
| Female ProMedic | Use childish pink (it's rose-gold/blush). Mix Coach energy/pacing. |
| Coach ProMedic | Use clinical restraint — Coach is the highest-energy app. Forget readability on form cues. |
| Dentist Pro | Use teal identical to Dose blue (Dentist = teal/cyan, Dose = clinical blue). Over-punch on short-form. |
---
## Quick Shell One-Liners
# Check if video is HDR
ffprobe -v quiet -select_streams v:0 -show_entries stream=color_transfer -of csv=p=0 input.mp4
# If output is "smpte2084" or "arib-std-b67" → needs HDR→SDR
# Verify A/V sync drift
ffprobe -v quiet -show_entries stream=start_time -of csv=p=0 input.mp4
# Both streams should start at ~0.000000
# Check final loudness (post-loudnorm verification)
ffmpeg -i final.mp4 -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | tail -20
# Batch probe all outputs
for f in "$OUT_DIR"/*.mp4; do
echo "=== $f ==="
ffprobe -v quiet -show_entries stream=width,height,r_frame_rate,codec_name -show_entries format=duration,size -of flat "$f"
done
# Verify no watermark (check for alpha/overlay in bottom-right)
ffmpeg -ss 1 -i input.mp4 -frames:v 1 -vf "crop=200:50:iw-200:ih-50" check_watermark.png
# Quick safe-zone overlay for 9:16 (visual check)
ffmpeg -i short.mp4 -vf "drawbox=x=60:y=250:w=870:h=1200:color=red@0.3:t=2" -t 5 safezone_check.mp4
---
## Combining Templates — Real Examples
### Example 1: Dose Calculator → TikTok + Reels
1. Fill variables: APP_NAME="Dose Calculator" ZOOM_MAX="1.15" WB="5900" ...
2. Run U1 (Screen → 9:16):
- Archive raw → HDR check → crop chrome → grade (clean high-key) →
Ken Burns on dose result → safe zone 1080×1920 →
kinetic captions → count-up numbers → audio normalize →
export short (12-22s) + standard (25-40s)
3. Run U3 (Enhance):
- KIT=app-tech PACE=balanced
- Hook check → dead air cut → caption coverage check → loop attempt
4. Run U5 gate section:
- QA all outputs → verify resolution, faceless, safe zone, zoom ≤ 1.15×
5. Run U4 SEO section:
- Title: "Most clinicians miss this interaction — live dose fix"
- Hashtags: #dosecalculator #clinicaltools #medicalapp
- Save CTA: "Save this clinical reference"
### Example 2: Coach ProMedic → YouTube Long + IG Feed
1. Fill variables: APP_NAME="Coach ProMedic" ZOOM_MAX="1.22" WB="5700" ...
2. Run U1 first (short master as grade reference)
3. Run U2 (Screen → 16:9 Long + Feed):
- Expand from short master → 1920×1080 → chapters →
kinetic hook only, then steady subtitles →
interrupts every 6-10s → export long
- Feed: re-center UI → 1080×1350 (4:5) + 1080×1080 (1:1)
4. Run U3 (Enhance) on long master
5. Run U5 (Final Gate) on all outputs
6. Run U4 SEO for YouTube:
- Chapters: 0:00 Problem | 0:45 Solution | 1:30 Proof | 2:15 How | 3:00 CTA
- Description first 150 chars = search intent
### Example 3: Full Production — U6 One-Shot
1. Fill variables + set JOBS="short_916,long_169,feed_45,feed_11,platform_pack"
2. U6 runs stages A→J automatically:
A. Archive + HDR→SDR + chrome crop
B. Short 9:16 master
C. Enhance pass (retention ROI)
D. Viral pipeline (hook→loop→variants)
E. Long 16:9 from short
F. Feed 4:5 + 1:1
G. Platform pack (tiktok, reels, yt_shorts, yt_long, ig_feed_45, linkedin)
H. SEO publish package per variant
I. App guardrails check
J. Final gate — all_pass required
3. Output: qa_report.md in {OUT_DIR}/reports/
---
## Six Deadly Sins (memorize these)
1. **VFR trap** — always `-framerate 30` on image inputs
2. **A/V drift** — always `apad` + `-shortest` when muxing, always `-ar 48000`
3. **Context decay** — save state checkpoints after every stage
4. **False positive "done"** — only QA PASS counts (INCONCLUSIVE = not done)
5. **Blind acceptance** — visually verify frames at 25/50/75% duration
6. **Face leak** — faceless absolute on all brand content, always check generated assets
---
## Safe Zone Quick Reference
| Format | Canvas | Safe area for text/captions | Grid-crop safe |
|:---|:---|:---|:---|
| 9:16 short | 1080×1920 | x: 60–930, y: 250–1450 | N/A |
| 16:9 long | 1920×1080 | x: 120–1800, y: 70–1010 | N/A |
| 4:5 feed | 1080×1350 | Central 1080×1080 (y: 135–1215) | Square center |
| 1:1 feed | 1080×1080 | Central ~90% | Full frame |
| Stories | 1080×1920 | Same as 9:16 but stricter top/bottom | N/A |
---
## Pacing Cheat Sheet
| Preset | Silence cutoff | Interrupt cadence | Best for |
|:---|:---|:---|:---|
| `hyper` | 0.40 s | 2.0–2.6 s | TikTok, Reels, Coach short-form |
| `balanced` | 0.55 s | 2.8–3.8 s | General short-form, Dose/Dentist |
| `story` | 0.75 s | 4.0–5.5 s | Long-form, tutorials, Female storytime |
---
## Free Tools Stack (zero paid dependencies)
Every command in this file uses free, open-source, locally-run tools. No paid API keys needed (your AI agent API is the only external dependency).
| Tool | What it does | Install | Cost |
|:---|:---|:---|:---|
| **FFmpeg** | All video/audio processing, export, grade, crop, mux | `brew install ffmpeg` (mac) / `apt install ffmpeg` (linux) | Free |
| **ffprobe** | Media analysis, duration, resolution, codec detection | Included with FFmpeg | Free |
| **Whisper** | Speech → text with word timestamps (captions) | `pip install openai-whisper` (runs locally, no API key) | Free |
| **pysubs2** | SRT/ASS caption manipulation, chunking, timing | `pip install pysubs2` | Free |
| **ImageMagick** | Image resize, overlay, thumbnail generation | `brew install imagemagick` / `apt install imagemagick` | Free |
| **bc** | Math in shell (duration calculations) | Pre-installed on mac/linux | Free |
| **jq** | JSON parsing (ffprobe output, Whisper JSON) | `brew install jq` / `apt install jq` | Free |
| **Python 3** | Scripting for batch ops, caption splitting | Pre-installed | Free |
**Not used, not needed:** No Adobe, no CapCut API, no RunwayML, no Eleven Labs, no paid cloud vision. The AI agent (your existing API) handles creative decisions; these tools handle execution.
---
## How to Merge This .md with editor.addict.best HTML
The goal: the HTML app has the 6 unified templates (the **what**). This .md has the commands and pro-tips (the **how**). Together they form one unified system. Here's how to combine them correctly.
### Method 1: AI Agent reads both files (simplest — recommended)
Give your AI agent both references in the system prompt or context:
You have two reference documents:
1. https://editor.addict.best — the master HTML app with 6 unified templates,
conflict resolution laws, brand table, and full template text.
Sections: #s1–#s9, #six-templates (u1–u6), #brand, #master
2. editor-pro-tips-and-commands.md — FFmpeg commands, pro-tips per template,
combination recipes, free tool stack, QA one-liners.
Workflow:
- Pick template from the HTML (e.g. copy U1 from #u1-body)
- Fill {VARIABLES} using the brand table from HTML #brand
- Execute using FFmpeg commands from the .md
- QA using the shell one-liners from the .md
- SEO package using the .md combination examples
Pro-tip: The HTML has a search bar (press `/`) — tell the agent to use section IDs (`#s1`, `#u3`, `#brand`) to locate content fast.
### Method 2: Embed .md as a linked companion in the HTML
Add a single link in the HTML's nav or site-inventory section pointing to this file:
html <!-- Add to editor.addict.best nav section --> <a href="/editor-pro-tips-and-commands.md">📋 Pro-Tips & Commands</a>
The .md is already served from the same web root at:
`https://editor.addict.best/editor-pro-tips-and-commands.md`
So the agent can fetch either file from the same domain. No merge needed — the HTML is the template source, the .md is the execution guide.
### Method 3: Section-to-section cross-reference
When chaining templates, map HTML sections to .md sections:
| Step | Read from HTML | Execute with .md |
|:---|:---|:---|
| Pick template | `#u1-body` through `#u6-body` | — |
| Fill brand vars | `#brand` table | "Template Variables" block |
| Grade | Template's PHASE 2 step 1 | Recipe #5 (brand grade commands) |
| Motion / Ken Burns | Template's PHASE 2 step 2 | Recipe #6 (Ken Burns) or #7 (slideshow) |
| Captions | Template's PHASE 2 step 4 | Recipe #17 (Whisper) + #18 (burn-in) |
| Audio mux | Template's PHASE 2 step 6 | Recipe #9 (mux) + #10 (loudnorm) + #11 (duck) |
| Export | Template's PHASE 2 step 8 | Recipe #14 (short) or #15 (long) or #16 (feed) |
| QA | Template's PHASE 3 checklist | "Shell One-Liners" + Recipe #13 (frame extract) |
| SEO | Template's SEO section | "Combining Templates" examples |
### Method 4: Agent self-check loop
After any render, the agent should run this verification sequence (all free, all local):
# 1. File exists and has video stream?
ffprobe -v quiet -show_entries stream=codec_type -of csv=p=0 "$OUTPUT" | grep -q video && echo "PASS: has video" || echo "FAIL: no video stream"
# 2. Resolution correct?
RES=$(ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "Resolution: $RES" # Compare to expected canvas
# 3. Duration > 0?
DUR=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 "$OUTPUT")
echo "Duration: ${DUR}s" # Must be > 0
# 4. FPS = 30?
FPS=$(ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "FPS: $FPS" # Should be 30/1
# 5. Audio sample rate = 48000?
SR=$(ffprobe -v quiet -show_entries stream=sample_rate -of csv=p=0 -select_streams a:0 "$OUTPUT")
echo "Sample rate: $SR" # Must be 48000
# 6. Visual QA frames
for pct in 25 50 75; do
T=$(echo "$DUR * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i "$OUTPUT" -frames:v 1 "qa_${pct}.png" -y 2>/dev/null
done
echo "QA frames saved — visually inspect for black/corrupt/face-leak"
# 7. Loudness check
ffmpeg -i "$OUTPUT" -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | grep input_i
All 7 checks use free tools. The AI agent reads the results and decides PASS / FAIL / INCONCLUSIVE per the HTML template's QA checklist.
---
*This .md supports editor.addict.best. The HTML app owns the templates — this file owns the commands, pro-tips, and merge logic. Both are served from the same domain. Together they are the complete system.*
Shell one-liners (QA helpers)
## Quick Shell One-Liners
```bash
# Check if video is HDR
ffprobe -v quiet -select_streams v:0 -show_entries stream=color_transfer -of csv=p=0 input.mp4
# If output is "smpte2084" or "arib-std-b67" → needs HDR→SDR
# Verify A/V sync drift
ffprobe -v quiet -show_entries stream=start_time -of csv=p=0 input.mp4
# Both streams should start at ~0.000000
# Check final loudness (post-loudnorm verification)
ffmpeg -i final.mp4 -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | tail -20
# Batch probe all outputs
for f in "$OUT_DIR"/*.mp4; do
echo "=== $f ==="
ffprobe -v quiet -show_entries stream=width,height,r_frame_rate,codec_name -show_entries format=duration,size -of flat "$f"
done
# Verify no watermark (check for alpha/overlay in bottom-right)
ffmpeg -ss 1 -i input.mp4 -frames:v 1 -vf "crop=200:50:iw-200:ih-50" check_watermark.png
# Quick safe-zone overlay for 9:16 (visual check)
ffmpeg -i short.mp4 -vf "drawbox=x=60:y=250:w=870:h=1200:color=red@0.3:t=2" -t 5 safezone_check.mp4
```
---
Agent self-check loop (7 free checks)
### Method 4: Agent self-check loop
After any render, the agent should run this verification sequence (all free, all local):
```bash
# 1. File exists and has video stream?
ffprobe -v quiet -show_entries stream=codec_type -of csv=p=0 "$OUTPUT" | grep -q video && echo "PASS: has video" || echo "FAIL: no video stream"
# 2. Resolution correct?
RES=$(ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "Resolution: $RES" # Compare to expected canvas
# 3. Duration > 0?
DUR=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 "$OUTPUT")
echo "Duration: ${DUR}s" # Must be > 0
# 4. FPS = 30?
FPS=$(ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "FPS: $FPS" # Should be 30/1
# 5. Audio sample rate = 48000?
SR=$(ffprobe -v quiet -show_entries stream=sample_rate -of csv=p=0 -select_streams a:0 "$OUTPUT")
echo "Sample rate: $SR" # Must be 48000
# 6. Visual QA frames
for pct in 25 50 75; do
T=$(echo "$DUR * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i "$OUTPUT" -frames:v 1 "qa_${pct}.png" -y 2>/dev/null
done
echo "QA frames saved — visually inspect for black/corrupt/face-leak"
# 7. Loudness check
ffmpeg -i "$OUTPUT" -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | grep input_i
```
All 7 checks use free tools. The AI agent reads the results and decides PASS / FAIL / INCONCLUSIVE per the HTML template's QA checklist.
How to use this hybrid panel
1) Copy template (left). 2) Fill {APP_NAME} / brand vars. 3) Copy commands (right) or let agent use recipe numbers. 4) Execute in template order. 5) QA with recipe #13 + shell checks. Original clean templates (#six-templates) and Pro-Tips (#pro-tips) are unchanged.
# ===== APEX POWER TIPS (prepended for hybrid copy-all) =====
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
# ===== CODE FOR UNIFIED TEMPLATE U1 =====
### U1 — Screen → 9:16 Short-Form
1. **Always probe before grading.** If source is already 1080×1920, skip reframe.
2. **Hook must work on mute.** Test by playing first 3s with volume at zero — if message is unclear, your captions/visuals failed.
3. **Count-up numbers > static pop.** For Dose Calculator results, animate 0→final in 0.5–0.8s with a soft pop SFX. Never just flash the number.
4. **Two variants minimum.** Always cut an ultra-tight (12–22s) AND a standard (25–40s). Different platforms reward different lengths.
5. **Zoom target = the number, not the full screen.** Ken Burns should drift toward the result/dose/value on screen.
### 1. Probe any file first (always start here)
```bash
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
```
Pro-tip: Pipe to `jq` for quick checks:
```bash
# Duration only
ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4
# Resolution
ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 input.mp4
# FPS
ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 input.mp4
```
### 2. Archive raw (always before any edit)
```bash
mkdir -p "$OUT_DIR/raw_archive"
cp "$RAW_PATH" "$OUT_DIR/raw_archive/"
```
### 3. HDR → SDR (run if ffprobe shows bt2020/hlg/pq)
```bash
ffmpeg -i "$RAW_PATH" \
-vf "zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709:t=bt709:m=bt709,tonemap=hable:desat=0,zscale=t=bt709,format=yuv420p" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
"$OUT_DIR/sdr.mp4"
```
### 4. Crop browser chrome / dock
```bash
# Pro-tip: measure chrome height with ffprobe frame grab first
# Top 80px chrome + bottom 80px dock = crop 160px total
ffmpeg -i raw.mp4 \
-vf "crop=in_w:in_h-160:0:80" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
cropped.mp4
```
### 5. Brand grade (Clean High-Key — Dose/Dentist default)
```bash
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.03:contrast=1.05:saturation=0.92,curves=m='0/0.03 0.5/0.52 1/0.96'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded.mp4
```
Pro-tip: For **Female ProMedic** (warm rose), shift saturation up and add warmth:
```bash
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.03:contrast=1.04:saturation=0.97,colorbalance=rs=0.04:gs=-0.01:bs=-0.03,curves=m='0/0.04 0.5/0.53 1/0.97'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded_female.mp4
```
Pro-tip: For **Coach ProMedic** (neutral-warm, slightly saturated):
```bash
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.04:contrast=1.06:saturation=1.03,curves=m='0/0.02 0.5/0.53 1/0.98'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded_coach.mp4
```
### 6. Ken Burns from still image → clip
```bash
# ponytail: ALWAYS -framerate 30 on image inputs (VFR trap kills sync)
ffmpeg -framerate 30 -loop 1 -t 4 -i still.png \
-vf "scale=3840:2160,zoompan=z='min(zoom+0.001,1.15)':d=120:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=1080x1920" \
-c:v libx264 -t 4 -pix_fmt yuv420p \
ken_burns.mp4
```
Pro-tip: Change `1.15` to your app's `{ZOOM_MAX}`. For Coach use `1.22`, for Dose/Dentist use `1.15`.
### 7. Image folder → slideshow video
```bash
# ponytail: -framerate 30 is mandatory, not optional
ffmpeg -framerate 30 -pattern_type glob -i 'images/*.png' \
-vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,zoompan=z='min(zoom+0.0008,1.12)':d=90:s=1080x1920" \
-c:v libx264 -pix_fmt yuv420p -r 30 \
slideshow.mp4
```
### 9. Mux voiceover — no A/V drift
```bash
# ponytail: apad + -shortest is the A/V drift killer. Never skip both.
ffmpeg -i video.mp4 -i voiceover.wav \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
-af "apad" -shortest \
muxed.mp4
```
### 10. Loudnorm (EBU R128 — all platforms)
```bash
# Standard: -14 LUFS (YouTube, IG, FB, LinkedIn)
ffmpeg -i input.mp4 \
-af "loudnorm=I=-14:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized.mp4
# TikTok loud-feed variant: -11 to -12 LUFS
ffmpeg -i input.mp4 \
-af "loudnorm=I=-11:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized_loud.mp4
```
### 17. Whisper transcription (for captions — U3 step 0)
```bash
# ponytail: word-level timestamps are required for kinetic captions
# Whisper is 100% free, local, no API key — runs on CPU or GPU
whisper input.mp4 --model base --language en --output_format json --word_timestamps True --output_dir "$OUT_DIR"
```
Pro-tip: For better accuracy on medical/technical terms, use `--model small` or `--model medium` (still free, just slower).
### 18. Caption burn-in from SRT (free, local)
```bash
# Burn .srt subtitles directly into the video
ffmpeg -i input.mp4 -vf "subtitles=captions.srt:force_style='FontName=Arial,FontSize=22,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,BorderStyle=3,Outline=2'" \
-c:v libx264 -crf 18 -c:a copy \
captioned.mp4
```
Pro-tip: For kinetic-style word-highlight, use `pysubs2` to split SRT into 2–4 word groups:
```bash
python3 -c "
import pysubs2
subs = pysubs2.load('captions.srt')
# pysubs2 is free: pip install pysubs2
for line in subs:
words = line.text.split()
# Split into 3-word chunks with even timing
chunk_size = 3
duration = line.end - line.start
chunks = [words[i:i+chunk_size] for i in range(0, len(words), chunk_size)]
for i, chunk in enumerate(chunks):
t0 = line.start + (duration * i // len(chunks))
t1 = line.start + (duration * (i+1) // len(chunks))
print(f'{pysubs2.time.ms_to_str(t0)} --> {pysubs2.time.ms_to_str(t1)}')
print(' '.join(chunk))
"
```
### 14. Final export — short-form (U1/U5 output)
```bash
ffmpeg -i processed.mp4 \
-c:v libx264 -profile:v high -level 4.1 \
-b:v 15M -maxrate 20M -bufsize 30M \
-r 30 -g 60 \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
-vf "scale=1080:1920" \
"$OUT_DIR/short_916.mp4"
```
### 13. Extract frames for QA check
```bash
# Grab frames at 25%, 50%, 75% of duration for visual QA
DURATION=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4)
for pct in 25 50 75; do
T=$(echo "$DURATION * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i input.mp4 -frames:v 1 "qa_frame_${pct}pct.png" -y
done
```
# ===== APEX POWER TIPS (prepended for hybrid copy-all) =====
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
# ===== CODE FOR UNIFIED TEMPLATE U2 =====
### U2 — Screen → 16:9 Long + Feed
1. **Build 9:16 first, then expand.** Never start with long-form — you'll drift the grade. Short is the locked reference.
2. **Kinetic captions only in the hook.** After the first 5–12s, switch to steady full-clause subtitles. Constant kinetic text fatigues viewers on 3+ minute videos.
3. **Chapters are mandatory for YouTube.** Mark: Problem / Solution / Proof / How it works / CTA.
4. **Grid crop test for 4:5.** The key content must sit inside the central 1080×1080 band (y:135–1215) because Instagram crops to square on the profile grid.
5. **End-screen zone.** Keep the last 5–20s clear in the central 90% for YouTube end-screen cards.
### 1. Probe any file first (always start here)
```bash
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
```
Pro-tip: Pipe to `jq` for quick checks:
```bash
# Duration only
ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4
# Resolution
ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 input.mp4
# FPS
ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 input.mp4
```
### 2. Archive raw (always before any edit)
```bash
mkdir -p "$OUT_DIR/raw_archive"
cp "$RAW_PATH" "$OUT_DIR/raw_archive/"
```
### 5. Brand grade (Clean High-Key — Dose/Dentist default)
```bash
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.03:contrast=1.05:saturation=0.92,curves=m='0/0.03 0.5/0.52 1/0.96'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded.mp4
```
Pro-tip: For **Female ProMedic** (warm rose), shift saturation up and add warmth:
```bash
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.03:contrast=1.04:saturation=0.97,colorbalance=rs=0.04:gs=-0.01:bs=-0.03,curves=m='0/0.04 0.5/0.53 1/0.97'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded_female.mp4
```
Pro-tip: For **Coach ProMedic** (neutral-warm, slightly saturated):
```bash
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.04:contrast=1.06:saturation=1.03,curves=m='0/0.02 0.5/0.53 1/0.98'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded_coach.mp4
```
### 15. Final export — long-form (U2 output)
```bash
ffmpeg -i processed.mp4 \
-c:v libx264 -profile:v high -level 4.1 \
-b:v 20M -maxrate 25M -bufsize 40M \
-r 30 -g 60 \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
-vf "scale=1920:1080" \
"$OUT_DIR/long_169.mp4"
```
### 16. Re-crop for feed formats (U4 output)
```bash
# 4:5 feed (1080x1350) — re-center, don't blind-crop
ffmpeg -i master.mp4 \
-vf "scale=1080:1350:force_original_aspect_ratio=decrease,pad=1080:1350:(ow-iw)/2:(oh-ih)/2:black" \
-c:v libx264 -crf 18 -c:a copy \
"$OUT_DIR/feed_45.mp4"
# 1:1 feed (1080x1080)
ffmpeg -i master.mp4 \
-vf "scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:black" \
-c:v libx264 -crf 18 -c:a copy \
"$OUT_DIR/feed_11.mp4"
```
### 10. Loudnorm (EBU R128 — all platforms)
```bash
# Standard: -14 LUFS (YouTube, IG, FB, LinkedIn)
ffmpeg -i input.mp4 \
-af "loudnorm=I=-14:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized.mp4
# TikTok loud-feed variant: -11 to -12 LUFS
ffmpeg -i input.mp4 \
-af "loudnorm=I=-11:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized_loud.mp4
```
### 13. Extract frames for QA check
```bash
# Grab frames at 25%, 50%, 75% of duration for visual QA
DURATION=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4)
for pct in 25 50 75; do
T=$(echo "$DURATION * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i input.mp4 -frames:v 1 "qa_frame_${pct}pct.png" -y
done
```
# ===== APEX POWER TIPS (prepended for hybrid copy-all) =====
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
# ===== CODE FOR UNIFIED TEMPLATE U3 =====
### U3 — General Enhance
1. **Name the tone in one word.** If you need three effects to describe your look, simplify. "Clinical." "Warm." "Gritty." One word.
2. **Script density = ~1 idea per 15s.** Don't cram multiple claims into one breath.
3. **Visual change every 7–10s minimum** for feed content (not just when the script changes — independently).
4. **Effects on app UI are poison.** Never stack grain + light-leak + blur + chromatic aberration on clinical numeric screens. Use `app-tech` kit = clean high-key, zero grain on numbers.
5. **Speed ramp recipe:** 1.5–2× on setup/context, normal or slight slow on payoff/result reveal
6. **Promedic pack is conditional.** Detect Dose / Female / Coach / Dentist ProMedic first. If not Promedic → skip brand table, per-app zoom tiers, app CTAs, and platform picks; use general KIT+PACE only. If Promedic → force `app-tech`, inject brand table, enforce per-app zoom ceilings (hook included), format safe zones, short-form-first multi-export, save-reason CTAs, and app platform emphasis. Report `promedic_pack=applied|skipped`.
7. **When Promedic: identity = pacing, not only color.** Coach must feel faster (interrupts ~1.8–2.8s, wider zoom). Dose/Dentist stay precise. Female warmer/honest — not clinical-cold. Color alone does not brand the family.
### 1. Probe any file first (always start here)
```bash
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
```
Pro-tip: Pipe to `jq` for quick checks:
```bash
# Duration only
ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4
# Resolution
ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 input.mp4
# FPS
ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 input.mp4
```
### 12. Silence detection (for dead-air cuts)
```bash
# Find silences longer than 0.4s at -30dB threshold (hyper pace)
ffmpeg -i input.mp4 -af "silencedetect=noise=-30dB:d=0.4" -f null - 2>&1 | grep "silence_"
# For balanced pace, use d=0.55
# For story pace, use d=0.75
```
### 19. Scene/shot detection (free, for interrupt placement)
```bash
# Detect scene changes — useful for finding where to place pattern interrupts
ffmpeg -i input.mp4 -vf "select='gt(scene,0.3)',showinfo" -f null - 2>&1 | grep showinfo
# Adjust 0.3 threshold: lower = more sensitive, higher = fewer cuts
```
### 17. Whisper transcription (for captions — U3 step 0)
```bash
# ponytail: word-level timestamps are required for kinetic captions
# Whisper is 100% free, local, no API key — runs on CPU or GPU
whisper input.mp4 --model base --language en --output_format json --word_timestamps True --output_dir "$OUT_DIR"
```
Pro-tip: For better accuracy on medical/technical terms, use `--model small` or `--model medium` (still free, just slower).
### 18. Caption burn-in from SRT (free, local)
```bash
# Burn .srt subtitles directly into the video
ffmpeg -i input.mp4 -vf "subtitles=captions.srt:force_style='FontName=Arial,FontSize=22,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,BorderStyle=3,Outline=2'" \
-c:v libx264 -crf 18 -c:a copy \
captioned.mp4
```
Pro-tip: For kinetic-style word-highlight, use `pysubs2` to split SRT into 2–4 word groups:
```bash
python3 -c "
import pysubs2
subs = pysubs2.load('captions.srt')
# pysubs2 is free: pip install pysubs2
for line in subs:
words = line.text.split()
# Split into 3-word chunks with even timing
chunk_size = 3
duration = line.end - line.start
chunks = [words[i:i+chunk_size] for i in range(0, len(words), chunk_size)]
for i, chunk in enumerate(chunks):
t0 = line.start + (duration * i // len(chunks))
t1 = line.start + (duration * (i+1) // len(chunks))
print(f'{pysubs2.time.ms_to_str(t0)} --> {pysubs2.time.ms_to_str(t1)}')
print(' '.join(chunk))
"
```
### 11. Duck music under voiceover
```bash
# ponytail: volume=0.3 ducks music to ~10dB below VO; amix merges them
ffmpeg -i voiceover.wav -i music.mp3 \
-filter_complex "[1:a]volume=0.3[music];[0:a][music]amix=inputs=2:duration=first:dropout_transition=2[out]" \
-map "[out]" -c:a aac -b:a 192k -ar 48000 \
mixed_audio.aac
```
Pro-tip: For dynamic ducking (music dips only when VO is speaking), use FFmpeg's `sidechaincompress`:
```bash
ffmpeg -i voiceover.wav -i music.mp3 \
-filter_complex "[0:a]asplit=2[vo][sc];[1:a][sc]sidechaincompress=threshold=0.02:ratio=6:attack=200:release=1000[ducked];[vo][ducked]amix=inputs=2:duration=first[out]" \
-map "[out]" -c:a aac -b:a 192k -ar 48000 \
mixed_dynamic.aac
```
### 20. Speed ramp (setup fast, payoff slow)
```bash
# 1.5× speed on setup (0-10s), normal speed on payoff (10s-end)
ffmpeg -i input.mp4 \
-filter_complex "[0:v]trim=0:10,setpts=PTS/1.5[fast];[0:v]trim=10,setpts=PTS-STARTPTS[slow];[fast][slow]concat=n=2:v=1:a=0[v];[0:a]atrim=0:10,atempo=1.5[afast];[0:a]atrim=10,asetpts=PTS-STARTPTS[aslow];[afast][aslow]concat=n=2:v=0:a=1[a]" \
-map "[v]" -map "[a]" -c:v libx264 -crf 18 -c:a aac -ar 48000 \
speed_ramped.mp4
```
---
## Pro-Tips by Template
### U1 — Screen → 9:16 Short-Form
1. **Always probe before grading.** If source is already 1080×1920, skip reframe.
2. **Hook must work on mute.** Test by playing first 3s with volume at zero — if message is unclear, your captions/visuals failed.
3. **Count-up numbers > static pop.** For Dose Calculator results, animate 0→final in 0.5–0.8s with a soft pop SFX. Never just flash the number.
4. **Two variants minimum.** Always cut an ultra-tight (12–22s) AND a standard (25–40s). Different platforms reward different lengths.
5. **Zoom target = the number, not the full screen.** Ken Burns should drift toward the result/dose/value on screen.
### U2 — Screen → 16:9 Long + Feed
1. **Build 9:16 first, then expand.** Never start with long-form — you'll drift the grade. Short is the locked reference.
2. **Kinetic captions only in the hook.** After the first 5–12s, switch to steady full-clause subtitles. Constant kinetic text fatigues viewers on 3+ minute videos.
3. **Chapters are mandatory for YouTube.** Mark: Problem / Solution / Proof / How it works / CTA.
4. **Grid crop test for 4:5.** The key content must sit inside the central 1080×1080 band (y:135–1215) because Instagram crops to square on the profile grid.
5. **End-screen zone.** Keep the last 5–20s clear in the central 90% for YouTube end-screen cards.
### U3 — General Enhance
1. **Name the tone in one word.** If you need three effects to describe your look, simplify. "Clinical." "Warm." "Gritty." One word.
2. **Script density = ~1 idea per 15s.** Don't cram multiple claims into one breath.
3. **Visual change every 7–10s minimum** for feed content (not just when the script changes — independently).
4. **Effects on app UI are poison.** Never stack grain + light-leak + blur + chromatic aberration on clinical numeric screens. Use `app-tech` kit = clean high-key, zero grain on numbers.
5. **Speed ramp recipe:** 1.5–2× on setup/context, normal or slight slow on payoff/result reveal
6. **Promedic pack is conditional.** Detect Dose / Female / Coach / Dentist ProMedic first. If not Promedic → skip brand table, per-app zoom tiers, app CTAs, and platform picks; use general KIT+PACE only. If Promedic → force `app-tech`, inject brand table, enforce per-app zoom ceilings (hook included), format safe zones, short-form-first multi-export, save-reason CTAs, and app platform emphasis. Report `promedic_pack=applied|skipped`.
7. **When Promedic: identity = pacing, not only color.** Coach must feel faster (interrupts ~1.8–2.8s, wider zoom). Dose/Dentist stay precise. Female warmer/honest — not clinical-cold. Color alone does not brand the family.
### U4 — Platform-Specific
1. **Same grade, different pacing.** Never re-grade for a platform. Only change: crop, caption density, interrupts cadence, loudness, CTA language.
2. **LinkedIn is a different animal.** Skip zoom-punches for Dose/Dentist. Professional CTA. Trust > virality tricks. 16:9 or 1:1 preferred.
3. **TikTok vs Reels:** Almost identical pipeline, but TikTok rewards slightly louder (-11 LUFS vs -14) and faster hook pressure (1.0–1.3s intent vs ~2s for Reels).
4. **If master can't crop cleanly for a format, say so.** Mark INCONCLUSIVE and request a re-record. Don't force a broken crop.
### U5 — Viral Pipeline + Final Gate
1. **Step 1 (Hook) is highest ROI.** Spend 80% of your optimization time on the first 3 seconds.
2. **Loop engineering:** Match the last spoken word/visual fragment to flow back into the opening. Users rewatching = algorithm signal.
3. **QA is three-state.** PASS / FAIL / INCONCLUSIVE. "I think it's fine" = INCONCLUSIVE = not done.
4. **Max 3 re-render attempts.** If you can't pass QA in 3 tries, the input needs to change, not the render settings.
### U6 — Master Orchestrator
1. **Use U6 when you have raw material and want everything.** It chains A→J (capture → short → enhance → viral → long → feed → platform → SEO → app guardrails → final gate).
2. **Stage checkpoints.** After each stage (B, C, D...), verify the intermediate file before proceeding. Don't discover a grade problem at stage J.
3. **App guardrails are STOP conditions.** If any common mistake for the app appears in your plan or render → FAIL immediately. Don't finish and then check.
---
## Common Mistakes (from editor.addict.best §8)
### All Apps
- ❌ Starting with logo / greeting / slow fade → always cold-open
- ❌ Dead air longer than interrupt budget
- ❌ Captions outside safe zone
- ❌ Wrong safe-zone numbers for wrong format (e.g., using 9:16 zones on 16:9)
- ❌ SFX louder than voiceover
- ❌ Missing `-framerate 30` on image inputs
- ❌ Missing `apad` + `-shortest` when muxing audio
- ❌ Missing `-ar 48000` on final audio
- ❌ Claiming "done" without QA PASS
### Per-App Traps
| App | Never do this |
|:---|:---|
| Dose Calculator | Invent/hallucinate medical numbers. Use energetic meme grade. Exceed 1.15× zoom. |
| Female ProMedic | Use childish pink (it's rose-gold/blush). Mix Coach energy/pacing. |
| Coach ProMedic | Use clinical restraint — Coach is the highest-energy app. Forget readability on form cues. |
| Dentist Pro | Use teal identical to Dose blue (Dentist = teal/cyan, Dose = clinical blue). Over-punch on short-form. |
---
## Quick Shell One-Liners
```bash
# Check if video is HDR
ffprobe -v quiet -select_streams v:0 -show_entries stream=color_transfer -of csv=p=0 input.mp4
# If output is "smpte2084" or "arib-std-b67" → needs HDR→SDR
# Verify A/V sync drift
ffprobe -v quiet -show_entries stream=start_time -of csv=p=0 input.mp4
# Both streams should start at ~0.000000
# Check final loudness (post-loudnorm verification)
ffmpeg -i final.mp4 -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | tail -20
# Batch probe all outputs
for f in "$OUT_DIR"/*.mp4; do
echo "=== $f ==="
ffprobe -v quiet -show_entries stream=width,height,r_frame_rate,codec_name -show_entries format=duration,size -of flat "$f"
done
# Verify no watermark (check for alpha/overlay in bottom-right)
ffmpeg -ss 1 -i input.mp4 -frames:v 1 -vf "crop=200:50:iw-200:ih-50" check_watermark.png
# Quick safe-zone overlay for 9:16 (visual check)
ffmpeg -i short.mp4 -vf "drawbox=x=60:y=250:w=870:h=1200:color=red@0.3:t=2" -t 5 safezone_check.mp4
```
---
## Combining Templates — Real Examples
### Example 1: Dose Calculator → TikTok + Reels
```
1. Fill variables: APP_NAME="Dose Calculator" ZOOM_MAX="1.15" WB="5900" ...
2. Run U1 (Screen → 9:16):
- Archive raw → HDR check → crop chrome → grade (clean high-key) →
Ken Burns on dose result → safe zone 1080×1920 →
kinetic captions → count-up numbers → audio normalize →
export short (12-22s) + standard (25-40s)
3. Run U3 (Enhance):
- KIT=app-tech PACE=balanced
- Hook check → dead air cut → caption coverage check → loop attempt
4. Run U5 gate section:
- QA all outputs → verify resolution, faceless, safe zone, zoom ≤ 1.15×
5. Run U4 SEO section:
- Title: "Most clinicians miss this interaction — live dose fix"
- Hashtags: #dosecalculator #clinicaltools #medicalapp
- Save CTA: "Save this clinical reference"
```
### Example 2: Coach ProMedic → YouTube Long + IG Feed
```
1. Fill variables: APP_NAME="Coach ProMedic" ZOOM_MAX="1.22" WB="5700" ...
2. Run U1 first (short master as grade reference)
3. Run U2 (Screen → 16:9 Long + Feed):
- Expand from short master → 1920×1080 → chapters →
kinetic hook only, then steady subtitles →
interrupts every 6-10s → export long
- Feed: re-center UI → 1080×1350 (4:5) + 1080×1080 (1:1)
4. Run U3 (Enhance) on long master
5. Run U5 (Final Gate) on all outputs
6. Run U4 SEO for YouTube:
- Chapters: 0:00 Problem | 0:45 Solution | 1:30 Proof | 2:15 How | 3:00 CTA
- Description first 150 chars = search intent
```
### Example 3: Full Production — U6 One-Shot
```
1. Fill variables + set JOBS="short_916,long_169,feed_45,feed_11,platform_pack"
2. U6 runs stages A→J automatically:
A. Archive + HDR→SDR + chrome crop
B. Short 9:16 master
C. Enhance pass (retention ROI)
D. Viral pipeline (hook→loop→variants)
E. Long 16:9 from short
F. Feed 4:5 + 1:1
G. Platform pack (tiktok, reels, yt_shorts, yt_long, ig_feed_45, linkedin)
H. SEO publish package per variant
I. App guardrails check
J. Final gate — all_pass required
3. Output: qa_report.md in {OUT_DIR}/reports/
```
---
## Six Deadly Sins (memorize these)
1. **VFR trap** — always `-framerate 30` on image inputs
2. **A/V drift** — always `apad` + `-shortest` when muxing, always `-ar 48000`
3. **Context decay** — save state checkpoints after every stage
4. **False positive "done"** — only QA PASS counts (INCONCLUSIVE = not done)
5. **Blind acceptance** — visually verify frames at 25/50/75% duration
6. **Face leak** — faceless absolute on all brand content, always check generated assets
---
## Safe Zone Quick Reference
| Format | Canvas | Safe area for text/captions | Grid-crop safe |
|:---|:---|:---|:---|
| 9:16 short | 1080×1920 | x: 60–930, y: 250–1450 | N/A |
| 16:9 long | 1920×1080 | x: 120–1800, y: 70–1010 | N/A |
| 4:5 feed | 1080×1350 | Central 1080×1080 (y: 135–1215) | Square center |
| 1:1 feed | 1080×1080 | Central ~90% | Full frame |
| Stories | 1080×1920 | Same as 9:16 but stricter top/bottom | N/A |
---
## Pacing Cheat Sheet
| Preset | Silence cutoff | Interrupt cadence | Best for |
|:---|:---|:---|:---|
| `hyper` | 0.40 s | 2.0–2.6 s | TikTok, Reels, Coach short-form |
| `balanced` | 0.55 s | 2.8–3.8 s | General short-form, Dose/Dentist |
| `story` | 0.75 s | 4.0–5.5 s | Long-form, tutorials, Female storytime |
---
## Free Tools Stack (zero paid dependencies)
Every command in this file uses free, open-source, locally-run tools. No paid API keys needed (your AI agent API is the only external dependency).
| Tool | What it does | Install | Cost |
|:---|:---|:---|:---|
| **FFmpeg** | All video/audio processing, export, grade, crop, mux | `brew install ffmpeg` (mac) / `apt install ffmpeg` (linux) | Free |
| **ffprobe** | Media analysis, duration, resolution, codec detection | Included with FFmpeg | Free |
| **Whisper** | Speech → text with word timestamps (captions) | `pip install openai-whisper` (runs locally, no API key) | Free |
| **pysubs2** | SRT/ASS caption manipulation, chunking, timing | `pip install pysubs2` | Free |
| **ImageMagick** | Image resize, overlay, thumbnail generation | `brew install imagemagick` / `apt install imagemagick` | Free |
| **bc** | Math in shell (duration calculations) | Pre-installed on mac/linux | Free |
| **jq** | JSON parsing (ffprobe output, Whisper JSON) | `brew install jq` / `apt install jq` | Free |
| **Python 3** | Scripting for batch ops, caption splitting | Pre-installed | Free |
**Not used, not needed:** No Adobe, no CapCut API, no RunwayML, no Eleven Labs, no paid cloud vision. The AI agent (your existing API) handles creative decisions; these tools handle execution.
---
## How to Merge This .md with editor.addict.best HTML
The goal: the HTML app has the 6 unified templates (the **what**). This .md has the commands and pro-tips (the **how**). Together they form one unified system. Here's how to combine them correctly.
### Method 1: AI Agent reads both files (simplest — recommended)
Give your AI agent both references in the system prompt or context:
```
You have two reference documents:
1. https://editor.addict.best — the master HTML app with 6 unified templates,
conflict resolution laws, brand table, and full template text.
Sections: #s1–#s9, #six-templates (u1–u6), #brand, #master
2. editor-pro-tips-and-commands.md — FFmpeg commands, pro-tips per template,
combination recipes, free tool stack, QA one-liners.
Workflow:
- Pick template from the HTML (e.g. copy U1 from #u1-body)
- Fill {VARIABLES} using the brand table from HTML #brand
- Execute using FFmpeg commands from the .md
- QA using the shell one-liners from the .md
- SEO package using the .md combination examples
```
Pro-tip: The HTML has a search bar (press `/`) — tell the agent to use section IDs (`#s1`, `#u3`, `#brand`) to locate content fast.
### Method 2: Embed .md as a linked companion in the HTML
Add a single link in the HTML's nav or site-inventory section pointing to this file:
```html
<!-- Add to editor.addict.best nav section -->
<a href="/editor-pro-tips-and-commands.md">📋 Pro-Tips & Commands</a>
```
The .md is already served from the same web root at:
`https://editor.addict.best/editor-pro-tips-and-commands.md`
So the agent can fetch either file from the same domain. No merge needed — the HTML is the template source, the .md is the execution guide.
### Method 3: Section-to-section cross-reference
When chaining templates, map HTML sections to .md sections:
| Step | Read from HTML | Execute with .md |
|:---|:---|:---|
| Pick template | `#u1-body` through `#u6-body` | — |
| Fill brand vars | `#brand` table | "Template Variables" block |
| Grade | Template's PHASE 2 step 1 | Recipe #5 (brand grade commands) |
| Motion / Ken Burns | Template's PHASE 2 step 2 | Recipe #6 (Ken Burns) or #7 (slideshow) |
| Captions | Template's PHASE 2 step 4 | Recipe #17 (Whisper) + #18 (burn-in) |
| Audio mux | Template's PHASE 2 step 6 | Recipe #9 (mux) + #10 (loudnorm) + #11 (duck) |
| Export | Template's PHASE 2 step 8 | Recipe #14 (short) or #15 (long) or #16 (feed) |
| QA | Template's PHASE 3 checklist | "Shell One-Liners" + Recipe #13 (frame extract) |
| SEO | Template's SEO section | "Combining Templates" examples |
### Method 4: Agent self-check loop
After any render, the agent should run this verification sequence (all free, all local):
```bash
# 1. File exists and has video stream?
ffprobe -v quiet -show_entries stream=codec_type -of csv=p=0 "$OUTPUT" | grep -q video && echo "PASS: has video" || echo "FAIL: no video stream"
# 2. Resolution correct?
RES=$(ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "Resolution: $RES" # Compare to expected canvas
# 3. Duration > 0?
DUR=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 "$OUTPUT")
echo "Duration: ${DUR}s" # Must be > 0
# 4. FPS = 30?
FPS=$(ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "FPS: $FPS" # Should be 30/1
# 5. Audio sample rate = 48000?
SR=$(ffprobe -v quiet -show_entries stream=sample_rate -of csv=p=0 -select_streams a:0 "$OUTPUT")
echo "Sample rate: $SR" # Must be 48000
# 6. Visual QA frames
for pct in 25 50 75; do
T=$(echo "$DUR * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i "$OUTPUT" -frames:v 1 "qa_${pct}.png" -y 2>/dev/null
done
echo "QA frames saved — visually inspect for black/corrupt/face-leak"
# 7. Loudness check
ffmpeg -i "$OUTPUT" -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | grep input_i
```
All 7 checks use free tools. The AI agent reads the results and decides PASS / FAIL / INCONCLUSIVE per the HTML template's QA checklist.
---
*This .md supports editor.addict.best. The HTML app owns the templates — this file owns the commands, pro-tips, and merge logic. Both are served from the same domain. Together they are the complete system.*
### 10. Loudnorm (EBU R128 — all platforms)
```bash
# Standard: -14 LUFS (YouTube, IG, FB, LinkedIn)
ffmpeg -i input.mp4 \
-af "loudnorm=I=-14:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized.mp4
# TikTok loud-feed variant: -11 to -12 LUFS
ffmpeg -i input.mp4 \
-af "loudnorm=I=-11:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized_loud.mp4
```
### 13. Extract frames for QA check
```bash
# Grab frames at 25%, 50%, 75% of duration for visual QA
DURATION=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4)
for pct in 25 50 75; do
T=$(echo "$DURATION * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i input.mp4 -frames:v 1 "qa_frame_${pct}pct.png" -y
done
```
# ===== APEX POWER TIPS (prepended for hybrid copy-all) ===== ## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order) # Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional. ### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA) Run as a mental loop even when not installing Apex modules: 1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size. 2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty. 3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY. 4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort. 5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality. Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay. ### B) Tiered QA / false-positive defense (never claim done on hope) Tier-0 (deterministic, always first — free, no API): - File exists, size > trivial, has video stream, duration > 0 - Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080) - FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present Three-state law (non-negotiable): - PASS = measured and met - FAIL = measured and failed → fix root cause → re-render → re-check - INCONCLUSIVE = could not measure → NOT PASS (blocks "done") final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS. Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results. Self-heal bound: max 3 fix loops with written evidence (what failed, what changed). ### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing) Vision is enhancement, never a hard dependency: - Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only - If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline. VLM / judge protocol (when agent can see frames): - Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts - FAILED or face-leak on faceless series = FAIL even if pixels "look sharp" Theme seeds (memory of what works): - When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit) - Do not auto-reuse a seed that conflicts with brand §1 ceilings Brain / multi-pass habit (orchestrator-lite, no extra processes): - Pass 1: structure (hook, beats, CTA) - Pass 2: retention (interrupts, captions, loop) - Pass 3: verify (Tier-0 + frames + mute) Never skip Pass 3. # END APEX POWER TIPS # ===== CODE FOR UNIFIED TEMPLATE U4 ===== ### U4 — Platform-Specific 1. **Same grade, different pacing.** Never re-grade for a platform. Only change: crop, caption density, interrupts cadence, loudness, CTA language. 2. **LinkedIn is a different animal.** Skip zoom-punches for Dose/Dentist. Professional CTA. Trust > virality tricks. 16:9 or 1:1 preferred. 3. **TikTok vs Reels:** Almost identical pipeline, but TikTok rewards slightly louder (-11 LUFS vs -14) and faster hook pressure (1.0–1.3s intent vs ~2s for Reels). 4. **If master can't crop cleanly for a format, say so.** Mark INCONCLUSIVE and request a re-record. Don't force a broken crop. ### 1. Probe any file first (always start here) ```bash ffprobe -v quiet -print_format json -show_format -show_streams input.mp4 ``` Pro-tip: Pipe to `jq` for quick checks: ```bash # Duration only ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4 # Resolution ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 input.mp4 # FPS ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 input.mp4 ``` ### 16. Re-crop for feed formats (U4 output) ```bash # 4:5 feed (1080x1350) — re-center, don't blind-crop ffmpeg -i master.mp4 \ -vf "scale=1080:1350:force_original_aspect_ratio=decrease,pad=1080:1350:(ow-iw)/2:(oh-ih)/2:black" \ -c:v libx264 -crf 18 -c:a copy \ "$OUT_DIR/feed_45.mp4" # 1:1 feed (1080x1080) ffmpeg -i master.mp4 \ -vf "scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:black" \ -c:v libx264 -crf 18 -c:a copy \ "$OUT_DIR/feed_11.mp4" ``` ### 14. Final export — short-form (U1/U5 output) ```bash ffmpeg -i processed.mp4 \ -c:v libx264 -profile:v high -level 4.1 \ -b:v 15M -maxrate 20M -bufsize 30M \ -r 30 -g 60 \ -c:a aac -b:a 192k -ar 48000 \ -movflags +faststart \ -vf "scale=1080:1920" \ "$OUT_DIR/short_916.mp4" ``` ### 15. Final export — long-form (U2 output) ```bash ffmpeg -i processed.mp4 \ -c:v libx264 -profile:v high -level 4.1 \ -b:v 20M -maxrate 25M -bufsize 40M \ -r 30 -g 60 \ -c:a aac -b:a 192k -ar 48000 \ -movflags +faststart \ -vf "scale=1920:1080" \ "$OUT_DIR/long_169.mp4" ``` ## Quick Shell One-Liners ```bash # Check if video is HDR ffprobe -v quiet -select_streams v:0 -show_entries stream=color_transfer -of csv=p=0 input.mp4 # If output is "smpte2084" or "arib-std-b67" → needs HDR→SDR # Verify A/V sync drift ffprobe -v quiet -show_entries stream=start_time -of csv=p=0 input.mp4 # Both streams should start at ~0.000000 # Check final loudness (post-loudnorm verification) ffmpeg -i final.mp4 -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | tail -20 # Batch probe all outputs for f in "$OUT_DIR"/*.mp4; do echo "=== $f ===" ffprobe -v quiet -show_entries stream=width,height,r_frame_rate,codec_name -show_entries format=duration,size -of flat "$f" done # Verify no watermark (check for alpha/overlay in bottom-right) ffmpeg -ss 1 -i input.mp4 -frames:v 1 -vf "crop=200:50:iw-200:ih-50" check_watermark.png # Quick safe-zone overlay for 9:16 (visual check) ffmpeg -i short.mp4 -vf "drawbox=x=60:y=250:w=870:h=1200:color=red@0.3:t=2" -t 5 safezone_check.mp4 ``` ---
# ===== APEX POWER TIPS (prepended for hybrid copy-all) =====
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
# ===== CODE FOR UNIFIED TEMPLATE U5 =====
### U5 — Viral Pipeline + Final Gate
1. **Step 1 (Hook) is highest ROI.** Spend 80% of your optimization time on the first 3 seconds.
2. **Loop engineering:** Match the last spoken word/visual fragment to flow back into the opening. Users rewatching = algorithm signal.
3. **QA is three-state.** PASS / FAIL / INCONCLUSIVE. "I think it's fine" = INCONCLUSIVE = not done.
4. **Max 3 re-render attempts.** If you can't pass QA in 3 tries, the input needs to change, not the render settings.
### 12. Silence detection (for dead-air cuts)
```bash
# Find silences longer than 0.4s at -30dB threshold (hyper pace)
ffmpeg -i input.mp4 -af "silencedetect=noise=-30dB:d=0.4" -f null - 2>&1 | grep "silence_"
# For balanced pace, use d=0.55
# For story pace, use d=0.75
```
### 14. Final export — short-form (U1/U5 output)
```bash
ffmpeg -i processed.mp4 \
-c:v libx264 -profile:v high -level 4.1 \
-b:v 15M -maxrate 20M -bufsize 30M \
-r 30 -g 60 \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
-vf "scale=1080:1920" \
"$OUT_DIR/short_916.mp4"
```
### 13. Extract frames for QA check
```bash
# Grab frames at 25%, 50%, 75% of duration for visual QA
DURATION=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4)
for pct in 25 50 75; do
T=$(echo "$DURATION * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i input.mp4 -frames:v 1 "qa_frame_${pct}pct.png" -y
done
```
### 10. Loudnorm (EBU R128 — all platforms)
```bash
# Standard: -14 LUFS (YouTube, IG, FB, LinkedIn)
ffmpeg -i input.mp4 \
-af "loudnorm=I=-14:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized.mp4
# TikTok loud-feed variant: -11 to -12 LUFS
ffmpeg -i input.mp4 \
-af "loudnorm=I=-11:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized_loud.mp4
```
## Quick Shell One-Liners
```bash
# Check if video is HDR
ffprobe -v quiet -select_streams v:0 -show_entries stream=color_transfer -of csv=p=0 input.mp4
# If output is "smpte2084" or "arib-std-b67" → needs HDR→SDR
# Verify A/V sync drift
ffprobe -v quiet -show_entries stream=start_time -of csv=p=0 input.mp4
# Both streams should start at ~0.000000
# Check final loudness (post-loudnorm verification)
ffmpeg -i final.mp4 -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | tail -20
# Batch probe all outputs
for f in "$OUT_DIR"/*.mp4; do
echo "=== $f ==="
ffprobe -v quiet -show_entries stream=width,height,r_frame_rate,codec_name -show_entries format=duration,size -of flat "$f"
done
# Verify no watermark (check for alpha/overlay in bottom-right)
ffmpeg -ss 1 -i input.mp4 -frames:v 1 -vf "crop=200:50:iw-200:ih-50" check_watermark.png
# Quick safe-zone overlay for 9:16 (visual check)
ffmpeg -i short.mp4 -vf "drawbox=x=60:y=250:w=870:h=1200:color=red@0.3:t=2" -t 5 safezone_check.mp4
```
---
### Method 4: Agent self-check loop
After any render, the agent should run this verification sequence (all free, all local):
```bash
# 1. File exists and has video stream?
ffprobe -v quiet -show_entries stream=codec_type -of csv=p=0 "$OUTPUT" | grep -q video && echo "PASS: has video" || echo "FAIL: no video stream"
# 2. Resolution correct?
RES=$(ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "Resolution: $RES" # Compare to expected canvas
# 3. Duration > 0?
DUR=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 "$OUTPUT")
echo "Duration: ${DUR}s" # Must be > 0
# 4. FPS = 30?
FPS=$(ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "FPS: $FPS" # Should be 30/1
# 5. Audio sample rate = 48000?
SR=$(ffprobe -v quiet -show_entries stream=sample_rate -of csv=p=0 -select_streams a:0 "$OUTPUT")
echo "Sample rate: $SR" # Must be 48000
# 6. Visual QA frames
for pct in 25 50 75; do
T=$(echo "$DUR * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i "$OUTPUT" -frames:v 1 "qa_${pct}.png" -y 2>/dev/null
done
echo "QA frames saved — visually inspect for black/corrupt/face-leak"
# 7. Loudness check
ffmpeg -i "$OUTPUT" -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | grep input_i
```
All 7 checks use free tools. The AI agent reads the results and decides PASS / FAIL / INCONCLUSIVE per the HTML template's QA checklist.
# ===== APEX POWER TIPS (prepended for hybrid copy-all) =====
## APEX POWER TIPS (from Qwen-expert-Ai-editor.md — additive; does NOT override SHARED LAWS, brand §1, or retention ROI order)
# Compatible with every U1–U6 job. Prefer free/local tools; cloud vision optional.
### A) Cognitive pipeline depth (Perceive → Interpret → Compose → Realize → Critique/QA)
Run as a mental loop even when not installing Apex modules:
1. PERCEIVE — Before editing: probe media (duration, res, fps, HDR?, audio streams). For stills: brightness/contrast/sharpness/faces if available. Cache what you learned (notes or JSON). Never invent duration/size.
2. INTERPRET — Match assets to intent beats (ad: 5 beats OR narrative: 7). Ask: which image/screen is Hook / Problem / Proof / How / CTA? Meaning over pretty.
3. COMPOSE — Choose motion/transition per beat (Ken Burns target, hard cut default, zoom only within brand ceiling). Every effect needs a WHY.
4. REALIZE — Render with hard invariants: image inputs -framerate 30; mux apad + -shortest; final audio -ar 48000; HDR→SDR before grade; numbered outputs 01_… for stable sort.
5. CRITIQUE / QA — Extract frames at ~25/50/75% of duration; mute-test hook; only then mark done. Max 3 re-render attempts with evidence, then stop and escalate input quality.
Checkpoint: after each of the five stages, write one line of state (path + decision). Prevents context decay.
### B) Tiered QA / false-positive defense (never claim done on hope)
Tier-0 (deterministic, always first — free, no API):
- File exists, size > trivial, has video stream, duration > 0
- Resolution matches target canvas (1080x1920 / 1920x1080 / 1080x1350 / 1080x1080)
- FPS ≈ 30 (or intentional 60); no watermark; A/V start_time ~0 if both present
Three-state law (non-negotiable):
- PASS = measured and met
- FAIL = measured and failed → fix root cause → re-render → re-check
- INCONCLUSIVE = could not measure → NOT PASS (blocks "done")
final_gate style: all critical checks PASS before shipping. Never promote INCONCLUSIVE to PASS.
Anti-mutation: do not weaken checks, skip QA, hardcode PASS, or invent green results.
Self-heal bound: max 3 fix loops with written evidence (what failed, what changed).
### C) Vision / VLM / theme seeds / brain (lightweight, free-first — no crash if missing)
Vision is enhancement, never a hard dependency:
- Tier free-first: (1) local OpenCV/metrics if available (2) free cloud caption if key exists (3) else agent native eyes on QA frames only
- If ALL vision fails → continue with ffprobe + mute test + frame extract. Do NOT block pipeline.
VLM / judge protocol (when agent can see frames):
- Score FAILED / PROPER / EXCELLENT on meaning, readability of UI/numbers, face-leak, grade drift across cuts
- FAILED or face-leak on faceless series = FAIL even if pixels "look sharp"
Theme seeds (memory of what works):
- When a cut is EXCELLENT or strong PASS, save one line: app + kit + hook style + zoom used + platform → reuse next time (theme_seeds habit)
- Do not auto-reuse a seed that conflicts with brand §1 ceilings
Brain / multi-pass habit (orchestrator-lite, no extra processes):
- Pass 1: structure (hook, beats, CTA)
- Pass 2: retention (interrupts, captions, loop)
- Pass 3: verify (Tier-0 + frames + mute)
Never skip Pass 3.
# END APEX POWER TIPS
# ===== CODE FOR UNIFIED TEMPLATE U6 =====
### U6 — Master Orchestrator
1. **Use U6 when you have raw material and want everything.** It chains A→J (capture → short → enhance → viral → long → feed → platform → SEO → app guardrails → final gate).
2. **Stage checkpoints.** After each stage (B, C, D...), verify the intermediate file before proceeding. Don't discover a grade problem at stage J.
3. **App guardrails are STOP conditions.** If any common mistake for the app appears in your plan or render → FAIL immediately. Don't finish and then check.
---
## Common Mistakes (from editor.addict.best §8)
### 1. Probe any file first (always start here)
```bash
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
```
Pro-tip: Pipe to `jq` for quick checks:
```bash
# Duration only
ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4
# Resolution
ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 input.mp4
# FPS
ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 input.mp4
```
### 2. Archive raw (always before any edit)
```bash
mkdir -p "$OUT_DIR/raw_archive"
cp "$RAW_PATH" "$OUT_DIR/raw_archive/"
```
### 3. HDR → SDR (run if ffprobe shows bt2020/hlg/pq)
```bash
ffmpeg -i "$RAW_PATH" \
-vf "zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709:t=bt709:m=bt709,tonemap=hable:desat=0,zscale=t=bt709,format=yuv420p" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
"$OUT_DIR/sdr.mp4"
```
### 4. Crop browser chrome / dock
```bash
# Pro-tip: measure chrome height with ffprobe frame grab first
# Top 80px chrome + bottom 80px dock = crop 160px total
ffmpeg -i raw.mp4 \
-vf "crop=in_w:in_h-160:0:80" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
cropped.mp4
```
### 5. Brand grade (Clean High-Key — Dose/Dentist default)
```bash
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.03:contrast=1.05:saturation=0.92,curves=m='0/0.03 0.5/0.52 1/0.96'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded.mp4
```
Pro-tip: For **Female ProMedic** (warm rose), shift saturation up and add warmth:
```bash
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.03:contrast=1.04:saturation=0.97,colorbalance=rs=0.04:gs=-0.01:bs=-0.03,curves=m='0/0.04 0.5/0.53 1/0.97'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded_female.mp4
```
Pro-tip: For **Coach ProMedic** (neutral-warm, slightly saturated):
```bash
ffmpeg -i sdr.mp4 \
-vf "eq=brightness=0.04:contrast=1.06:saturation=1.03,curves=m='0/0.02 0.5/0.53 1/0.98'" \
-c:v libx264 -preset slow -crf 18 -c:a copy \
graded_coach.mp4
```
### 6. Ken Burns from still image → clip
```bash
# ponytail: ALWAYS -framerate 30 on image inputs (VFR trap kills sync)
ffmpeg -framerate 30 -loop 1 -t 4 -i still.png \
-vf "scale=3840:2160,zoompan=z='min(zoom+0.001,1.15)':d=120:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=1080x1920" \
-c:v libx264 -t 4 -pix_fmt yuv420p \
ken_burns.mp4
```
Pro-tip: Change `1.15` to your app's `{ZOOM_MAX}`. For Coach use `1.22`, for Dose/Dentist use `1.15`.
### 7. Image folder → slideshow video
```bash
# ponytail: -framerate 30 is mandatory, not optional
ffmpeg -framerate 30 -pattern_type glob -i 'images/*.png' \
-vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black,zoompan=z='min(zoom+0.0008,1.12)':d=90:s=1080x1920" \
-c:v libx264 -pix_fmt yuv420p -r 30 \
slideshow.mp4
```
### 8. 9:16 blurred-fill from landscape source
```bash
ffmpeg -i landscape.mp4 \
-filter_complex "[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,boxblur=20:5[bg];[0:v]scale=1080:-2:force_original_aspect_ratio=decrease[fg];[bg][fg]overlay=(W-w)/2:(H-h)/2" \
-c:v libx264 -preset slow -crf 18 \
vertical_blurred.mp4
```
### 9. Mux voiceover — no A/V drift
```bash
# ponytail: apad + -shortest is the A/V drift killer. Never skip both.
ffmpeg -i video.mp4 -i voiceover.wav \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
-af "apad" -shortest \
muxed.mp4
```
### 10. Loudnorm (EBU R128 — all platforms)
```bash
# Standard: -14 LUFS (YouTube, IG, FB, LinkedIn)
ffmpeg -i input.mp4 \
-af "loudnorm=I=-14:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized.mp4
# TikTok loud-feed variant: -11 to -12 LUFS
ffmpeg -i input.mp4 \
-af "loudnorm=I=-11:LRA=11:TP=-1" \
-c:v copy -c:a aac -b:a 192k -ar 48000 \
normalized_loud.mp4
```
### 11. Duck music under voiceover
```bash
# ponytail: volume=0.3 ducks music to ~10dB below VO; amix merges them
ffmpeg -i voiceover.wav -i music.mp3 \
-filter_complex "[1:a]volume=0.3[music];[0:a][music]amix=inputs=2:duration=first:dropout_transition=2[out]" \
-map "[out]" -c:a aac -b:a 192k -ar 48000 \
mixed_audio.aac
```
Pro-tip: For dynamic ducking (music dips only when VO is speaking), use FFmpeg's `sidechaincompress`:
```bash
ffmpeg -i voiceover.wav -i music.mp3 \
-filter_complex "[0:a]asplit=2[vo][sc];[1:a][sc]sidechaincompress=threshold=0.02:ratio=6:attack=200:release=1000[ducked];[vo][ducked]amix=inputs=2:duration=first[out]" \
-map "[out]" -c:a aac -b:a 192k -ar 48000 \
mixed_dynamic.aac
```
### 12. Silence detection (for dead-air cuts)
```bash
# Find silences longer than 0.4s at -30dB threshold (hyper pace)
ffmpeg -i input.mp4 -af "silencedetect=noise=-30dB:d=0.4" -f null - 2>&1 | grep "silence_"
# For balanced pace, use d=0.55
# For story pace, use d=0.75
```
### 13. Extract frames for QA check
```bash
# Grab frames at 25%, 50%, 75% of duration for visual QA
DURATION=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 input.mp4)
for pct in 25 50 75; do
T=$(echo "$DURATION * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i input.mp4 -frames:v 1 "qa_frame_${pct}pct.png" -y
done
```
### 14. Final export — short-form (U1/U5 output)
```bash
ffmpeg -i processed.mp4 \
-c:v libx264 -profile:v high -level 4.1 \
-b:v 15M -maxrate 20M -bufsize 30M \
-r 30 -g 60 \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
-vf "scale=1080:1920" \
"$OUT_DIR/short_916.mp4"
```
### 15. Final export — long-form (U2 output)
```bash
ffmpeg -i processed.mp4 \
-c:v libx264 -profile:v high -level 4.1 \
-b:v 20M -maxrate 25M -bufsize 40M \
-r 30 -g 60 \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
-vf "scale=1920:1080" \
"$OUT_DIR/long_169.mp4"
```
### 16. Re-crop for feed formats (U4 output)
```bash
# 4:5 feed (1080x1350) — re-center, don't blind-crop
ffmpeg -i master.mp4 \
-vf "scale=1080:1350:force_original_aspect_ratio=decrease,pad=1080:1350:(ow-iw)/2:(oh-ih)/2:black" \
-c:v libx264 -crf 18 -c:a copy \
"$OUT_DIR/feed_45.mp4"
# 1:1 feed (1080x1080)
ffmpeg -i master.mp4 \
-vf "scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:black" \
-c:v libx264 -crf 18 -c:a copy \
"$OUT_DIR/feed_11.mp4"
```
### 17. Whisper transcription (for captions — U3 step 0)
```bash
# ponytail: word-level timestamps are required for kinetic captions
# Whisper is 100% free, local, no API key — runs on CPU or GPU
whisper input.mp4 --model base --language en --output_format json --word_timestamps True --output_dir "$OUT_DIR"
```
Pro-tip: For better accuracy on medical/technical terms, use `--model small` or `--model medium` (still free, just slower).
### 18. Caption burn-in from SRT (free, local)
```bash
# Burn .srt subtitles directly into the video
ffmpeg -i input.mp4 -vf "subtitles=captions.srt:force_style='FontName=Arial,FontSize=22,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,BorderStyle=3,Outline=2'" \
-c:v libx264 -crf 18 -c:a copy \
captioned.mp4
```
Pro-tip: For kinetic-style word-highlight, use `pysubs2` to split SRT into 2–4 word groups:
```bash
python3 -c "
import pysubs2
subs = pysubs2.load('captions.srt')
# pysubs2 is free: pip install pysubs2
for line in subs:
words = line.text.split()
# Split into 3-word chunks with even timing
chunk_size = 3
duration = line.end - line.start
chunks = [words[i:i+chunk_size] for i in range(0, len(words), chunk_size)]
for i, chunk in enumerate(chunks):
t0 = line.start + (duration * i // len(chunks))
t1 = line.start + (duration * (i+1) // len(chunks))
print(f'{pysubs2.time.ms_to_str(t0)} --> {pysubs2.time.ms_to_str(t1)}')
print(' '.join(chunk))
"
```
### 19. Scene/shot detection (free, for interrupt placement)
```bash
# Detect scene changes — useful for finding where to place pattern interrupts
ffmpeg -i input.mp4 -vf "select='gt(scene,0.3)',showinfo" -f null - 2>&1 | grep showinfo
# Adjust 0.3 threshold: lower = more sensitive, higher = fewer cuts
```
### 20. Speed ramp (setup fast, payoff slow)
```bash
# 1.5× speed on setup (0-10s), normal speed on payoff (10s-end)
ffmpeg -i input.mp4 \
-filter_complex "[0:v]trim=0:10,setpts=PTS/1.5[fast];[0:v]trim=10,setpts=PTS-STARTPTS[slow];[fast][slow]concat=n=2:v=1:a=0[v];[0:a]atrim=0:10,atempo=1.5[afast];[0:a]atrim=10,asetpts=PTS-STARTPTS[aslow];[afast][aslow]concat=n=2:v=0:a=1[a]" \
-map "[v]" -map "[a]" -c:v libx264 -crf 18 -c:a aac -ar 48000 \
speed_ramped.mp4
```
---
## Pro-Tips by Template
### U1 — Screen → 9:16 Short-Form
1. **Always probe before grading.** If source is already 1080×1920, skip reframe.
2. **Hook must work on mute.** Test by playing first 3s with volume at zero — if message is unclear, your captions/visuals failed.
3. **Count-up numbers > static pop.** For Dose Calculator results, animate 0→final in 0.5–0.8s with a soft pop SFX. Never just flash the number.
4. **Two variants minimum.** Always cut an ultra-tight (12–22s) AND a standard (25–40s). Different platforms reward different lengths.
5. **Zoom target = the number, not the full screen.** Ken Burns should drift toward the result/dose/value on screen.
### U2 — Screen → 16:9 Long + Feed
1. **Build 9:16 first, then expand.** Never start with long-form — you'll drift the grade. Short is the locked reference.
2. **Kinetic captions only in the hook.** After the first 5–12s, switch to steady full-clause subtitles. Constant kinetic text fatigues viewers on 3+ minute videos.
3. **Chapters are mandatory for YouTube.** Mark: Problem / Solution / Proof / How it works / CTA.
4. **Grid crop test for 4:5.** The key content must sit inside the central 1080×1080 band (y:135–1215) because Instagram crops to square on the profile grid.
5. **End-screen zone.** Keep the last 5–20s clear in the central 90% for YouTube end-screen cards.
### U3 — General Enhance
1. **Name the tone in one word.** If you need three effects to describe your look, simplify. "Clinical." "Warm." "Gritty." One word.
2. **Script density = ~1 idea per 15s.** Don't cram multiple claims into one breath.
3. **Visual change every 7–10s minimum** for feed content (not just when the script changes — independently).
4. **Effects on app UI are poison.** Never stack grain + light-leak + blur + chromatic aberration on clinical numeric screens. Use `app-tech` kit = clean high-key, zero grain on numbers.
5. **Speed ramp recipe:** 1.5–2× on setup/context, normal or slight slow on payoff/result reveal
6. **Promedic pack is conditional.** Detect Dose / Female / Coach / Dentist ProMedic first. If not Promedic → skip brand table, per-app zoom tiers, app CTAs, and platform picks; use general KIT+PACE only. If Promedic → force `app-tech`, inject brand table, enforce per-app zoom ceilings (hook included), format safe zones, short-form-first multi-export, save-reason CTAs, and app platform emphasis. Report `promedic_pack=applied|skipped`.
7. **When Promedic: identity = pacing, not only color.** Coach must feel faster (interrupts ~1.8–2.8s, wider zoom). Dose/Dentist stay precise. Female warmer/honest — not clinical-cold. Color alone does not brand the family.
### U4 — Platform-Specific
1. **Same grade, different pacing.** Never re-grade for a platform. Only change: crop, caption density, interrupts cadence, loudness, CTA language.
2. **LinkedIn is a different animal.** Skip zoom-punches for Dose/Dentist. Professional CTA. Trust > virality tricks. 16:9 or 1:1 preferred.
3. **TikTok vs Reels:** Almost identical pipeline, but TikTok rewards slightly louder (-11 LUFS vs -14) and faster hook pressure (1.0–1.3s intent vs ~2s for Reels).
4. **If master can't crop cleanly for a format, say so.** Mark INCONCLUSIVE and request a re-record. Don't force a broken crop.
### U5 — Viral Pipeline + Final Gate
1. **Step 1 (Hook) is highest ROI.** Spend 80% of your optimization time on the first 3 seconds.
2. **Loop engineering:** Match the last spoken word/visual fragment to flow back into the opening. Users rewatching = algorithm signal.
3. **QA is three-state.** PASS / FAIL / INCONCLUSIVE. "I think it's fine" = INCONCLUSIVE = not done.
4. **Max 3 re-render attempts.** If you can't pass QA in 3 tries, the input needs to change, not the render settings.
### U6 — Master Orchestrator
1. **Use U6 when you have raw material and want everything.** It chains A→J (capture → short → enhance → viral → long → feed → platform → SEO → app guardrails → final gate).
2. **Stage checkpoints.** After each stage (B, C, D...), verify the intermediate file before proceeding. Don't discover a grade problem at stage J.
3. **App guardrails are STOP conditions.** If any common mistake for the app appears in your plan or render → FAIL immediately. Don't finish and then check.
---
## Common Mistakes (from editor.addict.best §8)
### All Apps
- ❌ Starting with logo / greeting / slow fade → always cold-open
- ❌ Dead air longer than interrupt budget
- ❌ Captions outside safe zone
- ❌ Wrong safe-zone numbers for wrong format (e.g., using 9:16 zones on 16:9)
- ❌ SFX louder than voiceover
- ❌ Missing `-framerate 30` on image inputs
- ❌ Missing `apad` + `-shortest` when muxing audio
- ❌ Missing `-ar 48000` on final audio
- ❌ Claiming "done" without QA PASS
### Per-App Traps
| App | Never do this |
|:---|:---|
| Dose Calculator | Invent/hallucinate medical numbers. Use energetic meme grade. Exceed 1.15× zoom. |
| Female ProMedic | Use childish pink (it's rose-gold/blush). Mix Coach energy/pacing. |
| Coach ProMedic | Use clinical restraint — Coach is the highest-energy app. Forget readability on form cues. |
| Dentist Pro | Use teal identical to Dose blue (Dentist = teal/cyan, Dose = clinical blue). Over-punch on short-form. |
---
## Quick Shell One-Liners
```bash
# Check if video is HDR
ffprobe -v quiet -select_streams v:0 -show_entries stream=color_transfer -of csv=p=0 input.mp4
# If output is "smpte2084" or "arib-std-b67" → needs HDR→SDR
# Verify A/V sync drift
ffprobe -v quiet -show_entries stream=start_time -of csv=p=0 input.mp4
# Both streams should start at ~0.000000
# Check final loudness (post-loudnorm verification)
ffmpeg -i final.mp4 -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | tail -20
# Batch probe all outputs
for f in "$OUT_DIR"/*.mp4; do
echo "=== $f ==="
ffprobe -v quiet -show_entries stream=width,height,r_frame_rate,codec_name -show_entries format=duration,size -of flat "$f"
done
# Verify no watermark (check for alpha/overlay in bottom-right)
ffmpeg -ss 1 -i input.mp4 -frames:v 1 -vf "crop=200:50:iw-200:ih-50" check_watermark.png
# Quick safe-zone overlay for 9:16 (visual check)
ffmpeg -i short.mp4 -vf "drawbox=x=60:y=250:w=870:h=1200:color=red@0.3:t=2" -t 5 safezone_check.mp4
```
---
## Combining Templates — Real Examples
### Example 1: Dose Calculator → TikTok + Reels
```
1. Fill variables: APP_NAME="Dose Calculator" ZOOM_MAX="1.15" WB="5900" ...
2. Run U1 (Screen → 9:16):
- Archive raw → HDR check → crop chrome → grade (clean high-key) →
Ken Burns on dose result → safe zone 1080×1920 →
kinetic captions → count-up numbers → audio normalize →
export short (12-22s) + standard (25-40s)
3. Run U3 (Enhance):
- KIT=app-tech PACE=balanced
- Hook check → dead air cut → caption coverage check → loop attempt
4. Run U5 gate section:
- QA all outputs → verify resolution, faceless, safe zone, zoom ≤ 1.15×
5. Run U4 SEO section:
- Title: "Most clinicians miss this interaction — live dose fix"
- Hashtags: #dosecalculator #clinicaltools #medicalapp
- Save CTA: "Save this clinical reference"
```
### Example 2: Coach ProMedic → YouTube Long + IG Feed
```
1. Fill variables: APP_NAME="Coach ProMedic" ZOOM_MAX="1.22" WB="5700" ...
2. Run U1 first (short master as grade reference)
3. Run U2 (Screen → 16:9 Long + Feed):
- Expand from short master → 1920×1080 → chapters →
kinetic hook only, then steady subtitles →
interrupts every 6-10s → export long
- Feed: re-center UI → 1080×1350 (4:5) + 1080×1080 (1:1)
4. Run U3 (Enhance) on long master
5. Run U5 (Final Gate) on all outputs
6. Run U4 SEO for YouTube:
- Chapters: 0:00 Problem | 0:45 Solution | 1:30 Proof | 2:15 How | 3:00 CTA
- Description first 150 chars = search intent
```
### Example 3: Full Production — U6 One-Shot
```
1. Fill variables + set JOBS="short_916,long_169,feed_45,feed_11,platform_pack"
2. U6 runs stages A→J automatically:
A. Archive + HDR→SDR + chrome crop
B. Short 9:16 master
C. Enhance pass (retention ROI)
D. Viral pipeline (hook→loop→variants)
E. Long 16:9 from short
F. Feed 4:5 + 1:1
G. Platform pack (tiktok, reels, yt_shorts, yt_long, ig_feed_45, linkedin)
H. SEO publish package per variant
I. App guardrails check
J. Final gate — all_pass required
3. Output: qa_report.md in {OUT_DIR}/reports/
```
---
## Six Deadly Sins (memorize these)
1. **VFR trap** — always `-framerate 30` on image inputs
2. **A/V drift** — always `apad` + `-shortest` when muxing, always `-ar 48000`
3. **Context decay** — save state checkpoints after every stage
4. **False positive "done"** — only QA PASS counts (INCONCLUSIVE = not done)
5. **Blind acceptance** — visually verify frames at 25/50/75% duration
6. **Face leak** — faceless absolute on all brand content, always check generated assets
---
## Safe Zone Quick Reference
| Format | Canvas | Safe area for text/captions | Grid-crop safe |
|:---|:---|:---|:---|
| 9:16 short | 1080×1920 | x: 60–930, y: 250–1450 | N/A |
| 16:9 long | 1920×1080 | x: 120–1800, y: 70–1010 | N/A |
| 4:5 feed | 1080×1350 | Central 1080×1080 (y: 135–1215) | Square center |
| 1:1 feed | 1080×1080 | Central ~90% | Full frame |
| Stories | 1080×1920 | Same as 9:16 but stricter top/bottom | N/A |
---
## Pacing Cheat Sheet
| Preset | Silence cutoff | Interrupt cadence | Best for |
|:---|:---|:---|:---|
| `hyper` | 0.40 s | 2.0–2.6 s | TikTok, Reels, Coach short-form |
| `balanced` | 0.55 s | 2.8–3.8 s | General short-form, Dose/Dentist |
| `story` | 0.75 s | 4.0–5.5 s | Long-form, tutorials, Female storytime |
---
## Free Tools Stack (zero paid dependencies)
Every command in this file uses free, open-source, locally-run tools. No paid API keys needed (your AI agent API is the only external dependency).
| Tool | What it does | Install | Cost |
|:---|:---|:---|:---|
| **FFmpeg** | All video/audio processing, export, grade, crop, mux | `brew install ffmpeg` (mac) / `apt install ffmpeg` (linux) | Free |
| **ffprobe** | Media analysis, duration, resolution, codec detection | Included with FFmpeg | Free |
| **Whisper** | Speech → text with word timestamps (captions) | `pip install openai-whisper` (runs locally, no API key) | Free |
| **pysubs2** | SRT/ASS caption manipulation, chunking, timing | `pip install pysubs2` | Free |
| **ImageMagick** | Image resize, overlay, thumbnail generation | `brew install imagemagick` / `apt install imagemagick` | Free |
| **bc** | Math in shell (duration calculations) | Pre-installed on mac/linux | Free |
| **jq** | JSON parsing (ffprobe output, Whisper JSON) | `brew install jq` / `apt install jq` | Free |
| **Python 3** | Scripting for batch ops, caption splitting | Pre-installed | Free |
**Not used, not needed:** No Adobe, no CapCut API, no RunwayML, no Eleven Labs, no paid cloud vision. The AI agent (your existing API) handles creative decisions; these tools handle execution.
---
## How to Merge This .md with editor.addict.best HTML
The goal: the HTML app has the 6 unified templates (the **what**). This .md has the commands and pro-tips (the **how**). Together they form one unified system. Here's how to combine them correctly.
### Method 1: AI Agent reads both files (simplest — recommended)
Give your AI agent both references in the system prompt or context:
```
You have two reference documents:
1. https://editor.addict.best — the master HTML app with 6 unified templates,
conflict resolution laws, brand table, and full template text.
Sections: #s1–#s9, #six-templates (u1–u6), #brand, #master
2. editor-pro-tips-and-commands.md — FFmpeg commands, pro-tips per template,
combination recipes, free tool stack, QA one-liners.
Workflow:
- Pick template from the HTML (e.g. copy U1 from #u1-body)
- Fill {VARIABLES} using the brand table from HTML #brand
- Execute using FFmpeg commands from the .md
- QA using the shell one-liners from the .md
- SEO package using the .md combination examples
```
Pro-tip: The HTML has a search bar (press `/`) — tell the agent to use section IDs (`#s1`, `#u3`, `#brand`) to locate content fast.
### Method 2: Embed .md as a linked companion in the HTML
Add a single link in the HTML's nav or site-inventory section pointing to this file:
```html
<!-- Add to editor.addict.best nav section -->
<a href="/editor-pro-tips-and-commands.md">📋 Pro-Tips & Commands</a>
```
The .md is already served from the same web root at:
`https://editor.addict.best/editor-pro-tips-and-commands.md`
So the agent can fetch either file from the same domain. No merge needed — the HTML is the template source, the .md is the execution guide.
### Method 3: Section-to-section cross-reference
When chaining templates, map HTML sections to .md sections:
| Step | Read from HTML | Execute with .md |
|:---|:---|:---|
| Pick template | `#u1-body` through `#u6-body` | — |
| Fill brand vars | `#brand` table | "Template Variables" block |
| Grade | Template's PHASE 2 step 1 | Recipe #5 (brand grade commands) |
| Motion / Ken Burns | Template's PHASE 2 step 2 | Recipe #6 (Ken Burns) or #7 (slideshow) |
| Captions | Template's PHASE 2 step 4 | Recipe #17 (Whisper) + #18 (burn-in) |
| Audio mux | Template's PHASE 2 step 6 | Recipe #9 (mux) + #10 (loudnorm) + #11 (duck) |
| Export | Template's PHASE 2 step 8 | Recipe #14 (short) or #15 (long) or #16 (feed) |
| QA | Template's PHASE 3 checklist | "Shell One-Liners" + Recipe #13 (frame extract) |
| SEO | Template's SEO section | "Combining Templates" examples |
### Method 4: Agent self-check loop
After any render, the agent should run this verification sequence (all free, all local):
```bash
# 1. File exists and has video stream?
ffprobe -v quiet -show_entries stream=codec_type -of csv=p=0 "$OUTPUT" | grep -q video && echo "PASS: has video" || echo "FAIL: no video stream"
# 2. Resolution correct?
RES=$(ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "Resolution: $RES" # Compare to expected canvas
# 3. Duration > 0?
DUR=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 "$OUTPUT")
echo "Duration: ${DUR}s" # Must be > 0
# 4. FPS = 30?
FPS=$(ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "FPS: $FPS" # Should be 30/1
# 5. Audio sample rate = 48000?
SR=$(ffprobe -v quiet -show_entries stream=sample_rate -of csv=p=0 -select_streams a:0 "$OUTPUT")
echo "Sample rate: $SR" # Must be 48000
# 6. Visual QA frames
for pct in 25 50 75; do
T=$(echo "$DUR * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i "$OUTPUT" -frames:v 1 "qa_${pct}.png" -y 2>/dev/null
done
echo "QA frames saved — visually inspect for black/corrupt/face-leak"
# 7. Loudness check
ffmpeg -i "$OUTPUT" -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | grep input_i
```
All 7 checks use free tools. The AI agent reads the results and decides PASS / FAIL / INCONCLUSIVE per the HTML template's QA checklist.
---
*This .md supports editor.addict.best. The HTML app owns the templates — this file owns the commands, pro-tips, and merge logic. Both are served from the same domain. Together they are the complete system.*
## Quick Shell One-Liners
```bash
# Check if video is HDR
ffprobe -v quiet -select_streams v:0 -show_entries stream=color_transfer -of csv=p=0 input.mp4
# If output is "smpte2084" or "arib-std-b67" → needs HDR→SDR
# Verify A/V sync drift
ffprobe -v quiet -show_entries stream=start_time -of csv=p=0 input.mp4
# Both streams should start at ~0.000000
# Check final loudness (post-loudnorm verification)
ffmpeg -i final.mp4 -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | tail -20
# Batch probe all outputs
for f in "$OUT_DIR"/*.mp4; do
echo "=== $f ==="
ffprobe -v quiet -show_entries stream=width,height,r_frame_rate,codec_name -show_entries format=duration,size -of flat "$f"
done
# Verify no watermark (check for alpha/overlay in bottom-right)
ffmpeg -ss 1 -i input.mp4 -frames:v 1 -vf "crop=200:50:iw-200:ih-50" check_watermark.png
# Quick safe-zone overlay for 9:16 (visual check)
ffmpeg -i short.mp4 -vf "drawbox=x=60:y=250:w=870:h=1200:color=red@0.3:t=2" -t 5 safezone_check.mp4
```
---
### Method 4: Agent self-check loop
After any render, the agent should run this verification sequence (all free, all local):
```bash
# 1. File exists and has video stream?
ffprobe -v quiet -show_entries stream=codec_type -of csv=p=0 "$OUTPUT" | grep -q video && echo "PASS: has video" || echo "FAIL: no video stream"
# 2. Resolution correct?
RES=$(ffprobe -v quiet -show_entries stream=width,height -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "Resolution: $RES" # Compare to expected canvas
# 3. Duration > 0?
DUR=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 "$OUTPUT")
echo "Duration: ${DUR}s" # Must be > 0
# 4. FPS = 30?
FPS=$(ffprobe -v quiet -show_entries stream=r_frame_rate -of csv=p=0 -select_streams v:0 "$OUTPUT")
echo "FPS: $FPS" # Should be 30/1
# 5. Audio sample rate = 48000?
SR=$(ffprobe -v quiet -show_entries stream=sample_rate -of csv=p=0 -select_streams a:0 "$OUTPUT")
echo "Sample rate: $SR" # Must be 48000
# 6. Visual QA frames
for pct in 25 50 75; do
T=$(echo "$DUR * $pct / 100" | bc -l)
ffmpeg -ss "$T" -i "$OUTPUT" -frames:v 1 "qa_${pct}.png" -y 2>/dev/null
done
echo "QA frames saved — visually inspect for black/corrupt/face-leak"
# 7. Loudness check
ffmpeg -i "$OUTPUT" -af "loudnorm=I=-14:LRA=11:TP=-1:print_format=json" -f null - 2>&1 | grep input_i
```
All 7 checks use free tools. The AI agent reads the results and decides PASS / FAIL / INCONCLUSIVE per the HTML template's QA checklist.
Stability note
This hybrid section is additive. It does not edit #u1–#u6 clean boxes, #s1–#s9, #pro-tips, or brand table. Same gray high-contrast theme. Details panels stay collapsed until opened (better performance).
Apex power tips (compatible boost for U1–U6)
What “installable code / modules” means (see Q&A below in session): Apex ships real Python/shell files you can save and run (core.py, perceive.py, qa_gate.py, install_apex.sh…). editor.addict.best instead gives agent briefs + FFmpeg recipes without installing that codebase. These tips bring Apex behavior into templates without requiring Apex install.
| Boost | What agents must do now (in every U1–U6) | Score target |
|---|---|---|
| Cognitive pipeline | Perceive → Interpret → Compose → Realize → Critique with checkpoints | Depth + editing power |
| False-positive QA | Tier-0 metrics first; PASS/FAIL/INCONCLUSIVE; final_gate habit; max 3 self-heal loops | Trust + shipping safety |
| Vision / seeds / brain | Free-first vision optional; frame judge FAILED/PROPER/EXCELLENT; save theme seeds; 3-pass brain | Smarter edits without blocking |
No conflict rules
If Apex tips ever seem to fight SHARED LAWS: SHARED LAWS + brand table + retention ROI win. Vision never blocks export. INCONCLUSIVE never equals PASS. Faceless FAIL overrides “pretty” EXCELLENT.
Full Apex source (deep modules): /Qwen-expert-Ai-editor.md on this host. Templates already include the compact APEX POWER TIPS block under SHARED LAWS.