00:00 / 00:00

Persona

Parameter Bindings

Applies toLive2D

The parameter bindings editor lets you calibrate tracking inputs and configure input sources, blend weights, input and output ranges, and custom response curves, shaping how tracking signals drive Cubism parameters.

Persona prioritizes the model's native .vtube.json configuration file, allowing models tuned in VTube Studio to load with their existing parameter mappings intact. The bindings editor lets you refine and expand upon these mappings. All modifications are saved independently to a dedicated configuration sidecar beside the model, never altering the original .vtube.json.

Opening the Editor

Select a Live2D layer in the layer list and expand Parameters at the bottom of its inspector panel (collapsed by default).

This page covers Live2D tracking bindings. On VRM avatars, face tracking drives blendshape presets and humanoid bones directly, while gamepads and controllers map through virtual binding targets.

Each input source is presented as a card listing the parameters it drives; clicking any parameter row expands its full binding detail and response curve editor in place inside the card. Filter state, folded cards, the currently expanded binding, and open calibration strips are remembered per model instance for the session.

Input Cards and Toolbar

The toolbar at the top of the panel provides search, filtering, and batch actions:

  • Search Inputs and Parameters: Searches input labels, raw IDs, custom binding names, and bound parameter names or IDs.
  • Inputs Shown: Switches between In Use and All Inputs. In Use, the default when the model has bindings, shows only the inputs that bindings read; All Inputs shows every available input source.
  • Input Family: Filters cards by category: All Families, or Head, Eyes, Brows, Mouth, Hands, Mouse, Time, Random, the 52 raw ARKit channels under Perfect Sync, and dedicated groups for connected controller profiles.
  • Add Binding: Picks any input from the full vocabulary, pins its card in the In Use view, and opens its parameter picker immediately.
  • Calibrate All: Records and calibrates every input in use that is receiving data, all at once (see Input Calibration below).
  • Reset Calibration: Clears the calibration of every input on this model at once as a single undoable step.
  • Collapse All / Expand All: Folds or unfolds every input card in the list at once.

The Hands group uses webcam hand tracking; see Webcam Tracking. The Mouth group also includes microphone-driven Voice* audio inputs; see Lip Sync.

Each input card's header shows:

  • The input's localized label and raw ID
  • Its live value and level bar
  • A Calibrate button (calibrated inputs also show a Calibrated badge and range ticks; Random input cards show a Schedule button instead)
  • An Add Parameter (+) button

Beneath the header, a vertical rail connects the parameters driven by that input. Each parameter row shows:

  • On the left, a response curve mini-plot with a live sampling dot, so the curve shape is visible at a glance
  • The binding name and raw parameter ID
  • The inRange → outRange summary and the smoothing value
  • The parameter's live output

Raw IDs match .vtube.json, .cdi3.json, and the Plugin API. They are selectable text, so you can copy them.

Parameter rows and the parameter picker may display the following status badges:

TagMeaning
+NThis binding sums N additional input sources
physicsPhysics simulation also writes to this parameter
drives physicsPhysics simulation reads this parameter as an input (shown in picker)
missingThe bound parameter ID does not exist on the active model
replaces ⋯Selecting this moves an existing binding rather than creating a conflict
adds to ⋯A random pulse binding layers over the existing binding on this parameter instead of replacing it

If an input is summed into another binding as a secondary term, the bottom of its card displays Also summed into with clickable chips that jump directly to and expand that binding.

Clicking Add Parameter (+) at the top right of a card or Add Binding in the toolbar opens the parameter picker. Parameter names and groups are loaded from the model's .cdi3.json file. If the file is missing, the picker will be empty because parameter labels cannot be determined.

Parameters already driven by another binding remain selectable. The row identifies the current driver (replaces ⋯), and selecting it moves that binding to the current input rather than creating a duplicate rule. This prevents conflicts where two rules fight over the same parameter. The parameter's existing configuration (output range, smoothing, curve, and custom name) is preserved; only the input source and its input range change.

Mouse and Time Inputs

The Mouse and Time groups need no camera:

InputIDRangeDescription
Cursor XMousePositionX−1..1Cursor position across the screen it is on, increasing rightward
Cursor YMousePositionY−1..1Cursor position across the screen it is on, increasing upward
Time (24-Hour)Time24h0..1Fraction of the local day
Time (12-Hour)Time12h0..1Like Time24h, but repeating at noon and midnight

The mouse IDs follow VTube Studio's naming. Mouse input works independently of face tracking and the tracking master toggle, so it can animate gaze, head angles, or desktop pet paws with the camera off. Only the cursor position is available as an input; mouse buttons work as shortcut triggers instead.

Time inputs read the local wall clock of the desktop computer running Persona, even when you edit from the Web Console. At 06:00, for example, Time24h reads 0.25 and Time12h reads 0.5. Bindings keep fractional seconds for smooth motion; the live readout truncates to whole seconds, so it stays still at rest and wraps only at noon or midnight.

The clock is sampled once per rendered frame and shared by Live2D and VRM avatars. It keeps driving bindings while face tracking is off or disconnected. Binding a parameter to time, including moving an existing binding there, sets its smoothing to zero (smoothing: 0), since smoothing would otherwise sweep backwards across the midnight or noon wrap. Matching curve endpoints avoid a jump at the cycle boundary.

In a binding that mixes face and time inputs, When Tracking Is Lost decides what happens when face tracking drops. Return to Idle (idle) crossfades toward the time-only result; Keep Last Pose (hold) keeps the last face pose while the clock keeps advancing.

Random Pulse Inputs

The Random group provides eight independent inputs, Random Pulse 1 through Random Pulse 8 (RandomPulse1–RandomPulse8, range 0..1). Each pulse rests at 0 and fires to 1 on its own schedule without a camera, regardless of whether face tracking is enabled or connected, making it easy to drive ear twitches, tail flicks, blinks, or accessory glints at random moments.

Click Schedule on any random pulse card to open its timing strip (all times in seconds, with wait and duration re-rolled on every firing; click Reset to restore the defaults):

ControlRangeDefaultDescription
Time Between0.1–36000.5 → 4.5Shortest and longest wait from the end of one firing to the start of the next
Duration0.1–36000.58Shortest and longest firing, fades included; set both ends the same for a fixed length
Fade In0–36000.29Rise from 0 to 1 at the start of a firing
Fade Out0–36000.29Fall from 1 to 0 at the end of a firing

If a firing is shorter than Fade In and Fade Out combined, both fades shrink in proportion. The default schedule matches VTube Studio's auto-blink timing.

A binding whose inputs are all random pulses layers over whatever else drives its parameter, so it can share that parameter with another binding:

  • In the parameter picker, a parameter already driven by another binding is marked adds to ⋯ instead of replaces ⋯. For example, ParamEyeLOpen can stay bound to EyeOpenLeft while a RandomPulse1 binding closes the eye on each firing.
  • During a firing, the parameter moves from its current value toward the firing end of the binding's output range (outRange[1], or the end its curve moves toward); between firings it writes nothing and leaves the underlying value alone (unless its rest output differs from the parameter's default, in which case it holds that rest value when nothing else drives the parameter).
  • A new binding on a random pulse defaults its output range from the parameter's default value to its far end (or 1 → 0 for a 0..2 parameter resting at 1), with Smoothing set to 0 since the pulse's own Fade In and Fade Out already shape its rise and fall.
  • Under Combined Inputs, a random-pulse binding can only combine with other random pulses.

Input Calibration

Calibration adjusts how your physical motion or expression reach maps onto the input's natural span, before any binding reads it. Click Calibrate on an input card to open its calibration strip; Time and Random inputs have none.

Because calibration runs upstream of bindings, every binding on the avatar shares the calibrated signal, as do inputs injected through the Plugin API and VRM controller bindings.

The calibration strip has these controls:

  • Low Reach and High Reach: Your minimum and maximum comfortable reach, mapped to the ends of the input's natural span. For FaceAngleZ (Head Lean), calibration maps onto ±30° to match the other head angles and standard ±30° rig bindings.
  • Rest: Where the input sits when you relax, mapped to the midpoint of the natural span, so an uneven reach on either side still centers cleanly at rest. Only inputs that rest mid-span get a Rest handle and numeric field: signed inputs such as head angles, eye gaze, and controller sticks, plus MouthSmile and VoiceFrequencyPlusMouthSmile.
  • Mirror: On inputs with Rest, keeps Low Reach and High Reach symmetric around it; dragging Rest then shifts the entire band.

To record your reach instead of dragging the handles:

  1. Click Record on the card (or Calibrate All in the toolbar).
  2. Start at rest: the first reading sets Rest.
  3. Move to both extremes. Low Reach and High Reach widen automatically.
  4. Click Stop when finished.

Inputs that move less than 2% of their span during a recording are left untouched. Click Reset on a card to clear that input's calibration, or Reset Calibration in the toolbar to clear every input's calibration on the model at once.

Calibration applies a piecewise linear mapping that extrapolates past the calibrated reach. Whether the final parameter output clamps is set per binding by Clamp to Range.

Binding Detail

Clicking any parameter row under an input card expands its full editor in place inside the card. The header shows the input and the parameter it drives, each with its raw ID.

  • Change Parameter: Click the parameter in the header to retarget the binding. Inputs, input range, smoothing, curve shape, and custom name stay as they are; only the output range updates to match the new parameter's native span. If another binding already drives the parameter you pick, this binding replaces it.
  • Remove: Deletes the binding.
  • Name: Renames the binding. Press Esc to discard an unsaved rename; clear the name to restore the parameter's own name.

If a bound parameter ID does not exist on the active model, the row is marked as missing to indicate that the binding currently has no effect (common when swapping models).

Inputs and Weights

Combined Inputs lists all input sources feeding into this binding (click Add Input to sum additional inputs), each with an independent multiplication weight ×. Signals are summed after weighting before passing into the mapping pipeline, enabling multi-signal composite drivers. Weights commit when the input field loses focus and are saved to disk.

If an input lacks data in the current frame, it evaluates to 0. A binding is only skipped if none of its inputs provide data. This allows composite formulas like blink × −0.8 + wide × 0.8 to function reliably, with constant offsets absorbed by the input range.

The first input in the list determines which input card owns the binding. Removing the first input automatically files the binding under the next input source. The final input cannot be removed.

Smoothing

Smoothing ranges from 0 to 100, adjustable via slider or numeric input. It uses a 1€ (One Euro) filter that adapts to speed, rather than a fixed amount of smoothing: fast motions pass through with minimal latency, while jitter and noise are damped when you hold still.

Binding a parameter to a Time input (Time24h or Time12h) automatically resets smoothing to 0, preventing a reverse sweep when the clock wraps at noon or midnight.

Response Curves

Every binding displays a single 2D response plot in the binding's real units, combining the input and output ranges, cubic Bézier curve shaping, and a live signal readout. The X-axis spans the summed input's natural range and the Y-axis the target parameter's native range. If the output range extends past the parameter's own range, the area beyond is shaded, since Cubism clamps the parameter there. A live indicator dot moves along the curve to show the current input and output position in real time.

Ranges

The curve's two endpoints are the binding's input and output ranges. You can drag either endpoint horizontally (input) or vertically (output) directly on the plot, or type exact values into the Input (Start → End) and Output (Start → End) fields below the plot.

Adjusting the input range modifies tracking sensitivity and trigger thresholds. For instance, mapping MouthSmile from 0.2–0.8 to −1..1 reaches maximum output when the input hits 0.8. Clicking Invert in the plot toolbar (or swapping the output start and end values) reverses the mapping direction.

When creating a new binding, the input range defaults to the input's native span rather than a generic 0..1: head angles use degrees, ARKit channels use 0..1, and other inputs match their own units.

Below the plot, Clamp to Range (clampOutput in .persona.json) controls what happens when the input goes past the input range:

  • When on, the output stops at the ends of the output range.
  • When off, a binding without a shaped curve (such as a new binding, or one reset with Straighten) extrapolates linearly up to the parameter's physical min and max. A curve shaped with points or a preset holds its end values.

New bindings you add start with it on. Bindings imported from .vtube.json keep VTube Studio's own clamp setting, and a binding saved without clampOutput reads as off.

Pen Tool Gestures

The curve editor uses vector pen-tool gestures with smooth and sharp points:

  • Add Point: Click anywhere along the curve to insert an anchor point. In a curved stretch, the new point lands on the curve, so the shape is kept.
  • Move Point: Drag an anchor point to reposition it; dragging carries its handles along, preserving arrival and departure angles. Dragging either of the two range endpoints in X or Y directly adjusts the input and output ranges.
  • Bend Curve: Drag a square handle to reshape the curve. On a smooth point, the opposite handle turns in line to preserve smoothness while keeping its length.
  • Break Tangents (Corner): Hold Alt (Option on macOS) while dragging a square handle to move it independently, creating a sharp corner angle.
  • Toggle Smooth / Sharp: Hold Alt/Option and click an interior anchor point to toggle between sharp and smooth. Sharp retracts handles onto the point; smooth extends collinear handles aimed through neighboring anchors.
  • Delete Point: Right-click an interior anchor point to remove it; the two range endpoints are permanently retained.

When an interior anchor is selected, X and Y fields below the plot take exact coordinates in axis units. Typing a value sets a flat dead zone or a trigger threshold more precisely than dragging.

Mirror, Presets, and Quick Actions

The toolbar above the curve canvas provides:

  • Mirror: Enforces point symmetry around the center of the binding's range: editing an anchor, handle, or step mode on one side automatically mirrors the change on the opposite side. Signed bindings with a centered range and symmetric curve open with Mirror enabled automatically.
  • Presets: Replaces the whole curve with a classic transfer function shape between the current input and output endpoints: Linear, Step, Invert Step, Bezier, Ease In, Ease Out, S-Curve, Threshold, or Steps.
  • Invert: Swaps the two output range endpoints.
  • Straighten: Removes all interior points and restores a straight linear segment between the current input and output endpoints.

Physics

Persona inspects the model's .physics3.json file and flags how parameters interact with physics simulation:

  • drives physics: The physics engine uses this parameter as an input. Binding tracking to this parameter is standard practice; many rigs route head rotation through physics to animate hair or accessory sway.
  • physics: The physics engine actively computes and writes to this parameter. Binding tracking to it creates conflicting writes, which the inspector highlights with a red warning.

Live Values and Scrubbing

When tracking is active, the level bars on input cards, the mini-plots on parameter rows, and the sampling dot on the expanded response curve reflect live tracking values in real time.

Parameter rows and the expanded binding also show the parameter's final value on the model, after motions, expressions, and physics. If this value differs from the dot on the curve, another animation or physics layer is also writing the parameter.

Drag an input card's level bar to hold that input at a test value, so you can pose the model and tune response curves without webcam input. Releasing the mouse restores live tracking. If the editor stops holding the value (for example, if the window closes or reloads, or a drag ends without a release event), the override expires after about a second so the model never stays stuck.

Undo and Redo

Undo actions using Cmd/Ctrl + Z, and redo using Cmd/Ctrl + Shift + Z.

Each drag operation is recorded as a single history step. Input calibration, curve edits, range adjustments, weight modifications, adding or removing inputs, and binding creation or deletion all share a unified history. This history is scoped to the Parameters panel; when focus moves elsewhere, the shortcuts apply to global scene actions.

Where Edits Are Saved

All binding and input calibration modifications are saved to <model>.persona.json in the model directory, sharing the same sidecar used by Remembering Expressions. Custom bindings and input calibration are never written back to .vtube.json, as the format lacks fields for response curves, composite weighted inputs, and input calibration.

Inside <model>.persona.json, connection rules (bindings), per-input calibration (calibration), and random pulse schedules (randomPulses) are stored as three independent top-level fields:

  • Binding precedence: bindings in <model>.persona.json → .vtube.json → built-in defaults. Once <model>.persona.json contains bindings, Persona uses that list alone and never merges it with .vtube.json. Later changes made in VTube Studio no longer affect the model in Persona, as a note at the top of the panel says.
  • Calibrating or scheduling pulses without freezing .vtube.json bindings: If you only use Input Calibration or adjust random pulse schedules on a model whose bindings come from .vtube.json, Persona writes just the calibration or randomPulses field to <model>.persona.json and does not copy bindings. The model keeps its .vtube.json bindings.

Importing from .vtube.json

When loading a model for the first time, Persona imports the complete ParameterSettings array from its .vtube.json, including author-defined binding names. These names can be edited and saved to the sidecar; clearing a name restores the parameter's own name. A .vtube.json row with no input and UseBlinking: true (how VTube Studio rigs trigger a parameter at random using auto-blink) imports as RandomPulse1 mapped to [OutputRangeUpper, 0].

Input names are resolved in three passes: first matching VTube Studio's standard vocabulary, then raw ARKit blendshape names, and finally VBridger abbreviations (Left/Right shortened to L/R). Rigs authored for VBridger remain fully intact, recognizing inputs such as EyeSquintL, MouthDimpleR, and MouthUpperUpL.

Composite parameters specific to VBridger are not treated as single inputs. Instead, they are expanded during import into the weighted sums used by VBridger presets, matching its original mathematical signs and weighting.

Last updated on November 3, 2026

Tech otakus destroy the world