Built-in check reference
This is the customer-facing reference for every registered built-in check in AnimSmith's current catalog. It complements the concise README check catalog, what game-ready means, and the exact Rust API on docs.rs.
Use this page when you need the current built-in ID, default findings, declarations or prerequisites, config keys and units, skip or coverage-gap semantics, and the practical boundary between built-in tooling, runtime policy, and DCC-side correction.
off in the inventory below means the check is registered but opt-in by
default. Once selected, every built-in check can still be made inactive with
[checks.<id>] severity = "off", and any selected opt-in check becomes active
only after an explicit note, warn, or error severity.
Inventory
| id | class | default findings | declarations or prerequisites | config keys | tooling |
|---|---|---|---|---|---|
| nan | mechanical | error | none | severity | DCC/export repair |
| time-monotonic | mechanical | error, note | none | severity | DCC/export repair |
| quat-norm | mechanical | error | none | severity | fix |
| quat-flip | mechanical | warning | none | severity | fix |
| duration-sanity | mechanical | error, warning | none | severity, clips.<name>.duration_s.value, clips.<name>.duration_s.tolerance | DCC/export repair, transform --slice, transform --hold-extend |
| scale-keys | mechanical | warning | none | severity | DCC cleanup |
| non-uniform-scale | mechanical | warning | none | severity | DCC cleanup |
| constant-nonunit-scale | mechanical | off, note | none | severity | DCC cleanup |
| constant-track | mechanical | note | none | severity | transform --prune-constant-tracks |
| required-bones | contract-aware | error | rig.required_bones, usable skeleton | severity, rig.required_bones | DCC/export repair |
| rest-world-scale | contract-aware | warning | runtime_nodes.selectors or legacy node selector alias, source-node transform evidence | severity, runtime_nodes.selectors, checks.rest-world-scale.node_selectors, expected_uniform_scale, uniform_scale_tolerance | scale, DCC/export repair |
| missing-bones | contract-aware | error | clips.<name>.animates_bones | severity, clips.<name>.animates_bones | DCC/export repair |
| frozen-bone | contract-aware | error | clips.<name>.animates_bones, keyed bone tracks | severity, min_rotation_deg, clips.<name>.animates_bones | DCC/export repair |
| duplicate-loop-endpoint | contract-aware | warning | clips.<name>.loop, authored endpoint analysis | severity, clips.<name>.loop | transform --drop-duplicate-loop-endpoint |
| loop-closure | contract-aware | error | clips.<name>.loop, usable loop-continuity samples | severity, max_position_delta_m, max_rotation_delta_deg, clips.<name>.loop, clips.<name>.max_loop_position_delta_m, clips.<name>.max_loop_rotation_delta_deg | DCC/export repair |
| loop-seam | contract-aware | error | clips.<name>.loop, hips and foot roles, sampled stride step | severity, max_ratio, min_stride_step_m, clips.<name>.loop | DCC/export repair |
| loop-seam-vel | contract-aware | error | clips.<name>.loop, usable loop-continuity samples | severity, max_velocity_delta_mps, clips.<name>.loop, clips.<name>.max_loop_velocity_delta_mps | DCC/export repair |
| loop-seam-rot | contract-aware | error | clips.<name>.loop, usable loop-continuity samples | severity, max_angular_velocity_delta_degps, clips.<name>.loop, clips.<name>.max_loop_angular_velocity_delta_degps | DCC/export repair |
| root-motion-speed | contract-aware | error | clips.<name>.speed_mps, non-gameplay XZ owner, root/hips role, sampled root travel | severity, clips.<name>.speed_mps.value, clips.<name>.speed_mps.tolerance, clips.<name>.movement_owner_xz, clips.<name>.in_place | DCC/export repair |
| gait-group | contract-aware | error | gait_groups.<name>.clips, hips and foot roles, measurable left/right gait amplitude | severity, gait_groups.<name>.clips, gait_groups.<name>.max_gait_phase_spread, gait_groups.<name>.min_lr_amplitude_m | DCC/export repair |
| sync-group | contract-aware | error | sync_groups.<name>.clips, at least two present members | severity, sync_groups.<name>.clips, sync_groups.<name>.max_duration_delta_s, sync_groups.<name>.max_frame_count_delta, sync_groups.<name>.max_fps_delta | DCC/export repair |
| time-complement | contract-aware | warning | sync_groups.<name>.time_complement, hips and foot roles, measurable same-time gait phase | severity, sync_groups.<name>.clips, sync_groups.<name>.time_complement.min_reflected_time_advantage, sync_groups.<name>.time_complement.min_lr_amplitude_m | author/runtime review |
| in-place | contract-aware | error | clips.<name>.movement_owner_xz or clips.<name>.in_place, root/hips role, sampled root travel | severity, clips.<name>.movement_owner_xz, clips.<name>.in_place | DCC/export repair |
| fps | contract-aware | warning | clips.<name>.fps | severity, clips.<name>.fps | DCC/export repair, transform --slice |
| bind-pose | contract-aware | warning | clips with at least three usable first-frame rotation tracks | severity, max_mean_rest_delta_deg | DCC/export repair |
| foot-slide | contract-aware | warning | clips.<name>.speed_mps, root/hips role, resolved foot or toe roles, sampled stance windows | severity, contact_height_m, max_slide_mps | DCC/export repair, engine review |
Mechanical checks
nan
- Default findings:
error. - Measurement and finding: flags any non-finite key time or keyed value. A finding means interpolation and pose evaluation are no longer trustworthy.
- Prerequisites and applicability: none. This is generic file-ready coverage.
- Config, defaults, and units:
[checks.nan] severityonly. - Inactive, not-applicable, and coverage gaps: never reports
not_applicableor a typed coverage gap once selected. - Remediation and boundary: there is no safe built-in repair because the source float is undefined. Re-export or correct the source in the DCC/export step.
- Runtime and references: one poisoned float can explode, freeze, or otherwise
corrupt the pose in-engine. See The pose flickers, spins, or
explodes and
API:
Nan.
time-monotonic
- Default findings:
errorfor negative or non-increasing key times,notefor a first key that starts materially after zero. - Measurement and finding: checks that key times start at or near zero and move strictly forward. A finding means the runtime may clamp-hold or sample incorrectly the track.
- Prerequisites and applicability: none. This is generic file-ready coverage.
- Config, defaults, and units:
[checks.time-monotonic] severityonly. - Inactive, not-applicable, and coverage gaps: never
not_applicableand no typed gaps once selected. - Remediation and boundary: fix the export or source timing in the DCC. Use
transform --sliceonly for an intentional clip trim, not to salvage invalid key ordering. - Runtime and references: late starts can hold an unauthored pose; bad ordering
is a hard data defect. See The pose flickers, spins, or
explodes and
API:
TimeMonotonic.
quat-norm
- Default findings:
error. - Measurement and finding: reports the worst rotation key whose quaternion norm
deviates materially from
1.0. - Prerequisites and applicability: none. This is generic file-ready coverage.
- Config, defaults, and units:
[checks.quat-norm] severityonly. - Inactive, not-applicable, and coverage gaps: never
not_applicableand no typed gaps once selected. - Remediation and boundary:
animsmith fixcan renormalize finite, non-zero quaternions losslessly. If the source exporter keeps reintroducing the issue, correct that upstream. - Runtime and references: non-unit rotations skew interpolation, skinning, and
blends. See The pose flickers, spins, or
explodes, CLI
repairs, and
API:
QuatNorm.
quat-flip
- Default findings:
warning. - Measurement and finding: counts adjacent rotation keys on opposite hemispheres. A finding means neighborhood-uncorrected slerp can take the long path.
- Prerequisites and applicability: none. This is generic file-ready coverage.
- Config, defaults, and units:
[checks.quat-flip] severityonly. - Inactive, not-applicable, and coverage gaps: never
not_applicableand no typed gaps once selected. - Remediation and boundary:
animsmith fixcan flip equivalent quaternion signs into a hemisphere-consistent track. Re-export if the source keeps emitting unstable signs. - Runtime and references: the visible symptom is a sudden long-way spin between
keys. See The pose flickers, spins, or
explodes, CLI
repairs, and
API:
QuatFlip.
duration-sanity
- Default findings:
errorfor invalid or missed declared duration pins and degenerate clip lengths,warningfor trackless clips or mismatched channel end times. - Measurement and finding: checks clip duration, optional declared
duration_s, and spread between multi-key channel end times. - Prerequisites and applicability: none. Declared duration pins refine a check that is otherwise generic.
- Config, defaults, and units:
[checks.duration-sanity] severity; optionalclips.<name>.duration_s.valueandclips.<name>.duration_s.tolerance, both in seconds. - Inactive, not-applicable, and coverage gaps: never
not_applicableand no typed gaps once selected. - Remediation and boundary: correct the authored range or export in the DCC.
transform --sliceandtransform --hold-extendare explicit editing tools when the clip is intentionally being reshaped, not automatic correctness repairs. - Runtime and references: bad duration contracts freeze shorter channels or
desync gameplay timing. See The clip is the wrong length or freezes at the
end
and API:
DurationSanity.
scale-keys
- Default findings:
warning. - Measurement and finding: reports temporally varying scale tracks.
- Prerequisites and applicability: none. This is generic file-ready coverage.
- Config, defaults, and units:
[checks.scale-keys] severityonly. - Inactive, not-applicable, and coverage gaps: never
not_applicableand no typed gaps once selected. - Remediation and boundary: remove accidental animated scale in the DCC or export settings. Treat retained scale animation as an intentional authored choice that downstream runtime and retargeter owners must explicitly accept.
- Runtime and references: many rigs and retargeters mishandle animated scale.
See The file is bloated, or the retargeter
chokes and
API:
ScaleKeys.
non-uniform-scale
- Default findings:
warning. - Measurement and finding: reports scale tracks whose evaluated axis lengths are materially unequal.
- Prerequisites and applicability: none. This is generic file-ready coverage.
- Config, defaults, and units:
[checks.non-uniform-scale] severityonly. - Inactive, not-applicable, and coverage gaps: never
not_applicableand no typed gaps once selected. - Remediation and boundary: normalize the authored transform in the DCC or export path unless your runtime and retargeter contract explicitly accepts the non-uniform scale.
- Runtime and references: non-uniform scale is a common retargeting and rig
failure source. See The file is bloated, or the retargeter
chokes and
API:
NonUniformScale.
constant-nonunit-scale
- Default findings:
offby default; once enabled, findings arenote. - Measurement and finding: reports scale channels that stay constant but not at unit scale, including single-key pins.
- Prerequisites and applicability: none. This is a policy signal, not a mandatory file-ready failure.
- Config, defaults, and units:
[checks.constant-nonunit-scale] severityonly. - Inactive, not-applicable, and coverage gaps: inactive until an explicit severity enables it; never reports typed gaps once active.
- Remediation and boundary: clean up the authored scale in the DCC if your runtime policy expects unit scale. Keep it enabled only when your team wants to surface that policy in lint results.
- Runtime and references: constant non-unit scale can still affect import,
attachment, and retargeting expectations. See The file is bloated, or the
retargeter
chokes and
API:
ConstantNonunitScale.
constant-track
- Default findings:
note. - Measurement and finding: reports multi-key translation, rotation, or scale tracks that never materially move.
- Prerequisites and applicability: none. This is generic file-ready coverage.
- Config, defaults, and units:
[checks.constant-track] severityonly. - Inactive, not-applicable, and coverage gaps: never
not_applicableand no typed gaps once selected. - Remediation and boundary:
transform --prune-constant-trackscan remove the subset AnimSmith can prove redundant. Use DCC cleanup when the track carries authoring intent, unsupported curves, or broader rig cleanup. - Runtime and references: constant multi-key tracks are usually export bloat,
but removing them still needs contract review for transition and required
motion evidence. See The file is bloated, or the retargeter
chokes,
Editing a clip, and
API:
ConstantTrack.
Contract-aware checks
required-bones
- Default findings:
error. - Measurement and finding: checks that every distinct name in
rig.required_bonesexists exactly once in the skeleton. - Prerequisites and applicability: active only when
rig.required_bonesis non-empty. A usable skeleton is required. - Config, defaults, and units:
[checks.required-bones] severityandrig.required_bones. - Inactive, not-applicable, and coverage gaps:
not_applicablewith no declared required bones; reports askeleton_unavailablecoverage gap when the file has no usable skeleton. - Remediation and boundary: fix the exported skeleton, naming, or rig mapping in the DCC/export pipeline. This is not a clip-level animation repair.
- Runtime and references: missing sockets, IK targets, or mask bones break
downstream binding even if no clip animates them. See A limb is T-posed, or
a bone never
moves and
API:
RequiredBones.
rest-world-scale
- Default findings:
warning. - Measurement and finding: checks the effective rest-world linear transform of explicitly selected source nodes against a uniform scale policy.
- Prerequisites and applicability: active only when
runtime_nodes.selectorsor the legacychecks.rest-world-scale.node_selectorsalias declares at least one selector. Source-node transform evidence must exist, and each selector must resolve exactly once. - Config, defaults, and units:
[checks.rest-world-scale] severity,expected_uniform_scaledefault1.0, anduniform_scale_tolerancedefault0.0001; selectors live inruntime_nodes.selectors, with the legacy alias accepted only when the shared field is absent. - Inactive, not-applicable, and coverage gaps:
not_applicablewithout selectors; gaps report no-match, ambiguous selector resolution, or unavailable source-node transform evidence. - Remediation and boundary: if the source is uniformly wrong, decide between
scale whole-document,scale rest-bind, or DCC/export correction based on the actual scale problem. This check reports source-node evidence; it does not infer which rewrite you intend. - Runtime and references: wrong rest-world scale breaks sockets, attachments,
gameplay references, and engine-side assumptions even when animation keys are
otherwise valid. See Scaling glTF safely, glTF and generic
runtime guide, and API:
RestWorldScale.
missing-bones
- Default findings:
error. - Measurement and finding: checks that each declared
animates_bonesmember exists and carries at least one keyed track in the clip. - Prerequisites and applicability: active only on clips that declare
animates_bones. - Config, defaults, and units:
[checks.missing-bones] severityandclips.<name>.animates_bones. - Inactive, not-applicable, and coverage gaps:
not_applicableon clips withoutanimates_bones; no typed coverage gaps once the declaration exists. - Remediation and boundary: restore the missing keyed channel or correct the source clip and rig in the DCC/export path.
- Runtime and references: declared motion that never reaches the file reads as
a static or wrong-rig limb at runtime. See A limb is T-posed, or a bone
never moves
and API:
MissingBones.
frozen-bone
- Default findings:
error. - Measurement and finding: checks whether each declared animated bone rotates beyond the configured floor across the clip.
- Prerequisites and applicability: active only on clips that declare
animates_bones. The bone must exist and carry at least one keyed track. - Config, defaults, and units:
[checks.frozen-bone] severity,min_rotation_degdefault1.0degrees, andclips.<name>.animates_bones. - Inactive, not-applicable, and coverage gaps:
not_applicableon clips withoutanimates_bones; no typed gaps once the declaration exists. Missing bones themselves belong tomissing-bones. - Remediation and boundary: correct the source clip, wrong slice, or masked-out track in the DCC/export pipeline.
- Runtime and references: the visible symptom is a limb that stays pinned,
T-posed, or otherwise fails to animate even though the clip says it should.
See A limb is T-posed, or a bone never
moves and
API:
FrozenBone.
duplicate-loop-endpoint
- Default findings:
warning. - Measurement and finding: checks for the strict authored-key case where a declared loop repeats its first pose at the final endpoint and that closing key can be removed mechanically.
- Prerequisites and applicability: active only on clips declared
loop = true, and only when authored endpoint analysis is available. - Config, defaults, and units:
[checks.duplicate-loop-endpoint] severityandclips.<name>.loop. - Inactive, not-applicable, and coverage gaps:
not_applicablewhen no clip declares a loop. Reports a measurement-unavailable gap when authored endpoint analysis cannot classify the clip. - Remediation and boundary:
transform --drop-duplicate-loop-endpointcan trim the mechanically removable endpoint subset. Non-classified loop endpoint modes still need authored review or a different transform. - Runtime and references: redundant inclusive endpoints are a common DCC export
artifact and can affect downstream loop handling. See The loop
pops, Editing a
clip, and API:
DuplicateLoopEndpoint.
loop-closure
- Default findings:
error. - Measurement and finding: checks the largest per-bone model-space position and rotation delta between the final and first loop sample.
- Prerequisites and applicability: active only on clips declared
loop = trueand only when loop-continuity samples exist. - Config, defaults, and units:
[checks.loop-closure] severity,max_position_delta_mdefault0.01metres,max_rotation_delta_degdefault1.0degrees, plus per-clip overridesclips.<name>.max_loop_position_delta_mandclips.<name>.max_loop_rotation_delta_deg. - Inactive, not-applicable, and coverage gaps:
not_applicablewhen no clip declares a loop. Reports measurement-unavailable gaps when the sampled loop-continuity evidence is missing or unusable for one or more bones. - Remediation and boundary: re-author, reslice, or re-export the loop in the DCC. This is a diagnosis, not an automatic loop repair.
- Runtime and references: a failed closure produces an obvious pose jump at the
wrap. See The loop pops and API:
LoopClosure.
loop-seam
- Default findings:
error. - Measurement and finding: checks the feet-relative-to-hips wrap discontinuity, normalized by seam-adjacent in-clip step length.
- Prerequisites and applicability: active only on clips declared
loop = trueand only when hips plus at least one foot role resolve and a usable stride step can be sampled. - Config, defaults, and units:
[checks.loop-seam] severity,max_ratiodefault1.5, andmin_stride_step_mdefaulting to the built-in minimum stride floor used by the metrics. - Inactive, not-applicable, and coverage gaps:
not_applicablewhen no clip declares a loop. Gaps report unresolved gait roles, clips too short to sample a cycle, unavailable foot-cycle metrics, or no usable stride step. - Remediation and boundary: fix the loop cut or cycle in the DCC. AnimSmith intentionally reports the seam evidence rather than inventing a repair.
- Runtime and references: the symptom is a once-per-cycle pop even when the raw
file is format-valid. See The loop pops
and API:
LoopSeam.
loop-seam-vel
- Default findings:
error. - Measurement and finding: checks the largest per-bone model-space linear velocity change between the incoming and outgoing loop seam.
- Prerequisites and applicability: active only on clips declared
loop = trueand only when loop-continuity samples exist. - Config, defaults, and units:
[checks.loop-seam-vel] severity,max_velocity_delta_mpsdefault0.1metres per second, plus the per-clip overrideclips.<name>.max_loop_velocity_delta_mps. - Inactive, not-applicable, and coverage gaps:
not_applicablewhen no clip declares a loop. Reports measurement-unavailable gaps when loop-continuity samples are missing or unusable. - Remediation and boundary: correct the authored wrap or the export timing in the DCC; there is no built-in automatic velocity repair.
- Runtime and references: this is the once-per-cycle hitch where the clip hits
the right pose but changes speed abruptly at the seam. See The loop
pops and API:
LoopSeamVelocity.
loop-seam-rot
- Default findings:
error. - Measurement and finding: checks the largest per-bone model-space angular velocity change between the incoming and outgoing loop seam.
- Prerequisites and applicability: active only on clips declared
loop = trueand only when loop-continuity samples exist. - Config, defaults, and units:
[checks.loop-seam-rot] severity,max_angular_velocity_delta_degpsdefault5.0degrees per second, plus the per-clip overrideclips.<name>.max_loop_angular_velocity_delta_degps. - Inactive, not-applicable, and coverage gaps:
not_applicablewhen no clip declares a loop. Reports measurement-unavailable gaps when loop-continuity samples are missing or unusable. - Remediation and boundary: correct the authored wrap or export timing in the DCC; there is no built-in automatic angular-velocity repair.
- Runtime and references: this is the rotational version of a loop hitch or
pulse at the seam. See The loop pops and
API:
LoopSeamRotation.
root-motion-speed
- Default findings:
error. - Measurement and finding: compares measured horizontal root travel against a
declared
speed_mpspin for clips whose XZ owner is not gameplay. - Prerequisites and applicability: active only when a clip declares
speed_mpsand does not declare gameplay-owned XZ travel. Root or hips role resolution and measurable root travel are required. - Config, defaults, and units:
[checks.root-motion-speed] severity,clips.<name>.speed_mps.value,clips.<name>.speed_mps.tolerance, and the XZ owner viaclips.<name>.movement_owner_xzor the compatibility aliasclips.<name>.in_place. - Inactive, not-applicable, and coverage gaps:
not_applicablewith no relevant speed pin. Gaps report unresolved root or hips roles or unavailable measured root-motion speed. - Remediation and boundary: fix the clip's actual travel or the declared speed contract in the DCC/export path or config. This is not a runtime retiming suggestion from AnimSmith.
- Runtime and references: stale speed pins make motion-scaled playback slide or
moonwalk. See The character glides or runs in
place and API:
RootMotionSpeed.
gait-group
- Default findings:
error. - Measurement and finding: compares measured gait phases across each declared blend-ring group and reports spread beyond the configured cap.
- Prerequisites and applicability: active only when
gait_groupsis non-empty. Hips and foot roles must resolve, and at least two members need measurable gait evidence above the configured amplitude floor. - Config, defaults, and units:
[checks.gait-group] severity, plusgait_groups.<name>.clips,gait_groups.<name>.max_gait_phase_spreadin cycle fraction, andgait_groups.<name>.min_lr_amplitude_min metres. - Inactive, not-applicable, and coverage gaps:
not_applicablewith no gait groups. Gaps report unresolved gait roles, missing members, too few measurable members, or members excluded because phase evidence is unavailable or below the amplitude floor. - Remediation and boundary: correct clip timing, loop structure, or selection in the DCC and review the declared group. AnimSmith does not reorder or retime the group automatically.
- Runtime and references: phase drift between directional blends shows up as
sliding or popping feet when clips crossfade. See Directional blend members
travel at different
speeds
and API:
GaitGroup.
sync-group
- Default findings:
error. - Measurement and finding: compares declared same-time group members for duration, frame count, frame grid, and loop endpoint mode compatibility.
- Prerequisites and applicability: active only when
sync_groupsis non-empty, and each group needs at least two present members before full comparison is possible. - Config, defaults, and units:
[checks.sync-group] severity, plussync_groups.<name>.clips,sync_groups.<name>.max_duration_delta_sin seconds,sync_groups.<name>.max_frame_count_deltain frames, andsync_groups.<name>.max_fps_deltain frames per second. - Inactive, not-applicable, and coverage gaps:
not_applicablewith no sync groups. Gaps report missing members, too few present or measurable members, unavailable durations, unusable frame-grid evidence, or unavailable loop endpoint evidence. - Remediation and boundary: realign or rebuild the compared clips and the group declaration in the DCC/export pipeline. This check reports compatibility; it does not choose a runtime retiming strategy.
- Runtime and references: mismatched same-time clips blend or switch at
different semantic moments. See Feet skate when clips
blend and API:
SyncGroupCheck.
time-complement
- Default findings:
warning. - Measurement and finding: compares each declared same-time pair's gait-phase similarity against the similarity after reflecting one member's normalized cycle time.
- Prerequisites and applicability: active only when a sync group enables
time_complement. Hips and foot roles must resolve, and at least two members need measurable gait phase above the configured amplitude floor. - Config, defaults, and units:
[checks.time-complement] severity, plussync_groups.<name>.time_complement.min_reflected_time_advantagein[0, 1]andsync_groups.<name>.time_complement.min_lr_amplitude_min metres. The check also usessync_groups.<name>.clips. - Inactive, not-applicable, and coverage gaps:
not_applicablewith no enabled time-complement policy. Gaps report missing members, unresolved gait roles, unavailable phase evidence, or too few measurable members. - Remediation and boundary: treat this as a sync-diagnostic for authoring or runtime review, not as proof that time reflection is the right runtime fix.
- Runtime and references: a warning means same-time pairing may be working
against the measured gait evidence. See Feet skate when clips
blend and API:
TimeComplement.
in-place
- Default findings:
error. - Measurement and finding: compares the declared horizontal movement owner to measured horizontal root travel.
- Prerequisites and applicability: active only when a clip declares
movement_owner_xzor its compatibility aliasin_place. Root or hips role resolution and measurable root travel are required. - Config, defaults, and units:
[checks.in-place] severity,clips.<name>.movement_owner_xz, or the compatibility aliasclips.<name>.in_place. - Inactive, not-applicable, and coverage gaps:
not_applicablewhen no clip declares horizontal movement ownership. Gaps report unresolved root or hips roles or unavailable measured root speed. - Remediation and boundary: fix the clip or the declared ownership in the DCC, export path, or contract config. This is an intent mismatch, not a built-in transform target.
- Runtime and references: a mismatch becomes visible gliding or running in
place. See The character glides or runs in
place and API:
InPlace.
fps
- Default findings:
warning. - Measurement and finding: checks that a declared clip duration spans a whole number of frames and that keyed times stay on the declared frame grid.
- Prerequisites and applicability: active only on clips that declare
fps. - Config, defaults, and units:
[checks.fps] severityandclips.<name>.fpsin frames per second. - Inactive, not-applicable, and coverage gaps:
not_applicableon clips withoutfps. Reports aninvalid_declared_fpscoverage gap when the declared frame rate is non-finite or non-positive. - Remediation and boundary: correct the authored frame rate or retiming in the
DCC/export path.
transform --sliceis appropriate for an intentional frame-aligned cut, not for arbitrary resampling drift. - Runtime and references: off-grid keys and fractional frame counts are common
importer pain points. See The clip is the wrong length or freezes at the
end
and API:
Fps.
bind-pose
- Default findings:
warning. - Measurement and finding: checks the mean first-frame rotation deviation from rest across bones with usable rotation tracks.
- Prerequisites and applicability: active whenever the file has clips. A clip needs at least three usable first-frame rotation tracks before the check can evaluate it.
- Config, defaults, and units:
[checks.bind-pose] severityandmax_mean_rest_delta_degdefault45degrees. - Inactive, not-applicable, and coverage gaps:
not_applicableonly when the document has no clips. Reportsinsufficient_rotation_evidencewhen a clip lacks enough usable first-frame rotation tracks. - Remediation and boundary: correct the seed rig, export skeleton, or clip source in the DCC/export path. This is not a rest-bind scale rewrite.
- Runtime and references: a mismatched bind often presents as the wrong base
pose or wrong-skeleton clip. See Files disagree about skeleton or clip
identity
and API:
BindPose.
foot-slide
- Default findings:
warning. - Measurement and finding: checks whether each stance foot moves consistently
with the declared
speed_mpsand the clip's measured horizontal root speed. - Prerequisites and applicability: active only on clips that declare
speed_mps. Root or hips roles must resolve, the clip must be long enough to sample stance, and a foot or toe role must resolve for each judged side. - Config, defaults, and units:
[checks.foot-slide] severity,contact_height_mdefault0.03metres,max_slide_mpsdefault0.3metres per second. The clip-levelspeed_mpsdeclaration is the prerequisite, not a foot-slide check setting. - Inactive, not-applicable, and coverage gaps:
not_applicablewith no speed pin. Gaps report unresolved root or hips roles, clips too short to sample stance, unavailable root-motion speed, or unresolved foot or toe roles. - Remediation and boundary: fix foot plants, root travel, or the declared speed pin in the DCC/export path and then review the runtime blend setup. This heuristic check intentionally does not auto-rewrite contact or infer movement ownership.
- Runtime and references: failed stance motion shows up as skating or slipping
feet in motion or blends. See Feet slide within one
clip and API:
FootSlide.