Skill v1.0.1
currentAutomated scan100/100+2 new
version: "1.0.1" name: higgsfield-facs description: "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)." user-invocable: true metadata: tags: [higgsfield, seedance, seedance-2.0, facs, action-units, facial-expression, micro-expression, dialogue, lip-sync, performance] version: 1.0.0 updated: 2026-06-27 parent: higgsfield
Higgsfield FACS Director
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-CraftLaws, preflight linter. FACS only changes how you specify the face: AU codesinstead of (or alongside) emotion words. It is the muscle-level case of theVoice 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_0
spec exposes no FACS field, no expression enum, nothing facial (verified against the spec snapshot, 2026-06-27). So "write AU12 and 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, thespec-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 studiolighting, neutral white background, high readability, professional facialanatomy reference-sheet aesthetic, realistic skin texture, consistent identityacross all panels.COLOR SYSTEM: soft pastel color coding by category, sheet kept minimal andelegant —Forehead & Brow AUs: soft pastel blueEye & Eyelid AUs: soft pastel lavenderNose & Cheek AUs: soft pastel peachLip & Mouth AUs: soft pastel pinkHead Movement AUs: soft pastel mintEye Direction AUs: soft pastel cyanSpecial / Misc AUs: soft pastel beigeApply 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 @Image1 only 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: AU102: AU203: AU224: AU45
or with time ranges and descriptions:
2-4s: Happy — AU6 (cheek raiser, crow's feet) + AU12 (lip corners up), Duchenne smile4-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 orreassigned** relative to canonical FACS — notably the AU82 (vs standard AU38)nostril dilator noted in § Step 1, the AU71/AU72 brow codes, and the AU82–AU85range. Canonical FACS also has codes this sheet omits (e.g.AU8lips towardeach 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:** 15sUse the provided character @Image1 as the fixed identity reference.Cinematic tight close-up, subtle neutral background, high facial clarity, slowmicro push-in, shallow depth of field. 14 beats, beat-synced:1: AU10 2: AU20 3: AU22 4: AU23 5: AU27 6: AU28 7: AU458: AU53 9: AU61 10: AU62 11: AU64 12: AU85 13: AU84 14: AU46Uneasy, 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, softdiffused 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 (lipcorners 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:** 15sUse the provided character @Image1 as the fixed identity reference.Dim interior, single warm lamp, slight low angle, handheld micro-sway, shallowdepth of field.[AUDIO: 0s] "Hey, hey — everything's fine, okay? We're just gonna play a gamewhere 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 neverfully 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
</content>