Skip to main content

October 2026

Geometry strokes take the documented round caps and joins (2026-10-26)

A stroked geometry polygon, star, smoothed rect or dashed oval now draws with the documented stroke_linecap and stroke_linejoin defaults, round, as path shapes always did. The renderer used butt caps and miter joins on them unless a value other than round was set, so a round value, named or defaulted, never reached it. A dashed oval’s dashes now end round (dots draw as dots), and a star’s or polygon’s outline corners are rounded. Set stroke_linejoin: "miter" and stroke_linecap: "butt" for the sharp outline.

Text opacity is drawn (2026-10-26)

A text element’s opacity now reaches the renderer. It was accepted and silently dropped before, so a text saved with an opacity below 100 drew at full strength and now draws faded, plate, outline and shadow included. Orbit: Cards’ three 75% labels draw at 75%.

Renderer update (live since 2026-10-16)

The renderer moved to a new engine generation: a vector library draws path shapes, SVG images and charts, and the engine adds nested compositions, operations, components and runtime shaders. Most compositions render as before with cleaner edges. These change what an existing request draws:
  • Gradients on path shapes and the canvas background now follow the documented angle convention, as geometry shapes always did: angle_degrees 90 runs top to bottom, and a radial center.y of 0 is the top edge. A gradient that was saved from a CSS string before this update was converted for the old reading and can now draw upside down; apply it again to convert it anew.
  • backdrop_blur is a Gaussian sigma, as CSS backdrop-filter: blur() takes it. The same number draws a smoother blur about a quarter wider than before, capped at 128. On a shape, the glass fills the shape’s own outline instead of its bounding box.
  • smooth_pop now overshoots slightly past full size before it settles.
  • SVG images draw a documented subset: rects, circles, ellipses, lines, polylines, polygons and paths with flat fills and strokes, opacity and transforms. An element that carries style, clip-path, mask, filter or stroke-dasharray is not drawn, and neither is anything inside it, so a design-tool export that wraps its artwork in a clip path can come out empty. Gradient and currentColor paints are not painted either: an icon set that strokes in currentColor (Lucide, Feather) needs an explicit colour. Export with presentation attributes and no clipping, or upload a PNG.
  • Text: a right-to-left paragraph keeps explicitly left-aligned Latin text in Latin order; supported emoji draw in the Twemoji face; spaces and tabs before a line break are trimmed, so a centred or right-aligned line that ended in whitespace moves; a word style that sets only colour or underline keeps the text’s bold or italic face; several styled words each draw their own face.
  • Keyframed animations (custom_animations) hold their first and last key values outside their keys instead of extending the end segments.
  • A translucent background_color composites premultiplied in opaque outputs: #0000ff80 exports as rgb(0, 0, 128) in an MP4. The dry run warns about it (BACKGROUND_TRANSLUCENT).
  • Effects with grain or noise (the film looks, VHS, snow, night and thermal vision, aurora) draw a different noise pattern of the same character.
  • MP4 files are about 1.4 to 1.5 times larger: the GPU encoder runs at a higher quality with adaptive quantisation.

API

  • New: frame and instance elements, operations, components and design_size (the RenderRequest reference); polygon, star and smoothed-rect geometry and conic gradients on shapes; runtime shaders through POST /v1/shaders; layer_blur, glass and keyframed blurs (backdrop_blur_keyframes, layer_blur_keyframes) on videos, images and shapes; stroke markers (stroke_marker_start, stroke_marker_end) for one-element arrows on path shapes.
  • Previews of a composition that uses geometry, frames, operations, components or shaders keep the full render’s proportions, and a portrait canvas previews at its exact aspect (480x854 for 1080x1920).
  • An SVG image the renderer would draw empty is refused at submit and preview with invalid_source, naming what empties it (clip-path on a group, style on the root, currentColor, …).
  • GET /v1/version reports render_node_version: the engine build (a git sha) the farm named on its latest finished render.
  • render_refused is a new job error code: the renderer refused the composition by name, for example a runtime shader that did not compile or ran over its GPU time budget. The job’s error.message carries the renderer’s words. See Errors.