SynthBlocks
SynthBlocks is a visual programming system for creating custom toolpaths and printer behaviour. Instead of editing a profile curve, you snap together logical blocks that describe what to print, how to move, and how to extrude — and the engine compiles it into G-code.
What can you build?
- Arbitrary 2D shapes lifted into 3D (spirals, stacked layers)
- Procedural variation over height using math and variables
- Speed, flow, and temperature changes at any point in the path
- Repeating patterns with loops and seeded randomness
- Anything that goes beyond the limits of a single profile curve
How it works
SynthBlocks uses a blocks-to-G-code pipeline:
- Author — drag blocks onto the canvas and snap them together
- Compile — the app translates your blocks into a typed data structure (Path Program IR)
- Generate — the engine interprets the IR, samples geometry into toolpath points, and writes G-code
- Preview — the 3D viewport shows the result in real time
This pipeline is deterministic: the same blocks with the same seed always produce the same output.
The interface
When you activate SynthBlocks, the workspace has three areas:
| Area | What it does |
|---|---|
| Block canvas (left) | Drag blocks from the toolbox, snap them together to build your program. Scroll to zoom; click + drag on empty space to pan. No scrollbars — endless canvas. |
| 3D viewport (center) | Live preview of the generated toolpath — same viewer as Profile mode |
| G-code inspector (bottom) | View generated G-code, warnings, and print statistics |
Your printer, nozzle, and material settings apply automatically — no reconfiguration needed.
The toolbox
Blocks are organized into ten categories in the toolbox sidebar. Each category has a distinct color:
| Category | Purpose |
|---|---|
| Structure | Toolpath root, path groups, sequences, loops |
| Geometry | 2D shapes — circles, polylines, curves |
| Z Strategy | Lift 2D geometry into 3D — spiral, stacked layers |
| Transforms | Move, rotate, scale nested geometry |
| Process | Control speed, flow, temperature, and G-code commands |
| Travel | Travel moves, retraction, and unretraction |
| Variables | Create and update named variables for use in loops |
| Math | Numbers, context variables, expressions, randomness |
| Safety | Bounds checking, sampling, and debug markers |
| Printer Settings | Read-only printer and build volume values |
Your first program
Every SynthBlocks design starts with a Toolpath block (created automatically). Inside it, you build your toolpath.
A simple spiral vase uses just three blocks:
Example: Spiral Vase
Interactive preview is available in the interactive reader.
Interactive preview is available in the interactive reader.
Interactive preview is available in the interactive reader.
- The Toolpath block is already on the canvas with an empty Path Group
- From Z Strategy, drag a Spiral Up block into the Path Group
- From Geometry, drag a Circle block into the Spiral Up's geometry slot
- The viewport updates with a spiral cylinder
Add variation by dragging a Variable (normZ) and Map Range block into the Circle's radius input — the cylinder becomes a tapered vase.
Key concepts
Path Groups
A Path Group is an independent toolpath. The engine processes groups sequentially and inserts travel moves (with zhop and retraction) between them. Use multiple groups when you want separate, non-connected paths.Scoping
Blocks that wrap other blocks (Translate, Rotate, Scale, Spiral Up) create a scope. Their effect only applies to the blocks nested inside them — they never affect blocks outside.Seed and randomness
The Toolpath block has a seed field (shown only when you use a Random block). All Random blocks use this seed to produce deterministic output. Change the seed to get a different variation; keep it fixed for reproducible results.Context variables
Math blocks can read context variables that the engine updates automatically during generation:| Variable | Range | Meaning |
|---|---|---|
z | mm | Current Z height |
normZ | 0–1 | Normalized height (0 = bottom, 1 = top) |
layerIndex | 0, 1, 2... | Current layer number |
t | 0–1 | Position along current segment |
s | mm | Absolute path length so far |
normS | 0–1 | Normalized path length |
Use these with Map Range, Sin, or Clamp to create geometry and process values that change over height, position, or layer.
Named variables
The Variables category lets you create your own named variables. Click Create Variable, give it a name, and the toolbox automatically populates with ready-to-use Set and Get blocks for that variable. Unlike context variables, you control when and how named variables change — they are especially useful for accumulating values inside loops.Variables with numeric initial values also appear as interactive controls in the 3D viewport, so you can drag to adjust values and see the result in real time without editing blocks. See the Variables documentation for details and examples.
Saving and presets
SynthBlocks designs are saved in .3dsynth project files, just like Profile designs. You can also save them as Design Presets to reuse or share. The block workspace is stored as part of the design module — no separate file format.