Skip to main content
ClaudeWave
Skill475 repo starsupdated 14d ago

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).

Install in Claude Code
Copy
git clone --depth 1 https://github.com/OSideMedia/higgsfield-ai-prompt-skill /tmp/higgsfield-facs && cp -r /tmp/higgsfield-facs/skills/higgsfield-facs ~/.claude/skills/higgsfield-facs
Then start a new Claude Code session; the skill loads automatically.

SKILL.md

# 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-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 [→](#what-facs-is)
- **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** [→](#provenance-and-the-not-a-guarantee-rule)
- **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 [→](#the-plan-first-workflow)
- **3–4 expressions max per generation.** Accuracy drops as you stack more AUs into one clip [→](#step-2-put-au-codes-in-the-seedance-prompt)
- Two specification styles — **codes-only** (`AU12`) vs **codes + short anatomical description**; test both, neither is universally better [→](#step-2-put-au-codes-in-the-seedance-prompt)
- The reference sheet is a **labelled-grid image** (GPT Image 2 / Nano Banana Pro); the LLM can **mislabel AUs**, so iterate and verify [→](#step-1-generate-the-facs-reference-sheet)
- The character photo is **optional** — codes work without it; attach it only for identity consistency [→](#step-2-put-au-codes-in-the-seedance-prompt)
- Common emotions decompose to standard AU recipes (Duchenne smile = AU6+AU12; sadness = AU1+AU4+AU15) [→](#emotion-au-recipes)
- The payoff is **dialogue / monologue**: AU-per-beat schedule, combined with the `[AUDIO: Xs]` lip-sync block; every line gets pre / during / post-line beats [→](#dialogue-monologue-facial-acting)
- [OFFICIAL] Body-level micro-beat recipes beyond the face (throat, breath, skin, posture) + the no-perfect-sync stagger (0.3–0.5s) and listeners-in-bokeh rules [→](#physical-micro-beats-the-body-beyond-the-face)

---

## 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, the
> spec-drift tripwire should catch it — at which point this