OpenFaceFX Studio

booting…
00:00.000 the schematic face blends visemes in real time — a rig-neutral preview

A resizable dock — drag the dividers to resize the sections, and use each pane's dropdown to put any panel (Preview · Face Graph · Curves · Phonemes) in any section. All live on one playhead: drag a curve's keyframe to edit · click a rig node to inspect · click the strip to seek. Layout is remembered.

Waveform & phoneme alignment

A live spectrogram of the loaded audio (or a synthetic energy envelope when there's no clip), with the phonemes (as IPA) over the words they belong to. Drag a boundary between two phonemes to fine-tune its timing — the viseme curves re-solve on release (Ctrl+Z to undo). Click elsewhere to seek. Run QA flags cue-timing outliers & out-of-vocabulary words. (Phonemes are standard ARPABET internally; IPA is display-only.)

Keyboard: Tab to the strip, then ← → select a boundary (Home/End first/last) · Shift+← → move it one frame (Alt: ten) — the curves re-solve when you pause · , . step the playhead a frame anywhere.

Animation curves

Coarticulated viseme & gesture curves over the phoneme & word strip. Click a curve to select it · drag its dots to move a key · double-click to add · alt/right-click a dot to delete · drag on empty space to box-select keys, then drag them together or press Delete · Ctrl+Z to undo.

Keyboard: Tab to the canvas, then ← → select a key (Home/End first/last, Ctrl+A all) · Shift+← → nudge a frame (Alt: ten) · ↑ ↓ nudge the value 0.01 (Shift: 0.1) · Enter adds a key at the playhead · Delete removes · PgUp/PgDn switch channel · in the channel list, ↑ ↓ move, Enter selects, V shows/hides.

Events

0

Keyboard: Tab to the timeline, then ← → jump the playhead to the previous / next event.

A typed event layer auto-authored from the speech itself (derive_events): emphasis beats on stressed syllables and phrase markers at pauses — the same accents the gesture layer reads. Click an event to seek. Events ride in the track JSON and export as engine notifies (Unity/Unreal).

Face Graph

Keyboard: Tab to the graph, then ← → (Home/End) select a node — the Inspector follows.

Click a rig-output node (right column) to edit it in the Inspector → tune each viseme's weight, add/remove one, clone it, or (on a clone) set a constant Value or a nonlinear Response. Press play — each node fills like a level meter (its live value) and the links pulse as the signal flows. Pick a target rig preset above.

Mapping

The phoneme → viseme weight table — the mapping the solver applies before coarticulation (the built-in Oculus-15 table). Edit a weight, rename a target, or add/remove one. Turn on apply on Generate and your edits drive the next take (curves & preview change). Download a canonical openfacefx.mapping JSON to reuse from the CLI/API (--mapping). This is a different layer from the Face Graph (viseme → rig targets).

Export

Every OpenFaceFX exporter, run in-browser. Retarget presets apply where relevant.

AI Assistant

no key
◒OpenFaceFX Studio

Starting the in-browser pipeline…

CPython + numpy → WebAssembly via Pyodide. Nothing leaves your machine.