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
    API overviewAuthentication and keysRate limits and errorsUploading assetsFoldersUploading templatesTriggering a flowRuns and creativesAPI Request deliveryCallbacks
    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>.rotationscalardegreesyesdrive 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