higgsfield-facs
Controls facial expressions in Seedance 2.0 with FACS (Facial Action Coding System) Action Unit codes — muscle-level direction (AU12 = lip-corner puller, AU6 = cheek raiser) instead of emotion labels. Use whenever the user wants precise facial acting, a forced/uncanny/mixed expression, micro-performance in a close-up, monologue or dialogue facial beats, a 'which AU code for anger/fear/disgust' answer, or to generate a FACS reference sheet for a character. Pairs with higgsfield-soul Micro-Expressions (named expressions), higgsfield-audio (dialogue + lip-sync), and higgsfield-gpt-image-2 (the reference-sheet image).
pinned to #6a62997updated 2 weeks ago
Ask your AI client: “install skills/higgsfield-facs”.
Requires the metahub MCP server installed in your client. Set up MCP.
mh install skills/higgsfield-facsmetahub onboarded this repo on the author's behalf.
If you own github.com/OSideMedia/higgsfield-ai-prompt-skill on GitHub, claim the listing to take over publishing. Your claim preserves the existing eval history and badges; only the curator label is replaced with verified-publisher on your next publish.
Stars
197
Last commit
2 weeks ago
Latest release
published
- #ai-cinema
- #ai-filmmaking
- #ai-video
- #cinema-studio
- #cinematic-cameras
- #claude-code
- #claude-cowork
- #claude-skill
- #higgsfield
- #kling
- #mcsla
- #motion-control
- #prompt-engineering
- #seedance
- #sora
- #soul-cinema
- #soul-id
- #veo
- #video-generation
- #wan
About this skill
Pulled from SKILL.md at publish time.
Direct a face the way an animator does — by **muscle**, not by mood. FACS (the Facial Action Coding System) names each facial movement as an **Action Unit**: `AU12` is the lip-corner puller (smile), `AU6` is the cheek raiser, `AU4` is the brow lowerer. Put those codes in a Seedance 2.0 prompt and the model renders the corresponding action. It is the highest-resolution facial control available on the platform, and it is where forced smiles, uncanny faces, mixed emotions, and honest micro-performance in close-up dialogue come from.
Evaluation report
WarningsAutomated checks the publisher passed at publish time — structure, docs, safety, and whether the artifact behaves as claimed.6a62997· 2 weeks ago
Kind-specific
31Skill: SKILL.md present
found at skills/higgsfield-facs/SKILL.md · frontmatter source: SKILL.md
Skill: body content present
3,538 words · 21,625 chars · 29 sections · 7 code blocks
Skill: triggers declaredwarn
No `trigger` phrases in SKILL.md frontmatter
Add `trigger:` lines so Claude knows when to activate this skill — e.g. `when building MCP servers` or `for diagram creation`.
Skill: allowed-tools scope
no allowed-tools restriction (Claude may use anything)
Release history
1- releasecurrent6a62997warn2 weeks ago
Contents
Direct a face the way an animator does — by muscle, not by mood. FACS (the
Facial Action Coding System) names each facial movement as an Action Unit:
AU12 is the lip-corner puller (smile), AU6 is the cheek raiser, AU4 is the
brow lowerer. Put those codes in a Seedance 2.0 prompt and the model renders the
corresponding action. It is the highest-resolution facial control available on
the platform, and it is where forced smiles, uncanny faces, mixed emotions, and
honest micro-performance in close-up dialogue come from.
This skill is a facial-control layer on top of
../higgsfield-seedance/SKILL.md. Every FACS prompt is still a Seedance prompt — six-slot formula, Prompt-Craft Laws, preflight linter. FACS only changes how you specify the face: AU codes instead of (or alongside) emotion words. It is the muscle-level case of the Voice Rewrite rule "describe physics, not emotion."
QUICK FACTS
Routing aids — read the linked sections for the actual rules.
- FACS = facial expressions as Action Unit codes (muscle movements), not emotion labels; you write the codes into the prompt →
- Provenance split: the AU vocabulary is standard human science; Seedance's interpretation of codes in a prompt is [EMPIRICAL] — high success rate, not a guarantee →
- Plan first. Decide the 3–4 expressions you need → generate a FACS sheet for only those → write the codes. Generating the full 49-AU sheet and cherry-picking is the anti-pattern →
- 3–4 expressions max per generation. Accuracy drops as you stack more AUs into one clip →
- Two specification styles — codes-only (
AU12) vs codes + short anatomical description; test both, neither is universally better → - The reference sheet is a labelled-grid image (GPT Image 2 / Nano Banana Pro); the LLM can mislabel AUs, so iterate and verify →
- The character photo is optional — codes work without it; attach it only for identity consistency →
- Common emotions decompose to standard AU recipes (Duchenne smile = AU6+AU12; sadness = AU1+AU4+AU15) →
- The payoff is dialogue / monologue: AU-per-beat schedule, combined with the
[AUDIO: Xs]lip-sync block →
What FACS Is
The Facial Action Coding System (Ekman & Friesen) breaks the face into Action Units — the smallest visually distinguishable muscle movements. Instead of asking for "happy" (which the model samples diffusely across an enormous range of footage), you ask for the muscles that produce the expression:
AU6— cheek raiser (orbicularis oculi tightens, crow's feet appear)AU12— lip-corner puller (zygomaticus major pulls the corners up and out)- Together,
AU6 + AU12= a Duchenne smile (the genuine, eyes-involved one)
A smile that uses only AU12 reads as polite/forced — the eyes don't
participate. That distinction is invisible to "smile" as a prompt word and
trivial to specify in FACS. This is why it's the tool for forced smiles,
suppressed expressions, mixed emotions, and the uncanny — the cases where the
difference between two similar expressions carries the meaning.
FACS is used by professional facial animators in film; here it is repurposed as a prompt vocabulary for Seedance 2.0.
Where it sits among the repo's facial tools
Three layers, increasing resolution:
| Layer | Surface | Granularity |
|---|---|---|
| Named expression | ../higgsfield-soul/SKILL.md § Micro-Expressions (Suppressed Smile, Cold Calculation…) | A whole emotion in one label |
| Behavior channel | ../../vocab.md § Emotion as Visible Behavior — Channels (breath, jaw tension, eye behavior…) | Emotion → observable behavior |
| Action Unit (this skill) | AU codes | Emotion → named muscle |
The channels are the behavioral substrate; AUs are the anatomical substrate. A named expression like "Quiet Devastation" = a channel mix (glassy eyes + tight jaw) = an AU combo (AU1 + AU15 + AU17 + AU24). Reach for FACS when a named expression is too coarse and you need the specific muscles.
Provenance and the "Not a Guarantee" Rule
Two different kinds of claim live in this skill — keep them apart:
-
The AU vocabulary is standard science. Which code means which muscle, and the classic emotion→AU prototypes (EMFACS), are stable, citeable ground truth. Treat the AU reference table and the emotion recipes as reliable.
-
Seedance's interpretation of AU codes is [EMPIRICAL]. The
seedance_2_0spec exposes no FACS field, no expression enum, nothing facial (verified against the spec snapshot, 2026-06-27). So "writeAU12and get a smile" is a prompt convention the model happens to interpret well — not a documented capability. Practitioner report: success rate is high, but codes do not guarantee the exact expression, and a multi-AU prompt may render most but not all of the units.
The rule: present FACS as a strong heuristic, and let the repo's iteration
discipline (../higgsfield-prompt/SKILL.md § The Iteration Rule) confirm it on
the user's own material. Same provenance class as the Seedance Prompt-Craft Laws
(../higgsfield-seedance/SKILL.md § Prompt-Craft Laws). Never tell the user a
FACS prompt is deterministic.
If a future Seedance spec adds a real facial/expression parameter, the spec-drift tripwire should catch it — at which point this "no model field" claim is what needs updating.
The Plan-First Workflow
The single most important discipline, and the one practitioners get wrong:
Plan the expressions you need → generate a FACS sheet for only those → write the codes into the prompt.
Do not generate the full 49-AU reference sheet and then cherry-pick a few. That is explicitly the wrong move: a sheet asked to render all 49 units spreads the image model thin, captions come out unreadable, and you've paid for 45 panels you'll never use. You get better identity consistency and cleaner labels by generating a small sheet of exactly the 3–6 expressions the scene calls for.
The three steps:
- Plan — name the emotional beats of the shot. "She masks fear as reassurance" → fear (AU1+AU2+AU4+AU5) flickering under a forced smile (AU12 alone, no AU6). Decide the AU set before touching an image model.
- Generate the sheet (optional but recommended for consistency) — a small labelled grid of just those expressions, on the actual character. See § Step 1.
- Write the prompt — codes into the Seedance prompt, beat-synced if the shot has a time structure. See § Step 2.
The sheet is optional. Codes work in a text-to-video prompt with no image at all (the practitioner generated whole videos from codes alone). Generate a sheet when you need the character's face to stay consistent across shots — same reason you'd use a Soul ID sheet.
Step 1 — Generate the FACS Reference Sheet
A FACS sheet is a labelled-grid image — the character's face in each target
expression, captioned with its AU code — used as an identity + expression
reference. It is a reference-sheet image task; the image-model mechanics live in
../higgsfield-gpt-image-2/SKILL.md (Format A — structured grids) and the
reference-sheet-workflow.md satellite there. This section owns the
FACS-specific prompt.
Models: GPT Image 2 and Nano Banana Pro both work; Nano Banana Pro tends to read more cleanly. Captions sometimes come out unreadable — iterate.
The sheet prompt (parameterize the character + the AU list)
Upload the character image, then prompt the image model. Replace the character description and trim the AU list to only the units you planned — do not paste all 49 unless you genuinely need them:
Create a clean educational FACS Action Unit expression grid featuring
[CHARACTER — e.g. a realistic adult female character]. Use minimal studio
lighting, neutral white background, high readability, professional facial
anatomy reference-sheet aesthetic, realistic skin texture, consistent identity
across all panels.
COLOR SYSTEM: soft pastel color coding by category, sheet kept minimal and
elegant —
Forehead & Brow AUs: soft pastel blue
Eye & Eyelid AUs: soft pastel lavender
Nose & Cheek AUs: soft pastel peach
Lip & Mouth AUs: soft pastel pink
Head Movement AUs: soft pastel mint
Eye Direction AUs: soft pastel cyan
Special / Misc AUs: soft pastel beige
Apply color subtly: panel background tint, thin borders, small label accents.
Keep colors soft, muted, professional.
Include these Action Units (one captioned panel each):
[PASTE ONLY THE AUs YOU PLANNED — e.g.
AU6 Cheek Raiser, AU12 Lip Corner Puller, AU1 Inner Brow Raiser,
AU4 Brow Lowerer, AU15 Lip Corner Depressor]
(The full category→AU list to draw from is in § AU Code Reference below.)
The LLM can mislabel AUs — verify
The image model is an LLM — it can put the wrong muscle under a code. The
sample sheet that circulates labels nostril dilation AU82, while standard
FACS (and the practitioner's own dialogue example) uses AU38 for the same
action; AU8 (lips toward each other) appears in real prompts but is absent from
that sheet entirely. Treat any auto-generated sheet as a draft: check the
panels against the § AU Code Reference table, and against a trusted external
reference such as the FACS cheat sheet at melindaozel.com/facs-cheat-sheet.
This mislabeling risk is the strongest reason to plan a small, verifiable sheet
rather than trust a 49-panel dump.
Step 2 — Put AU Codes in the Seedance Prompt
Once you know the AUs, they go into an ordinary Seedance 2.0 prompt. Everything
in ../higgsfield-seedance/SKILL.md still applies — six slots, Prompt-Craft
Laws, preflight linter. FACS only changes the face specification.
Two specification styles — test both
| Style | Looks like | When |
|---|---|---|
| Codes only | AU10, AU20, AU27, AU45 | Beat lists, dense schedules; the practitioner ran whole videos this way and the model interpreted most units well |
| Codes + short anatomical description | AU6 (cheek raiser, orbicularis oculi tightens, crow's feet) + AU12 (zygomaticus pulls corners up) | When a unit keeps getting missed; the description gives the model a second, redundant signal |
Neither is universally better. Test both on your material — codes-only is terser and often enough; add descriptions for the units the model drops.
The hard limits
- 3–4 expressions max per generation. Accuracy falls as you stack AUs — more expressions in one prompt means more the model renders approximately. A clip built on 3–4 well-chosen beats lands far more reliably than one cramming 10. (The 14-beat example below works because each beat is short and singular — but expect some beats to read only partially.)
- The character photo is optional. Codes function with no image (text-to-
video). Attach
@Image1only when you need the character's identity to stay consistent across shots — it changes consistency, not whether the AUs fire. - Still describe a scene, not just a face. The Seedance filter reads full-
scene intent (
../higgsfield-seedance/SKILL.md§ The Filter Model). Keep the framing/lighting/mood slots present — a bare list of AU codes with no scene is thin. The examples below all carry a Style/Mood header for this reason.
Beat-synced structure
For a timed performance, give each beat a number or a time range and its AU set:
1: AU10
2: AU20
3: AU22
4: AU45
or with time ranges and descriptions:
2-4s: Happy — AU6 (cheek raiser, crow's feet) + AU12 (lip corners up), Duchenne smile
4-6s: Sad — AU1 (inner brow raise) + AU4 (brow knit) + AU15 (lip corners down)
The per-beat time labels obey the same runtime arithmetic as any multi-beat
Seedance prompt (../higgsfield-seedance/SKILL.md § Runtime arithmetic): the
beats must sum to the stated duration. Note these are expression beats within a
continuous close-up, not hard cuts — keep the camera move singular (a slow
push-in) so the model doesn't read the schedule as a shot list.
AU Code Reference
The Action Units from the standard sheet, grouped by facial region. Use this to build a sheet prompt and to verify an auto-generated sheet's labels.
Forehead & Brow
| Code | Action |
|---|---|
| AU1 | Inner Brow Raiser |
| AU2 | Outer Brow Raiser |
| AU4 | Brow Lowerer |
| AU71 | Brow Furrow |
| AU72 | Brow Bulge |
Eye & Eyelid
| Code | Action |
|---|---|
| AU5 | Upper Lid Raiser |
| AU7 | Lid Tightener |
| AU41 | Lid Droop |
| AU42 | Slit Eyes |
| AU43 | Eyes Closed |
| AU44 | Squint |
| AU45 | Blink |
| AU46 | Wink |
Nose & Cheek
| Code | Action |
|---|---|
| AU6 | Cheek Raiser |
| AU9 | Nose Wrinkler |
| AU11 | Nasolabial Deepener |
| AU82 | Nostril Dilator |
| AU83 | Nostril Compressor |
Lip & Mouth
| Code | Action |
|---|---|
| AU10 | Upper Lip Raiser |
| AU12 | Lip Corner Puller |
| AU13 | Sharp Lip Puller |
| AU14 | Dimpler |
| AU15 | Lip Corner Depressor |
| AU16 | Lower Lip Depressor |
| AU17 | Chin Raiser |
| AU18 | Lip Pucker |
| AU20 | Lip Stretcher |
| AU22 | Lip Funneler |
| AU23 | Lip Tightener |
| AU24 | Lip Pressor |
| AU25 | Lips Part |
| AU26 | Jaw Drop |
| AU27 | Mouth Stretch |
| AU28 | Lip Suck |
| AU84 | Tongue Up |
| AU85 | Tongue Out |
Head Movement
| Code | Action |
|---|---|
| AU51 | Head Turn Left |
| AU52 | Head Turn Right |
| AU53 | Head Up |
| AU54 | Head Down |
| AU55 | Head Tilt Left |
| AU56 | Head Tilt Right |
| AU57 | Head Forward |
| AU58 | Head Back |
Eye Direction
| Code | Action |
|---|---|
| AU61 | Eyes Turn Left |
| AU62 | Eyes Turn Right |
| AU63 | Eyes Up |
| AU64 | Eyes Down |
Special / Misc
| Code | Action |
|---|---|
| AU81 | Chewing |
Numbering caveat. Some codes on the circulating sheet are non-standard or reassigned relative to canonical FACS — notably the AU82 (vs standard AU38) nostril dilator noted in § Step 1, the AU71/AU72 brow codes, and the AU82–AU85 range. Canonical FACS also has codes this sheet omits (e.g.
AU8lips toward each other, used in real prompts). Use this table for this sheet's convention, but when a code's behavior surprises you, cross-check melindaozel.com/facs-cheat-sheet.
Emotion → AU Recipes
When the user asks "which code for anger / fear / disgust," these are the standard EMFACS emotion prototypes — the canonical AU combinations behavioral science maps to each basic emotion. Reliable as recipes; the Seedance rendering of them is still [EMPIRICAL].
| Emotion | Core AUs | Reads as |
|---|---|---|
| Happiness (genuine / Duchenne) | AU6 + AU12 | Eyes-involved smile, crow's feet |
| Happiness (polite / forced) | AU12 only (no AU6) | Mouth smiles, eyes don't — the uncanny/forced smile |
| Sadness | AU1 + AU4 + AU15 | Oblique brows, down-turned mouth |
| Surprise | AU1 + AU2 + AU5 + AU26 | Raised brows, wide eyes, jaw drop |
| Fear | AU1 + AU2 + AU4 + AU5 + AU7 + AU20 | Raised+knit brows, wide eyes, stretched lips |
| Anger | AU4 + AU5 + AU7 + AU23 | Lowered brow, hard stare, tightened lips |
| Disgust | AU9 + AU15 + AU16 | Nose wrinkle, lowered lip corners |
| Contempt | AU12 + AU14 (one-sided) | Unilateral smirk |
Mixing for nuance. The interesting expressions are blends: a forced-warmth
mask is genuine-smile muscles (AU6+AU12) fighting fear muscles (AU1+AU7) in the
same frame; "bitter amusement" is AU12 with no AU6 plus a faint AU4. Build a
blend by listing the AUs of both emotions and letting the conflict read — that is
the FACS path to ../higgsfield-soul/SKILL.md § Micro-Expressions like
Suppressed Smile and Nervous Composure.
Dialogue & Monologue Facial Acting
The reason FACS matters: facial expressions in isolation are a parlor trick; the payoff is acting during speech — close-up monologue and dialogue where the face carries subtext the words don't say. This is where forced smiles, leaking fear, and mixed emotions during a line land.
The structure
Schedule one AU set per spoken beat, aligned to the line being delivered:
Beat 1 (0-1s): AU5 + AU38 (upper lid raiser + nostril dilator — genuine fear, pre-dialogue)
Beat 3 (2-4s): AU12 + AU6 (Duchenne smile — forced warmth) — delivers "everything's fine"
Beat 5 (5-6s): AU7 (lid tightener — eyes betraying the fear the smile hides)
Beat 7 (8-10s): AU4 + AU24 (brow lowerer + lip presser — seriousness cracking through)
The art is the contrast within a beat: the mouth performs safety (AU12) while the eyes leak terror (AU7) — the audience reads both at once. Keep each beat to 1–2 AUs so the performance stays legible.
Combine with audio + lip-sync
A dialogue FACS prompt pairs naturally with the audio conditioning layer:
- Use the
[AUDIO: Xs]script block (../higgsfield-audio/SKILL.md§ Audio as a Conditioning Input) to place the spoken lines — quoted text generates speech with automatic lip-sync, so the mouth shapes the words while your AU schedule drives the expressive muscles around them. - Lip-sync quality rises with a tight close-up + a strong
@Image1identity reference (the audio skill's Lip-Sync Rules) — the same close framing FACS wants anyway. - Keep the FACS schedule to the brow/eye/cheek units during spoken beats; let the audio block drive the lip/jaw shaping for the words, and reserve explicit lip/jaw AUs (AU12, AU15, AU24) for the expressive overlay, not the phonemes.
Worked Examples
All three are lightly normalized from practitioner prompts. Run each through the
preflight linter before generating (python3 scripts/seedance_lint.py --preflight --model seedance_2_0 "<prompt>").
A — Beat-synced expression sweep (codes-only)
**Model:** Seedance 2.0
**Aspect ratio:** 1:1 **Duration:** 15s
Use the provided character @Image1 as the fixed identity reference.
Cinematic tight close-up, subtle neutral background, high facial clarity, slow
micro push-in, shallow depth of field. 14 beats, beat-synced:
1: AU10 2: AU20 3: AU22 4: AU23 5: AU27 6: AU28 7: AU45
8: AU53 9: AU61 10: AU62 11: AU64 12: AU85 13: AU84 14: AU46
Uneasy, hypnotic, controlled mood.
**Camera:** slow push-in
(Codes-only, one AU per beat — expect most to land, some only partially; that is the documented behavior, not a failure to fix by over-prompting.)
B — Emotion arc (codes + anatomical description)
**Model:** Seedance 2.0
**Aspect ratio:** 16:9 **Duration:** 15s
**Style & Mood:** photoreal, face and shoulders only, bare skin no makeup, soft
diffused light, plain white background, shallow depth of field.
Timeline:
0-2s: Neutral resting face, eyes forward, relaxed brow and lips.
2-4s: Happy — AU6 (cheek raiser, crow's feet) + AU12 (lip corners up and out),
Duchenne smile, slight eye squint from cheek push.
4-6s: Sad — AU1 (inner brow raise, oblique brow) + AU4 (brow knit) + AU15 (lip
corners down), eyes slightly glassy.
6-8s: AU61 then AU62 — gaze shifts left, then right, head still.
8-11s: AU46 left wink, then AU46 right wink, subtle smirk between.
**Camera:** static medium close-up
C — Fear masked as reassurance (dialogue + FACS beats)
**Model:** Seedance 2.0
**Aspect ratio:** 16:9 **Duration:** 15s
Use the provided character @Image1 as the fixed identity reference.
Dim interior, single warm lamp, slight low angle, handheld micro-sway, shallow
depth of field.
[AUDIO: 0s] "Hey, hey — everything's fine, okay? We're just gonna play a game
where we stay really quiet. Can you do that for me?"
Beat 1 (0-1s): AU5 + AU38 (upper lid raiser + nostril dilator — genuine fear, pre-dialogue)
Beat 2 (1-2s): AU45 (blink — composing the mask)
Beat 3 (2-5s): AU12 + AU6 (forced Duchenne warmth) — "everything's fine, okay?"
Beat 4 (5-8s): AU2 + AU12 (smile + outer brow raise — performing fun) — "we're just gonna play a game"
Beat 5 (8-10s): AU4 + AU24 (brow lowerer + lip presser — seriousness cracking) — "where we stay really quiet"
Beat 6 (10-15s): AU6 + AU17 + AU1 (eyes smiling while chin trembles, desperation) — "can you do that for me?"
Devastating contrast between performed safety and visible terror — the face never
fully commits to either; the audience reads both at once.
**Camera:** handheld micro-sway, slow push-in
Template version of this beat structure:
../../templates/seedance/facs-expression-beats.md.
Related Skills
../higgsfield-seedance/SKILL.md— the base prompt grammar every FACS prompt obeys (six slots, Prompt-Craft Laws, preflight linter, § Voice Rewrite "physics not emotion" — FACS is its muscle-level case)../higgsfield-soul/SKILL.md§ Micro-Expressions — 19 named expressions; FACS is the precise-control layer beneath them../higgsfield-audio/SKILL.md§ Audio as a Conditioning Input — the[AUDIO: Xs]block + lip-sync for dialogue FACS../higgsfield-gpt-image-2/SKILL.md— Format A reference-sheet image mechanics for the FACS sheet../../vocab.md§ Emotion as Visible Behavior — Channels — the behavioral sibling of the AU vocabulary../../templates/seedance/facs-expression-beats.md— beat-synced AU schedule template
Reviews
No reviews yet. Be the first.
Related
Frontend Slides
Create beautiful slides on the web using Claude's frontend skills
Guizang Ppt Skill
AI-agent Skill for generating polished HTML slide decks: editorial magazine and Swiss layouts, image prompts, social covers, and a WebGL/low-power presentation runtime.
orchestration-patterns
>
mh install skills/higgsfield-facs