Communitygithub.com

DevineCheung/suge-video-skills

Socrates Didn't Have a Bottom Video Workshop: two proven styles – [Comic Explainer] and [Pixel Beat Story]. Load for any video on this channel, first select a style via §1, then read the corresponding STYLE.md.

What is suge-video-skills?

This skill provides a structured, AI-agent-driven video production pipeline tailored for the social commentary channel "Socrates Didn't Have a Bottom" (苏格拉没有底). It documents two rigorously defined video styles: the *Comic Explainer* style (infographic-style color comics synced to a user-recorded voiceover, vertical 1080×1920) and the *Pixel Beat Story* style (a warm pixel-art night scene with no voiceover, text dialogue beat-synced to music, 4:3 1440×1080). The skill enforces a consistent creative workflow, including mandatory style selection, sample-first production, script review with fact-checking, and strict audio/video quality standards (e.g., -15 LUFS loudness, no TTS, original covers as first frames). It supports execution on Node.js (with `@napi-rs/canvas`) for the Comic Explainer style and on the Remotion framework for the Pixel Beat Story style, providing all necessary scripts, templates, and shared utilities (e.g., loudnorm, alignment, keying, contact sheet generation). The agent is guided to first ask the user to choose a style, then read the corresponding STYLE.md for detailed production steps, ensuring consistent, high-quality output across videos.

Works with✓Claude Code~Codex CLI~Cursor
npx skills add DevineCheung/suge-video-skills

Ask in your favorite AI

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

Documentation

Socrates Didn't Have a Bottom · Video Workshop (Combined Skill)

1. Select a Style

Comic ExplainerPixel Beat Story
Directorystyles/comic-explainer/styles/pixel-beat-story/
Best For"Explain one thing clearly" – social sciences, current events, history: news investigations, institutions, conceptual analysis"Tell one person's story" – social pain points: autism, Alzheimer's, left-behind children, solitary living…
DriverUser-recorded voiceover, word-level timeline (faster-whisper + difflib)Music – beat/phrase grid (beats.py)
Aspect RatioVertical 1080×1920 / 30fpsLandscape 4:3 1440×1080 / 30fps (adjustable)
DurationFollows the recording (~10 min sample, 7 chapters)3–4.5 minutes
VisualsWarm rice-paper background, Q-style color comic characters (green-screen generated, cutout), chapter cards, seals, programmatic iconsPixel house night scene, sprite characters, talking objects, HUD counters, typewriter dialogue
AudioOriginal voiceover (uncut) + programmatic piano music + sound effects + duckingMusic (extend/breakpoint/return) + programmatic rain/thunder ambience; music stops at the most painful point
Enginenode 22 + @napi-rs/canvas (render_example.js DSL)Remotion (weilanx-claude-videos project, Ep54-example.tsx)
Sample"Why Establish a State-Owned Enterprise Despite All This Data?""He Doesn't Say" / "He Isn't from the Stars"

If unsure, ask the user: "This episode: Comic Explainer, or Pixel Beat Story?"

Once selected, read the full STYLE.md in the corresponding directory and follow its workflow.

2. Shared Channel Guidelines (Mandatory)

  1. Cover as First Frame: Every video must have a custom cover embedded as the very first frame (Comic Explainer: first 0.4s; Pixel Beat Story: frame 0). Also deliver a separate cover image.
  2. Watermark Integrated, No Corner Logo: "Socrates Didn't Have a Bottom" is written into signage, nameplates, app headers, window titles, end credits, etc.; the user explicitly refuses a corner logo.
  3. Sample Before Full Video: Comic Explainer – produce the opening through Chapter 1 (~80s); Pixel Beat Story – produce Act 1 (60–70s). Only proceed to full production after user confirms the style.
  4. Script Pre-Approval: The user writes the script/records audio; the agent is responsible for fact-checking (web_fetch original reports/research articles), flagging polyphonic characters, logical leaps, sensitive wording, and only then beginning production.
  5. Audio Baseline: The user's original audio must not be cut, rearranged, or replaced with TTS; music and sound effects must be original, programmatic, or properly licensed; placeholder tracks must be flagged for replacement with each delivery. All concatenated audio must use numpy-based equal-power crossfade (ffmpeg acrossfade on the same input will truncate).
  6. Loudness: Entire video at -15 LUFS, using two-pass loudnorm (shared/loudnorm.sh), with a fade-out at the end.
  7. Characters Must Look Good: Clean, friendly, and appealing; the user rejects ugly characters. Side characters must also be pleasant. Maintain consistent prompt skeletons for recurring characters; generate on green/solid backgrounds and then cut out (Comic Explainer: key.py, Pixel Beat Story: cutout.py).
  8. Self-Check with Contact Sheet Before Rendering: Generate a contact sheet and read it to check – text doesn't extend beyond the image, doesn't overlap faces, first frame is the cover, watermarks are present, key lines/keywords match the audio.
  9. Rendering: Use 2-core sandbox with parallel segments (concurrency per segment = 1). Write to /tmp first, then copy to workspace (faststart writing to network drive causes IO errors). Re-audio without re-rendering the video; minor changes only re-render affected frame segments, then overlay.
  10. Content Ethics (especially Pixel Beat Story): Do not claim AI can cure any disease. Do not romanticize or otherize vulnerable groups. Mark stories as fictional; do not use real children's private data. Cite sources and years for data in the end credits.

3. Directory Structure

SKILL.md                         ← This file (style selection + shared guidelines)
shared/loudnorm.sh               Two-pass loudnorm
styles/comic-explainer/        【Comic Explainer】
  STYLE.md                       Style specs, layout coordinates, animation DSL, alignment and mixing workflow
  templates/ lib.js render_example.js audio.py wh.py align2.py key.py mux.sh
  examples/                      Cover/frame sample, character examples, script format (# heading / # chapter markers)
styles/pixel-beat-story/       【Pixel Beat Story】
  STYLE.md                       Style, script formula, beat-sync rules, music shaping, layout, QA
  references/ story.md layout.md
  scripts/ beats.py music_tools.py sfx.sh cutout.py contact.sh stills.mjs render.sh mux.sh
  template/ Ep54-example.tsx ep54-music-ops.json ep54-script-example.md assets/

4. Environment

  • General: ffmpeg ≥6, python3 + numpy scipy pillow; Chinese fonts.
  • Comic Explainer: node 22 + @napi-rs/canvas; faster-whisper (feed numpy arrays, not file paths); font LXGW WenKai → fonts/wk.ttf. lib.js also requires assets/, map/, and heads.json (head crop table {name:[cx,cy,size]}) in the project directory – create these for new projects.
  • Pixel Beat Story: Remotion project (weilanx-claude-videos, MIT; Remotion free for individuals/teams ≤ 3 people); Noto Sans/Serif SC. In the sandbox, prefix every node command with export NODE_OPTIONS=--max-old-space-size=4096 and use ./node_modules/.bin/remotion (not npx).

5. Delivery Script

Communicate in a single message: video duration, two or three highlights (Comic Explainer: chapters and key visuals; Pixel Beat Story: beat-sync design details), whether music is placeholder, and ask what adjustments are desired. Attach the final mp4 + cover image.

Related Skills