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

    Strokes properties

    Per-stroke members by stroke id: width, colour, dashes, taper and profile.

    Per-stroke members - width, colour, dashes, taper, profile and friends - addressed by stroke id.

    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
    strokes.<stroke_id>.adjustments.contrastscalarnumber (wire units of the key)yesdrive set
    strokes.<stroke_id>.adjustments.exposurescalarnumber (wire units of the key)yesdrive set
    strokes.<stroke_id>.adjustments.highlightsscalarnumber (wire units of the key)yesdrive set
    strokes.<stroke_id>.adjustments.saturationscalarnumber (wire units of the key)yesdrive set
    strokes.<stroke_id>.adjustments.shadowsscalarnumber (wire units of the key)yesdrive set
    strokes.<stroke_id>.adjustments.temperaturescalarnumber (wire units of the key)yesdrive set
    strokes.<stroke_id>.adjustments.tintscalarnumber (wire units of the key)yesdrive set
    strokes.<stroke_id>.assetasset_refasset referenceyesdrive set
    strokes.<stroke_id>.blend_modeenumenum name (string)yesdrive set
    strokes.<stroke_id>.capenumenum name (string)yesdrive set
    strokes.<stroke_id>.colourcolour[r, g, b, a] 0..1yesdrive set
    strokes.<stroke_id>.crop_transformcrop_transformcrop transformyesdrive set
    strokes.<stroke_id>.dash_offsetscalarpx (positive advances the pattern along the path)yesdrive set
    strokes.<stroke_id>.dashes.<index>.dashscalarpxyesdrive set
    strokes.<stroke_id>.dashes.<index>.gapscalarpxyesdrive set
    strokes.<stroke_id>.gradient_endpoint2[x, y] pxyesdrive set
    strokes.<stroke_id>.gradient_startpoint2[x, y] pxyesdrive set
    strokes.<stroke_id>.gradient_width_handlepoint2[x, y] pxyesdrive set
    strokes.<stroke_id>.joinenumenum name (string)yesdrive set
    strokes.<stroke_id>.mitre_limitscalarx the half-width (1..100)yesdrive set
    strokes.<stroke_id>.modeenumenum name (string)yesdrive set
    strokes.<stroke_id>.opacityscalarpercent (0..100)yesdrive set
    strokes.<stroke_id>.positionenumenum name (string)yesdrive set
    strokes.<stroke_id>.profilewidth_profilewidth profile point listyesdrive set
    strokes.<stroke_id>.profile.<point_id>.tscalarfraction of the path (0..1)yesdrive set
    strokes.<stroke_id>.profile.<point_id>.widthscalarx the weight (0..16)yesdrive set
    strokes.<stroke_id>.stopsgradient_stopsgradient stop listyesdrive set
    strokes.<stroke_id>.stops.<stop_id>.alphascalarpercent (0..100)yesdrive set
    strokes.<stroke_id>.stops.<stop_id>.colourcolour[r, g, b, a] 0..1yesdrive set
    strokes.<stroke_id>.stops.<stop_id>.offsetscalarnumber (wire units of the key)yesdrive set
    strokes.<stroke_id>.taper.end_easescalarfraction (0..1)yesdrive set
    strokes.<stroke_id>.taper.end_lengthscalarfraction (0..1)yesdrive set
    strokes.<stroke_id>.taper.end_widthscalarfraction (0..1)yesdrive set
    strokes.<stroke_id>.taper.start_easescalarfraction (0..1)yesdrive set
    strokes.<stroke_id>.taper.start_lengthscalarfraction (0..1)yesdrive set
    strokes.<stroke_id>.taper.start_widthscalarfraction (0..1)yesdrive set
    strokes.<stroke_id>.tile_scalescalar[x, y] percent (100 = 1:1)yesdrive set
    strokes.<stroke_id>.weightscalarnumber (wire units of the key)yesdrive set
    strokes.<stroke_id>.weights.bottomscalarpxyesdrive set
    strokes.<stroke_id>.weights.leftscalarpxyesdrive set
    strokes.<stroke_id>.weights.rightscalarpxyesdrive set
    strokes.<stroke_id>.weights.topscalarpxyesdrive set