October 2026
Geometry strokes take the documented round caps and joins (2026-10-26)
A strokedgeometry 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’sopacity 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_degrees90 runs top to bottom, and a radialcenter.yof 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_bluris a Gaussian sigma, as CSSbackdrop-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_popnow 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,filterorstroke-dasharrayis 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 andcurrentColorpaints are not painted either: an icon set that strokes incurrentColor(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_colorcomposites premultiplied in opaque outputs:#0000ff80exports asrgb(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:
frameandinstanceelements,operations,componentsanddesign_size(the RenderRequest reference); polygon, star and smoothed-rect geometry and conic gradients on shapes; runtime shaders throughPOST /v1/shaders;layer_blur,glassand 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-pathon a group,styleon the root,currentColor, …). GET /v1/versionreportsrender_node_version: the engine build (a git sha) the farm named on its latest finished render.render_refusedis 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’serror.messagecarries the renderer’s words. See Errors.

