Nubu
  • Features
  • How it works
  • Pricing
  • Integrations
  • FAQ
  • Contact
  • Docs
  • Blog
  • Log in
  • Log inSign up
    Nubu

    Creative automation for teams that ship campaigns, not busywork.

    Try for free
    Product
    FeaturesNubu MotionHow it worksPricingIntegrationsFAQ
    Company
    AboutContactDocsBlogLog in
    Legal
    Privacy policyTerms of serviceData deletion
    © 2026 Bear Studios · Nubu
    Introduction
    Templates overviewInstalling Nubu BuilderAdding template compsAdding propertiesAdding footageSetting defaultsExporting your templateUploading a template
    Flows overviewAvailable nodesAdding a nodeConnecting nodesWorking with dataTemplates and outputsUsing AI nodesBuilding a creative
    CampaignsTemplatesAssetsGlossariesRendersSettings
    Connecting Meta AdsConnecting Google AdsConnecting OpenAIConnecting Gemini AI StudioConnecting Anthropic
    AI Assistant overviewPrompt examplesAssistant settings and controls
    Nubu Motion scripts: the reference
    OverviewQuick startDifferences from After EffectsDeterminism
    JavaScript supportReferences and idsProject scriptsState and timeBudgets and errorsFormatting values
    GlobalTime conversionInterpolationVector mathsRandom and noiseColour conversionOther maths
    LayerCompPropertyKeyframePathGeometryProjectComponentConsoleComponentControlExpressionControl
    The property vocabularyAnimators propertiesAudio propertiesContent propertiesContents propertiesEffects propertiesExpression controls propertiesFills propertiesInstance controls propertiesLayer propertiesLayout propertiesMasks propertiesStrokes propertiesText style propertiesRig propertiesRigging propertiesRig controllers propertiesRigging weights propertiesRigging mesh propertiesRig items propertiesRig splines propertiesRig simulation propertiesRig properties propertiesRig drivers propertiesRig draw order propertiesTransform propertiesTrim path properties
    Error codesBudgets
    Changelog
    All docs
    Motion Scripting
    / Properties

    Rig items properties

    A rig entity's constraint, IK, spline IK and dynamics leaves by item id: influence, blend, distance, path distance, the spline offset and twists, and the simulate hold.

    The rig items family: a rig entity's constraint, IK, spline IK and dynamics leaves - influence (percent, a constraint's weight or a spring / physics item's share), blend (percent, an IK or spline IK item's FK to solve mix), distance (px, the distance kind's target length), path_distance (percent of the path length, which may exceed 100 - the path kind), offset (percent of the spline length - a spline IK's slide), twist_start and twist_end (degrees - the ribbon twist along a spline IK chain) and enabled (a boolean hold - a spring or physics item's simulate switch) - addressed by rig item id. Every pattern reads, keyframes AND drives: a script easing an IK blend from 0 to 100 hands a limb from its keyed pose to the solver over time, and one flipping a spring's enabled hold seeds the simulation from that frame.

    Every pattern below is readable from scripts through prop() and layer.prop(); ids in a pattern (like <effect_id>) stand for the entity's real id. Every pattern here is in the drive set: scripts may WRITE each one with set() or a single-output return, per frame.

    PatternWire kindUnitsReadsWrites
    rig.items.<item_id>.blendscalarpercent (0..100)yesdrive set
    rig.items.<item_id>.distancescalarpxyesdrive set
    rig.items.<item_id>.enabledbooleanboolean (a hold track)yesdrive set
    rig.items.<item_id>.influencescalarpercent (0..100)yesdrive set
    rig.items.<item_id>.offsetscalarpercent of the spline length (0..100)yesdrive set
    rig.items.<item_id>.path_distancescalarpercent of the path length (may exceed 100)yesdrive set
    rig.items.<item_id>.twist_endscalardegreesyesdrive set
    rig.items.<item_id>.twist_startscalardegreesyesdrive set

    Worked examples#

    A rig layer's ITEMS are its IK solvers and constraints (RIG-W2 CONTROL), each owned by a bone or a controller and addressed by its own id: rig.items.<item_id>.blend (percent, IK items - 100 = the solver places the chain, 0 = the FK channels do), .influence (percent, constraints), .distance (px, the distance kind) and .path_distance (percent of the path length, the path kind). Every leaf reads, keyframes AND drives - a script fading a blend hands a chain from IK to FK over time, the classic switch.

    Worked example: Hand the leg from IK to FK#

    The scene. A Stage comp with a two-bone Leg rig - the Thigh hanging down from (320, 60), the Shin under it - whose IK item on the Shin reaches for the Foot controller (parked up and to the left of the rest tip) with the Knee controller as its pole, and a Foot pad solid rigidly bound to the Shin.

    • The comp Stage: 640 by 360 at 25 fps, 100 frames (4 seconds).
    • Leg: a rig layer.
      • The skeleton: Thigh (bone_1, a root) from [320, 60] at 90 degrees for 100 px; Shin (bone_2, under Thigh) at 0 degrees for 80 px.
      • The controllers: Foot (ctrl_1, rig space) at [220, 140], a diamond; Knee (ctrl_2, rig space) at [420, 150].
      • The items: rigging_1 - an IK item on the Shin reaching for the Foot (chain 2, pole the Knee).
    • Foot pad: a solid layer, at [300, 240], 60 by 40, filled #4d9de0.
      • The rigging stack: rigging_2 - a rigid binding to the Leg rig's Shin.

    The script. Add a project script named IK to FK and paste:

    export const outputs = ["layer_1:rig.items.rigging_1.blend"];
    
    export function frame() {
      return linear(time, 0, 2, 100, 0);
    }
    

    Line by line:

    • Line 1: One output: the BLEND of the Leg rig's IK item (the item on the Shin that reaches for the Foot). rig.items.<item_id>.blend is a percent - at 100 the solver places the chain on the target, at 0 the bones' own FK channels place it, and in between the two poses blend.
    • Line 4: linear() maps the first two seconds onto 100 down to 0 and holds 0 after that: the leg leaves the target and settles into its FK rest pose (straight down from the hip) over two seconds. The value must stay inside 0..100 - a script that returns 140 refuses with type_mismatch, never a clamp.

    What you see. At the start the leg is bent onto the Foot target; over the first two seconds it straightens into its FK rest pose (the target no longer places it) and the bound Foot pad rides the shin down - at one second the blend reads 50, from two seconds on it reads 0.

    At the start the leg is bent onto the Foot target; over the first two seconds it straightens into its FK rest pose (the target no longer places it) and the bound Foot pad rides the shin down - at one second the blend reads 50, from two seconds on it reads 0.