Skip to content

Text

Creates a typographic layout object with font, size, alignment, and wrapping. Outputs TextData for rendering or conversion to shapes.

Category: Text Menu path: Text > Text

Ports

PortTypeDirectionDescription
content_instringinputOverrides the literal text param when connected. Chain a String or MergeText node here to drive the content from elsewhere (animated captions, AI prompts, etc).
outtextoutputTextData carrying content, font params, and computed glyph layout
widthscalaroutputComputed text bounding width in pixels
heightscalaroutputComputed text bounding height in pixels
lineCountscalaroutputNumber of lines in the layout

Parameters

ParamTypeDefaultDescription
textstringHelloText content (supports multi-line). Keyframeable with Hold interpolation — animate caption swaps directly on the node, or pipe in a String at content_in to drive from elsewhere.
fontFamilystringHelvetica NeueSystem font family
fontWeightenumRegularThin, ExtraLight, Light, Regular, Medium, SemiBold, Bold, ExtraBold, Black
fontStyleenumNormalNormal or Italic
fontSizescalar72Font size in pixels
trackingscalar0Letter spacing adjustment in font units
lineHeightscalar1.2Line height multiplier
alignmentenumCenterLeft, Center, or Right
wrappingenumNoneNone (point text) or WordWrap (box text)
boxWidthscalar0Text box width (0 = no box constraint)
boxHeightscalar0Text box height (0 = no box constraint)

Expose Channels

When enabled (E button on node header), adds input ports that override params via edge connections:

PortTypeOverrides
fontSize_inscalarfontSize
tracking_inscalartracking
lineHeight_inscalarlineHeight
boxSize_invec2boxWidth and boxHeight

How It Works

The Text node computes a full typographic layout using the engine's font stack (fontdb for enumeration, ttf-parser for parsing, rustybuzz for OpenType shaping). The output TextData carries both the input parameters and the computed glyph positions, cluster information, and line metrics.

Point text (wrapping: None): Text flows on a single line (or multiple lines from explicit line breaks). No width constraint.

Box text (wrapping: WordWrap, boxWidth > 0): Text wraps within the specified box dimensions. Layout is centered within the box when both boxWidth and boxHeight are set.

The Text node does not render pixels -- it produces layout data. Connect to DrawText for rasterization, TextAnimate for per-glyph animation, or TextToShape for outline conversion.

The scalar outputs (width, height, lineCount) are useful for driving other parameters. For example, feed width into a Rectangle node to create a background that auto-sizes to the text.

Usage Examples

Basic: Rendered text

Text (text: "Hello World", fontSize: 96) -> DrawText -> Transform2D -> Output. Standard text rendering pipeline.

Animated text reveal

Text -> TextAnimate (progress: keyframed 0 to 1) -> DrawText -> Transform2D -> Output. Characters animate in one by one.

Auto-sized background

Text -> DrawText -> Transform2D -> Output. Also: Text.width and Text.height -> Math nodes (with padding) -> Rectangle (width/height driven) -> DrawShape -> Transform2D -> Output on a layer below.

Text as geometry

Text -> TextToShape -> ShapeAttributes (Color from Gradient.colorField) -> DrawShape -> Transform2D -> Output. Text outlines filled with a gradient.

Tips

  • Use the Text tool (T key) to create text interactively -- click for point text, drag for box text
  • Double-click a text layer to enter text editing mode with caret and selection
  • The font picker in Properties offers searchable font families with CSS preview
  • Safety clamping prevents NaN/Inf from extreme parameter values
  • The text port type is distinct -- it cannot connect directly to image or shape ports
  • DrawText -- rasterizes TextData to a texture
  • TextAnimate -- per-glyph geometric animation
  • TextToShape -- converts glyph outlines to shape data
  • DrawAscii -- ASCII art rendering (different approach to text)

Caddis — professional motion design.