Clone Circular
Mandalas and radial patterns without the trigonometry
- image
- mask
- image
- mask
Ever wanted to take one sprite - a petal, a flame, a logo - and ring it around a center point a dozen times? That's a for loop with some cos/sin, which in ComfyUI means a pile of math nodes and a bad time. Clone Circular does it with one node: repeat a single input image around a ring, with per-clone rotation, scaling, and opacity, and get the composited result plus a union mask.
It's part of orion4d/ComfyUI_DAO_master, the French-authored vector-and-image utility pack, and it's the radial sibling of the pack's Clone Grid (X/Y). Where the grid makes walls of repeating tiles, this makes mandalas, rosettes, gears, daisy-chain frames, and any radial motif you'd otherwise build in a vector editor.
How it works
The node places clones of your single input image on a circle centered in the canvas. radius (default 300) is the distance from center to each clone; count (default 12) is how many; rotate is a global phase shift of the whole ring in degrees; object_rotation spins each clone around its own center - combine the two for classic "all petals pointing in" versus "all facing up" looks. scale and opacity apply to every clone uniformly.
The canvas is sized by canvas_width/canvas_height (defaults 1024×1024). With use_background off you get transparency; flip it on and background_hex fills the canvas - it accepts #RGB, #RRGGBB, #RRGGBBAA, and even names like white or transparent. An optional input mask crops the source sprite; the output mask is the union of every placed clone, so you can use it to key or composite the result.
Outputs: image (RGBA, ready to composite) and mask.
The settings that matter
countandradius- the shape of your ring. Count up to 20,000 if you're feeling ambitious; the node will happily comply, your GPU preview won't.object_rotation- this is the one people miss. Leave it at 0 and every clone keeps its original orientation; set it and clones turn to face the center or align to a pattern.rotate- spins the whole arrangement, useful for lining a motif up with a seam.
Installing
Via ComfyUI Manager (search ComfyUI_DAO_master) or:
cd ComfyUI/custom_nodes
git clone https://github.com/orion4d/ComfyUI_DAO_master.git
Restart and you're done - this node is pure Pillow/numpy, no extra packages.
Where people get burned
Mostly it's the count × large-canvas combo: thousands of full-size clones composited onto a big canvas is genuinely slow in pure Python. If your preview crawls, drop count or downscale your source sprite first. And remember the output mask is the union of clones - if you need individual masks per clone, this isn't the node for that.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| maskopt | MASK | — | |
| canvas_widthopt | INT | 10241–32768 | — |
| canvas_heightopt | INT | 10241–32768 | — |
| use_backgroundopt | BOOLEAN | false | — |
| background_hexopt | STRING | #00000000 | — |
| radiusopt | FLOAT | 3000–100000 | — |
| countopt | INT | 121–20000 | — |
| rotateopt | FLOAT | 0.0-1440–1440 | — |
| object_rotationopt | FLOAT | 0.0-1440–1440 | — |
| scaleopt | FLOAT | 1.000.01–10 | — |
| opacityopt | FLOAT | 1.000–1 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |