Fil · Skills

Digital Twin, a skill for Claude Code, Codex and Cursor

A skill for Claude Code, Codex and Cursor: photoreal stills of you in your own room from new cameras, three at a time, a line in your own cloned voice and a talking clip from the still you pick, judged by your own eye and measured against your real face and voice. Only for your own face and voice.

Install it

Claude Code:

curl -fsSL https://fil.design/skills/digital-twin.zip -o /tmp/digital-twin.zip && unzip -o /tmp/digital-twin.zip -d ~/.claude/skills

Codex:

curl -fsSL https://fil.design/skills/digital-twin.zip -o /tmp/digital-twin.zip && unzip -o /tmp/digital-twin.zip -d ~/.codex/skills

GitHub:

npx degit MengTo/Skills/agent-skills/media/digital-twin ~/.claude/skills/digital-twin

Or make one in Fil with its workflow: https://fil.design/workflows/digital-twin. Fil is invite-only for now: join the waitlist at https://fil.design/waitlist.

Or tell your agent:

Install the Digital Twin skill from https://fil.design/skills/digital-twin: unzip https://fil.design/skills/digital-twin.zip into your skills folder (~/.claude/skills for Claude Code, ~/.codex/skills for Codex), then read its SKILL.md.

The skill’s folder: https://fil.design/skills/digital-twin.zip (zip), GitHub, and each file:

SKILL.md

Three things that should pass for you: stills of you in your own room, talking clips of you, and lines in your voice. The bar: someone who knows you says "that's you" without hesitating. Your own eye is the final judge. Blind judges and scorers find the faults; you decide. A blind judge once ranked a shot higher than one the person himself approved, and the person was right.

Provenance. Extracted from one creator's twin, built 6–8 Nov 2026 for a course intro. More than 160 numbered Seedream stills were scored by blind judges, landmark measurements and the person's own picks. Seedance drafts V1–J2 were measured against how he really talks, and the voice work took his clone from 8.7 to 9.2/10 on a speaker-similarity scorer. Every rule below came from a correction he made or a measured failure. His numbers appear as examples, labelled as one person's results. Measure your own.

Consent first (references/consent.md). Only your own face and voice, or a person who gave you documented consent for this use. Never a public figure, a client, or anyone who hasn't agreed. Platform verification steps (a voice captcha, a face check on your phone) are the owner's to do. Never work around a platform's identity check.

The workflow at a glance

StageWhat you makeTool and price (Nov 2026)Gate
0 · Setupconsent, accounts, a project folder, a canvas, a ledgerFil (and ElevenLabs for your voice)consent; price before every spend
1 · Referencesface crops from your own videos: a lean set, angle sets, held-out judge frames, room photosfree (scripts/)never a selfie, never a generated face
2 · Identitya 250–350-word identity block from a blind feature listfreejudge reads it against held-out frames
3 · Stills3 at a time, in your real room, only the camera and time changingSeedream 5 Pro on Fil: 12 credits ($0.12)your pick; proportions measured
4 · Audit and fixevery pick checked tile by tile, then fixeda Seedream edit + fix_still.py paste-backwrong gear, hair, hands, extra objects gone
5 · Voicelines in your voiceElevenLabs instant clone, v4 + an audio tag≥ 9 on score_voice.py on 7–10 s lines; your ear
6 · Talking clips5 s, one draft per stillSeedance 2.5 on Fil, 480p: ~52 credits ($0.52)English exact; mouth and head measured
7 · Deliveron a canvas, loggedFil sections, a ledger, a logevery spend logged; picks marked

The same flow is a ready-made Fil workflow: https://fil.design/workflows/digital-twin (references/fil-workflow.md).

Stage 0 · Setup

Stage 1 · References from your own recordings

Read: references/references.md.

  1. Pull frames from talking-head recordings on your usual camera, mic and light: scripts/extract_frames.sh frames/ rec1.mp4 rec2.mp4 -- 10 → swift scripts/faces.swift frames/*.jpg > faces.txt → scripts/crops.sh faces.txt refs/all 1024 (tight head crops: no lav mic, no hands).
  2. Hold out 5 frames as the judge's truth (J1–J5), from a different day. Never use them as references.
  3. Pick a lean set of 8, mostly neutral, mouth closed or barely open, head upright, a mix of front and 3/4. Measure with scripts/lmjson.swift + scripts/measure.py and drop frames that run long in the chin or wide (smiling and mid-word frames). Seedream copies its references' proportions: a set with smiling frames made every image ~8–10 % long in the chin and ~7 % wide, and the lean set measured right on his held-out frames.
  4. Angle sets: the 6 most frontal frames (eye contact shots), the 6 most turned (side shots), 3 full frames (wide). Rank them by yaw from faces.swift. With only 3/4 references, eye-contact and side shots drift away from you.
  5. Room photos: 3 of your real room (the whole room, the desk, the window side), always the last references.
  6. Never: a phone selfie (a wide-angle lens enlarges the nose and narrows the jaw, and the model turns a blemish into a mole); a generated image as a reference (errors compound); other people's screenshots as image refs (their faces blend in); your held-out judge frames.

Stage 2 · The identity block

Read: references/identity-template.md.

Have a fresh blind judge describe your face from the held-out frames, feature by feature: hairline, hair, face shape, eyes, brows, nose, mouth, ears, skin (with Lab values), age and build. Write one paragraph from it that begins "A real photograph of exactly the person in the reference photos, the same person" and ends "Use the reference photos only for who they are, not for their room, light, clothes or microphone". Then keep it short:

Stage 3 · Stills: your room, three at a time

Read: references/stills.md, references/workspace.md.

Cinematic looks

Read: references/cinematic.md.

Stage 4 · Audit and fix

Read: references/audit.md.

Before any video, two fresh reviewers check each pick in 3×3 native-resolution tiles. The usual misses: wrong-brand or wrong-model gear (an iMac with a chin, even when told "no iMac"), grey hair at the sides, hands (fingers, a ghost finger), extra objects (a second monitor or laptop, a floating bulb), light stands, a mic on the shirt, sand or haze indoors, broken laptop lids. Fix with one Seedream edit listing all of that still's mistakes, then paste back only the flagged rectangles with the face masked: scripts/fix_still.py ORIG EDIT OUT 'x0,y0,x1,y1;…' --protect-face LM.json --match. Reject an edit that recomposed the frame, and redo it with fewer changes.

Stage 5 · Your voice

Read: references/voice.md.

  1. Start with an instant clone from ~3 minutes of your cleanest solo speech (scripts/voice/build_ref.py labels your segments in recordings with other people, and make_ivc.py packs the best). It's ready in a minute and needs no verification.
  2. Generate on eleven_v4 and measure the pitch. If it runs high, put an audio tag in front: on that project [calm] took v4 from 136–162 Hz back into his 106–131 range, and the score from 7.7 to 9.2. Stability didn't move the pitch at all. Whisper confirms the tag isn't spoken. scripts/voice/tts_line.sh VOICE_ID "Line." out.mp3. On Fil: an audio node on eleven-v4 with your clone's voice id in its voice field and [calm] at the start of the prompt (about 1 credit per 10 s), on the same canvas as your stills and clips.
  3. Score with scripts/voice/score_voice.py REF_DIR clip.mp3: ECAPA speaker similarity, calibrated so your own held-out clips = 10 and other people = 0, plus pitch inside your own p10–p90; score = 0.7 × similarity + 0.3 × pitch. Your own denoised voice scores ~9.3, so 9 ≈ you. Score 7–10 s lines (a 4 s clip of the right voice scored 4.7). Don't use Resemblyzer to score: it's channel-sensitive and scored his own denoised voice 3.8. Then let your ear decide on a before/after: real line → clone.
  4. Professional Voice Clone traps: adding samples to a working PVC resets its verification, and it becomes unusable on every model until you re-verify and it retrains (3–6 h). Verification is you reading a passage into your mic: 5 tries, then a 24 h lock. All five failed there, although every sample scanned clean. So test a 30 s mic clip against your samples before spending tries, keep an instant clone as the stand-in, and never add samples to a PVC that is in use without planning for the downtime.
  5. Your real voice works too: a clean 4–5 s line cut from a recording, as the Seedance audio reference. Seedance re-voices it but keeps your real pitch (112 Hz against his real 113).

Stage 6 · Talking clips

Read: references/video.md, references/speaking.md.

  1. Start from an audited, picked close-up still. A close-up gives the face ~190–235 px at 480p; a medium shot gives only 110–140.
  2. On Fil: add the still to Settings › Your face first (a one-time phone check, then "Ready for Seedance" in a few seconds). Fil's Seedance takes a real face only once that exact picture is in your verified face library; a still that isn't is refused and the credits come back. Don't try to get past that check any other way.
  3. Seedance 2.5, 5 s, 480p, the still wired in as image 1, the line in the prompt in quotes (~52 Fil credits). Off Fil, the Higgsfield CLI takes the still as it is: seedance_2_5 --mode omni_reference --start-image S --image-references S --audio-references LINE-5s.mp3 --duration 5 --resolution 480p --draft true (15 credits), with your 5 s voice line as the audio reference. No video reference unless you want much more head motion: a talking clip of you as a video reference doubled the head motion but leaked your mic and made the mouth busier.
  4. The prompt: "They speak English", the exact words in quotes (a Seedance 2.0 clip once came out in Chinese), "locked-off close-up at eye level", "head stays mostly still, with only small natural nods", the soft-mouth clause, "face stays exactly as in the start image: clean, smooth, sharp", and "their [gear] stays exactly as in the start image". Eye contact or past the lens, to match the still.
  5. Measure with scripts/measure_drafts.sh DIR K…: whisper for the words, mouth opening p50 and head-turn sd against your numbers (measure yourself with speakstats). Seedance opens the mouth ~50 % wider than a calm speaker.
  6. One draft per still. Near-duplicate tests read as waste to the person paying; say up front when a pair is a test. A 480p draft keeps about a third of the still's face detail; a 720p final only after you pick.

Stage 7 · Deliver

A canvas section per batch, a note on each node (recipe, measurements, audit), picks marked ✓ and moved to a KEEP section, a numbered sheet to choose from, one question ("which are you?"), and the ledger and log updated before you report.

What fails, and the fix

FaultFix that worked
Face 8–12 % too wide or round; reads oldera lean reference set (no smiling or mid-word frames); "lean through the lower face… soft V… not wide, not round"; 85 mm at eye level; no head tilt
Chin longthe lean set + front frames; pick the take nearest your measured chin; prompt words and chin-only edits move it < 1 %
Grey, white or silver hairremove "grey" from the identity block entirely; "no white, grey or silver hairs anywhere on the head"; "faint sparse dark stubble"
Hair spiky, gelled or a pompadour"thick soft clumps with blunt, soft, rounded ends"; list the styles it is not, in every face edit too
Eyes wide open, brows lifted for eye contact"heavy relaxed lids… brows low and relaxed"; front angle refs
Spots, freckles, acne pits, tan or orange skinSeedream only; "no freckles… not tanned"; "a soft neutral fill keeps the skin [tone], never orange"
Wrong gear (an iMac with a chin)describe the real model precisely ("no chin, a slim aluminium stand"), audit, edit + paste back the region
Invented places, inconsistent roomsyour real room, three room photos last, a shared workspace prompt; only the camera changes
Light stands and softboxes in framenever name lighting gear; "no light stands, softboxes or tripods in frame"
Lav mic leaks from refstight head crops; "no microphone on them"; no video ref with a visible mic
Another person's face blends inreference videos as words only, never as image refs
Video mouth too widethe soft-mouth clause; close-up stills; measure p50
Video head frozen or too busyno video ref + "mostly still, small natural nods" (calm); a video ref of you for more life
Video speaks another languageSeedance 2.5, "speaks English" + the exact words
Voice too high and brightan instant clone on v4 + an audio tag ([calm]); or your real line as the audio ref
Voice offline after adding sampleswarn first; keep an instant stand-in; test a mic clip before verification tries

Numbers that shipped

One person's measured results, Nov 2026. Measure your own.

whatvalue
his face, real frameschin 0.80 n, width 2.63 n at the nose, 2.24 n at the mouth (n = eye line → nose base)
a good takewithin ±0.05 of those; three room photos + front refs gave 0.78–0.83 on most shots
stillSeedream 5 Pro on Fil, 16:9, 2k, 12 credits; edit 9
batch3 stills; ≤ 10 refs (8 face + room photos); ≤ 4,000 prompt characters on Fil
blind plateau8.75 identity; a judge drifts 0.4–1.25 between rounds, so compare in pairs with anchors
his mouth when talkingopening p50 0.092 (Seedance 0.135), open > 0.15 in 25 % of frames, 2.1 syllable cycles/s, 43 blinks/min
his head when talkingturn sd 0.100, tilt sd 3.9°, lean sd 0.075 (Seedance alone 0.034, 1.7°, 0.029)
best draftsmouth p50 0.085–0.10, head turn sd 0.02–0.04 (calm, his pick)
his voicemedian F0 116 Hz, p10–p90 106–131 Hz; instant + [calm] 9.2/10, old Pro voice 8.7, Multilingual v2 ~8.1, v3 5–7
talking clipSeedance 2.5 on Fil, 480p, 5 s: ~52 credits ($0.52); off Fil, a Higgsfield draft is 15 credits (~$0.59)

Verify before you report

Files