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 propertiesTransform propertiesTrim path properties
    Error codesBudgets
    Changelog
    All docs
    Motion Scripting
    / Properties

    The property vocabulary

    How property addresses are built, and the fifteen families of patterns behind every animatable value in a document.

    Every animatable property in a document has a stable address: the owning layer's id, a colon, then the property key - layer_2:transform.position. The key half comes from this vocabulary: 722 patterns across 15 families, generated straight from the engine's own registry, so this reference and the runtime can never disagree.

    GENERATED - nubu-render --print-property-registry over the conformance fixtures; the Ring 0 conformance test pins this block to the generator byte for byte. Every addressable property key by family: prop("<layer_id>:") resolves every listed pattern; writable = the script drive set (a set() / returned value may drive it); a readable-but-not-writable target refuses typed type_mismatch; an unknown key is reference_missing.

    Reading and writing#

    Scripts READ any pattern here through prop() or layer.prop() - keyframes sampled, other scripts' outputs resolved. Scripts WRITE every ANIMATABLE pattern: the drive set is 684 of the 722 patterns - wherever a keyframe could be set, a script may set() the value (or return it from a single-output script) once per frame, and the value overrides the keyframed one for that frame only (nothing is written to the document). Continuous tracks take continuous values; hold-only tracks - text, fonts, blend modes, asset references, a paint's mode and position - take a per-frame hold. Values travel in the wire shape of the row's kind: numbers, [x, y] points, colours as [r, g, b, a] in 0..1 or "#rrggbb", strings for the holds, whole lists for stops, curve points, subpaths, mask paths and width profiles, objects for corner radii, crop transforms and font or asset references. A value of the wrong shape, out of range, or written to a key that is not in the drive set refuses with the typed type_mismatch, and an id that resolves to nothing raises reference_missing.

    Not in the drive set: 38 static patterns that change through commands rather than per frame - content: content.path; effects: 37 static slots (21 enum, 9 scalar, 4 boolean, 1 effect_ref, 2 integer) such as affects, aspect, collide_with, collision_detail - every row is on the family page. A write to any of them refuses type_mismatch with "the property is static". The registry, this page and the IDE's completions move together.

    The families#

    • Animators - 42 patterns.
    • Audio - 1 pattern.
    • Content - 6 patterns.
    • Contents - 9 patterns.
    • Effects - 542 patterns.
    • Expression controls - 1 pattern.
    • Fills - 21 patterns.
    • Instance controls - 1 pattern.
    • Layer - 7 patterns.
    • Layout - 11 patterns.
    • Masks - 9 patterns.
    • Strokes - 42 patterns.
    • Text style - 20 patterns.
    • Transform - 7 patterns.
    • Trim path - 3 patterns.