How to Make a Deadpan Comedy Video with Claude Code: /votri-script Step by Step

Cover Image for How to Make a Deadpan Comedy Video with Claude Code: /votri-script Step by Step
Video AI5 min read

AI Video Studio with Claude Code + Remotion

🛠 Build it: 1. Setup & your first skill · 2. The script-writing skill · 3. The editing skill · 4. The local AI story skill · 5. The comedy script skill

🎬 Use it: Talking-head video · AI story video · Deadpan comedy video

🔬 Under the hood: Architecture · Subtitles · Jump cuts · Music & SFX · Local AI pipeline

Deadpan comedy — hài vô tri — is a simple format with a lot of room for craft. You sit alone at a table with a glass of water or a bag of sunflower seeds, look straight into the lens with a completely straight face, and deliver a solemn lecture about something trivial: a cheesy pickup line treated as macroeconomic strategy, the urge to make a snarky comment explained as a medical condition, a 2 a.m. heart-to-heart with an ant. The more absurd the content, the more serious you are. You never laugh.

This guide shows how to make one with two skills:

/votri-script "<a saying, pickup line or story>"  →  review in chat  →  PDF  →  you perform  →  /tiktok-video <slug>

votri-script writes the script with you and prints it as a PDF to hold while you perform. After you film, tiktok-video edits it automatically: gentle jump cuts that keep your slow delivery, music that changes with each act and cuts out dead for the punchline, sound effects on exactly the right words, and a snap zoom into your eyes at the twist. You only film yourself.

Before you start

The project set up from the build series or cloned from the repository, plus:

  • Google Chrome — the PDF is printed with it. (Another Chromium browser works with CHROME_PATH, below.)
  • brew install poppler if you want the skill to preview the PDF as an image.
  • FFmpeg and cd remotion && pnpm install, for the editing step.

Music and sound effects need nothing — they're generated by code.

Step 1: Give it something to be serious about

/votri-script "Tốt nhất chưa chắc đã phù hợp. Phù hợp nhất mới là sự tốt nhất."

The skill recognizes five kinds of input and picks an angle for each:

You giveExampleThe default angle
A proverb or famous saying"Nhân chi sơ, tính bản thiện"Read the first half solemnly, then break the second half
A pickup line"Anh tặng em cây son, mỗi ngày trả lại anh một ít nhé"Teach it as a macroeconomic strategy
A saying or life opinion"Tốt nhất chưa chắc đã phù hợp…"Turn it into a scientific law
A word or topic"deadline", "cuối tháng"Coin a proverb-like line, then treat it as a classic
A short story"Nửa đêm úp mì, tâm sự với con kiến rồi…"A dramatic monologue with a cold-blooded turn

Add any instructions in plain words after the input:

/votri-script "Ngứa mồm" — about 90 seconds, set at a roadside iced-tea stall
/votri-script part 2 of the lipstick video: nobody commented that they got the lipstick back

Defaults: 50–70 seconds (anything from 45 to 120 works), sitting alone at a table with a drink or a snack.

Step 2: Review and revise in chat

The skill doesn't print anything yet. It shows you:

  1. The thumbnail text: a title, a subtitle, and a "shock line" — for example CHIẾN LƯỢC TÁN GÁI VĨ MÔ / Giáo trình khoá chặt dòng tiền bằng một thỏi son / 180 NGÀY HÔN – VỐN 1 THỎI SON.
  2. The full script table, in five acts — Hook → Lead → Twist → Explanation → Outro. For each scene: the time, the framing and acting, the sound, every line of dialogue in full, and the on-screen text.
  3. The post caption and hashtags.
  4. Two other directions it considered — usually the same idea delivered by a different "expert" (a judge instead of an economist, say).
  5. A question: lock it in, or change something?

Talk to it like a co-writer:

You sayIt does
"make the twist line in scene 3 nastier"Rewrites that line, shows you the change
"cut it to 50 seconds"Tightens the whole script
"use milk tea instead of water"Swaps the prop everywhere it appears
"the explanation needs a number"Adds a straight-faced calculation
"go with direction 1"Rewrites the whole script in that direction, in the same folder
"ok", "chốt", "xuất pdf"Moves on to the PDF

Until you lock it, there's no PDF, so you never end up printing a draft.

Step 3: The PDF

You get content/<folder>/kichban.pdf on A4 paper:

  • Page 1: title and subtitle, duration, the character you're playing, the setting, the props to prepare, and a colored bar showing the five acts.
  • One card per scene: a header with the act, the time, and the file name to save the clip as (s1.mov, s2.mov…); framing, acting and sound notes; a line listing what the editor will add automatically (music, sound effects, zoom, kept pauses); then the dialogue in large bold text, readable at a glance while you perform; and the on-screen text.
  • The end: deadpan performance tips, the steps for handing the footage to the editor, and the posting information — title, subtitle, shock line, caption, hashtags — plus a ready-made prompt for generating the thumbnail with the text already filled in. The skill also puts the caption and the thumbnail prompt in the chat for easy copying.

If Chrome isn't found, point the script at your browser and run it yourself:

CHROME_PATH="/Applications/Chromium.app/Contents/MacOS/Chromium" \
  node .claude/skills/votri-script/scripts/build-pdf.mjs content/<dir>/kichban.json

If the PDF step fails for any other reason, the HTML version is still at content/<dir>/kichban.html — open it in a browser and print with Cmd+P.

Step 4: Perform

The rules of deadpan

  • Never laugh. Not at the end, not a little. If you crack, stop and redo the take.
  • Look into the lens, not at the screen.
  • Slow down. The script is written for 2.5–4.5 words per second — slower than normal speech. The seriousness lives in the pauses.
  • Use the props. The drink or snack gives you something to do in the silences and makes useful sounds — the thud of setting a glass down, the crack of a seed.
  • At the twist, scenes marked ⏸ in the PDF: hold the silence for as long as the script says, face frozen, blink once. The editor won't cut it.
  • Don't zoom by hand. The snap zoom into your eyes is added automatically.

Filming for the automatic editor

  • One clip per scene, named exactly as the card says, copied into content/<folder>/raw/: s1.mov, s2.mov… .mov or .mp4.
  • Vertical, with sound — a lapel mic, or a phone close to the table.
  • A few extra seconds at the start and end are fine; they're trimmed automatically.
  • If you fluff a line, say it again in the same clip. It works, though staying close to the script gives the most precise subtitles.

If you revise the script after filming some scenes, the skill keeps every existing scene's file name. A new scene gets a new number (for example s7), so clips you've already filmed never end up attached to the wrong scene.

Step 5: Edit

/tiktok-video dinh-luat-phu-hop-toi-uu

The editor recognizes the comedy script and edits it differently from a normal talking-head video:

WhatHow
Jump cutsGentle: every pause is shortened, but 0.3 s of it is kept so your slow delivery stays slow. Twist scenes keep their silences entirely
Background musicChanges with the acts: lo-fi for the setup → cut dead at the twist → funk or a solemn waltz for the explanation. Short fades at each change
Sound effectsExactly where the script anchors them: a record scratch at the start of the twist, crickets in the longest silence, a thud on a specific number in your explanation
PictureA snap zoom into your eyes at the twist, a slow push during the "lecture", the on-screen text from the script, word-by-word subtitles

A 60-second video takes about two minutes to render, plus a one-time 1.5 GB download on your first ever edit. The result is out/<folder>.mp4.

The music and effects are generated by code, so they belong to you — no copyright claims if you monetize. They sound like a decent synthesizer rather than real musicians. To use your own track, put an MP3 with the same name in content/_assets/bgm/ (for example funky.mp3) or content/_assets/sfx/. Your file always takes priority.

node .claude/skills/tiktok-video/scripts/audio-synth.mjs --list          # what's available
node .claude/skills/tiktok-video/scripts/audio-synth.mjs funky --force   # regenerate one
node .claude/skills/tiktok-video/scripts/render.mjs <slug> --studio      # preview and scrub

Fixing things after filming

  • A cut is wrong: edit that scene's numbers in content/<folder>/cuts.json, then build-props.mjs and render.mjs. The talking-head guide covers the cut options in detail.
  • A sound effect is in the wrong place, or you want another one: edit the scene's sfx in kichban.json — for example { "name": "thud", "word": "180" } puts a thud on the word "180" — then run build-props.mjs and render.mjs. Edit kichban.json, never the script.json the editor creates from it.
  • A subtitle has the wrong word because you changed a line while performing: change that scene's line in kichban.json to what you said, then re-run transcribe.mjs <slug> --force (it caches its result, so --force is needed when only the text changed), build-props.mjs and render.mjs.

Posting

The last page of the PDF has everything: the title, subtitle and shock line for the thumbnail, the caption and the hashtags. Paste the thumbnail prompt into your image generator, upload out/<folder>.mp4, and keep a straight face in the comments too.

How the skill and the editor work together is covered in the build guide for this skill and the deep dives on jump cuts and music and sound effects.