Scrollclaw Assemble logo

Scrollclaw Assemble

Community
TheMattBerman
scrollclaw-assemble

Assembly stage for UGC videos. Handles stitch mode, post mode, captions mode, or full-assemble mode when the user is explicitly working on finalizing an existing campaign video.

Overview

PublisherTheMattBerman
Repositoryscrollclaw
Skill namescrollclaw-assemble
Stars
72
Forks
18
Bundled files
6
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 6 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by TheMattBerman on GitHub. Read the source before you install it.

Installation

Install the Scrollclaw Assemble AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/TheMattBerman/scrollclaw/tree/main/assemble
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/TheMattBerman/scrollclaw.git /tmp/scrollclaw
mkdir -p .claude/skills
cp -r /tmp/scrollclaw/assemble .claude/skills/scrollclaw-assemble
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Scrollclaw Assemble in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Scrollclaw Assemble on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Scrollclaw Assemble is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Assemble

Three stages: stitch + audio → post-production → captions. Order matters.

Modes

This skill handles four intents. Choose the narrowest one that matches the user's request:

  • stitch — timeline assembly and voice orchestration only
  • post — post-production realism pass only
  • captions — caption rendering and overlay only
  • full-assemble — do all three in order; this is the default when the user says "assemble", "finish the video", or otherwise asks for the final output

If the user asks for one stage explicitly, do not force the full pipeline. If they ask for the final video, run full-assemble.

Prerequisites

  • A-roll clips from /animate
  • B-roll clips from /b-roll (if applicable)
  • Script with timing from /persona

Stage 1: Stitch + Audio Orchestration

Read references/audio-orchestration.md for the full process.

The critical ordering (tested):

  1. Stitch A-roll clips ONLY (these drive the timeline)
  2. Extract audio → run through ElevenLabs S2S → one consistent voice
  3. Lay S2S voice back on A-roll video
  4. Cut A-roll at B-roll insertion points
  5. Insert B-roll clips as VISUAL-ONLY (no audio) at timestamps matching the script
  6. Lay S2S voice on the final assembled video

Voice never cuts. B-roll swaps visuals only. The wrong approach (stitch all clips then add voice) breaks timing because B-roll adds visual duration that doesn't exist in the voice track.

For single-clip talking head: Sora's built-in audio may be sufficient. For podcast format: always use ElevenLabs S2S.

Multi-Clip Stitching

For longer UGC, either use fal.ai's 20s duration or stitch clips:

Last-frame stitching (tested, works well):

  1. Extract last frame: ffmpeg -sseof -0.1 -i clip1.mp4 -frames:v 1 last-frame.png
  2. Use as first frame of clip 2 → seamless visual continuity
  3. Concatenate with ffmpeg
bash
bash scripts/extend-clip.sh \
  --input workspace/campaigns/<slug>/clips/a-roll-01.mp4 \
  --prompt-file workspace/campaigns/<slug>/extension-prompt.txt \
  --output workspace/campaigns/<slug>/clips/a-roll-01-extended.mp4 \
  --log-file workspace/campaigns/<slug>/output-log.md \
  --label a-roll-01-extended \
  --seconds 10

Use scripts/stitch-video.sh for resolution normalization. Read references/voice-system.md for voice design guidance.

Stage 2: Post-Production (mandatory)

Raw AI output → post-production → final asset. Never skip.

Use scripts/post-production.sh for automated color grade, grain, and frame rate normalization.

Read references/post-production.md for the full realism stack: color grade, grain (the 4K upscale trick), skin texture, frame rate lock, audio realism, lighting consistency.

If mixing Sora + Kling clips, pay special attention to cross-engine color matching — see references/orchestrator.md (in b-roll/references/).

The phone test: watch the final video on a phone screen, in the app, scrolling past it like a user. If anything pings as AI, fix it.

Read references/green-zone.md for platform safe zones.

Stage 3: Captions (ALWAYS LAST)

⚠️ Captions MUST be applied AFTER post-production, not before. Grain and color grade degrade clean caption text. This was the #1 process mistake in session 2.

Caption Overlay System

Use assemble/scripts/caption-overlay.py for all text overlays. It generates transparent PNGs with TikTok-native styling, auto-detects video resolution, and downloads TikTok Sans from Google Fonts if not cached.

bash
# Generate caption overlay (auto-detects resolution from video)
python3 assemble/scripts/caption-overlay.py \
  --video workspace/campaigns/<slug>/clips/post-produced.mp4 \
  --preset tiktok-wall \
  --lines "things i didn't know,would bother me about,my boyfriend..." \
  --output workspace/campaigns/<slug>/frames/caption.png

# Overlay onto post-produced video (with compatible encoding)
ffmpeg -i workspace/campaigns/<slug>/clips/post-produced.mp4 \
  -i workspace/campaigns/<slug>/frames/caption.png \
  -filter_complex "[0:v][1:v]overlay=0:0:enable='between(t,0.2,3.8)'" \
  -c:v libx264 -profile:v main -pix_fmt yuv420p -crf 18 \
  -movflags +faststart -c:a copy \
  workspace/campaigns/<slug>/clips/final-01.mp4

Approved TikTok Text Presets

PresetUse ForFontSizeColorStroke
tiktok-wallWall of Text format, dense overlaysTikTok Sans Regular38px#F7F7F2 94% opacity2.5px pure black
tiktok-hookHook captions, opening textTikTok Sans Bold52px#FFFFFF 100%3px pure black
tiktok-sceneScene-by-scene captionsTikTok Sans Regular32px#F7F7F2 94% opacity2px pure black
tiktok-denseDense multi-line overlaysTikTok Sans Regular28px#F7F7F2 94% opacity2px pure black

All presets use centered alignment and safe zone positioning (y=280 at 720x1280 base). Values scale automatically for other resolutions.

Full control via JSON config

For per-scene caption configs, pass a JSON file:

bash
python3 assemble/scripts/caption-overlay.py \
  --config workspace/campaigns/<slug>/scripts/captions.json \
  --output workspace/campaigns/<slug>/frames/caption-s1.png

Legacy pill-style captions

The older scripts/generate-caption.py still supports pill-style (white rounded rect background) and wall-style captions using Inter font. Use assemble/scripts/caption-overlay.py for all new work — it has the correct TikTok-native styling.

Caption rules

  • Caption PNG must match EXACT video resolution. Use --video flag to auto-detect.
  • Use PIL for text overlays — more control than ffmpeg drawtext, no escaping issues.
  • Use textfile approach if ffmpeg drawtext is ever needed (avoids apostrophe/escaping bugs).
  • Visual Transformation format requires captions on EVERY scene, not just the hook.
  • No background pills for TikTok-native text — stroke only.
  • Always encode with compatible defaults after caption burn: -profile:v main -pix_fmt yuv420p -movflags +faststart

Resolution note: Sora outputs 720x1280, Kling outputs 1076x1924. Always normalize to one resolution before stitching.

Requires ffmpeg and python3 with Pillow (auto-installed if missing).

Brand Memory Integration

Reads

FilePurpose
workspace/campaigns/<slug>/clips/*.mp4All A-roll and B-roll clips to assemble
workspace/campaigns/<slug>/scripts/<format>-script.mdTiming, B-roll insertion points, caption text
workspace/campaigns/<slug>/creators/creator-<name>.mdVoice reference for ElevenLabs S2S voice design
workspace/creators/creator-<name>.mdFallback if no campaign-specific profile exists

Writes

FileNotes
workspace/campaigns/<slug>/clips/final-<version>.mp4Assembled video with voice, post-production, captions
workspace/campaigns/<slug>/output-log.mdAssembly params, S2S voice used, ffmpeg settings (append-only)

Context loading

🔧 Assemble context loaded:
  ✓ Campaign: ridge-q1
  ✓ A-roll clips: 3 (workspace/campaigns/ridge-q1/clips/a-roll-*.mp4)
  ✓ B-roll clips: 2 (workspace/campaigns/ridge-q1/clips/b-roll-*.mp4)
  ✓ Script: talking-head (workspace/campaigns/ridge-q1/scripts/talking-head-script.md)
  ✓ Creator voice profile: Maya

Contract

Input

  • Required: A-roll clips plus a timing-aware script
  • Optional: B-roll clips, creator voice profile, ElevenLabs S2S settings
  • Format: workspace video files, script markdown, and optional voice metadata
  • Source: /animate, /b-roll, /persona, and references/audio-orchestration.md

Output

  • Produces: one assembled final video with stitched visuals, audio, post-production, and captions
  • Format: final-<version>.mp4 in workspace/campaigns/<slug>/clips/ plus append-only assembly logs
  • Default behavior: stitch A-roll first, apply voice orchestration, insert B-roll as visual-only cuts, run post-production, then add captions last
  • Downstream use: /score

Validation

  • Pre-conditions: source clips exist, script timing is usable, and all inputs are normalized enough to assemble
  • Post-conditions: final video is saved locally, voice stays continuous, and captions sit on the post-produced file rather than the raw render
  • Failure checks: fix resolution mismatches, broken timing, or synthetic-looking audio here before handing anything to /score

Stage checkpoints

  • stitch: assembled timeline exists, cuts land on script beats, voice continuity holds across A-roll and B-roll
  • post: post-produced file exists, mixed-engine clips look visually coherent, phone test does not immediately ping as AI
  • captions: caption overlay matches exact video resolution, readability is mobile-safe, and captions were applied after post-production

Output

  • Final assembled video (MP4) in workspace/campaigns/<slug>/clips/final-<version>.mp4
  • All intermediate files preserved in workspace/campaigns/<slug>/
  • Assembly params logged to workspace/campaigns/<slug>/output-log.md

Next Step

Assembly complete → run /score to verify virality score before publishing.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Scrollclaw Assemble AI skill do?

Assembly stage for UGC videos. Handles stitch mode, post mode, captions mode, or full-assemble mode when the user is explicitly working on finalizing an existing campaign video.

Why use Scrollclaw Assemble on TypingMind?

Because you install it once and use it with any model. Scrollclaw Assemble is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Scrollclaw Assemble in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/TheMattBerman/scrollclaw/tree/main/assemble. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Scrollclaw Assemble?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Scrollclaw Assemble?

As many as you like. As long as a model supports skills, you can use Scrollclaw Assemble with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Scrollclaw Assemble AI skill free?

Yes. It is published on GitHub by TheMattBerman under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇