
Particle Galaxy
Background3DSeamless loop14 seconds
Threads stretched across glowing hoops weave cardioids, nephroids and lace as the multiplier slides up and down. Loops perfectly.
In Science & maths, Light, glass & shine, Patterns & illusions
Your current settings go with it. Combine several clips and hand them over together from your sequence.
Presets
How far the multiplier climbs from 2 (a cardioid) before it falls back.
The preview runs the same code your AI receives. These settings travel with the hand-off.
The classic times-table string art: every point of a hoop is joined by a straight thread to the point m times as far round, and the threads together weave curves that are not there: a cardioid when m is 2, a nephroid at 3, a lace of ever more cusps as m grows. Here m slides smoothly up through all the whole numbers to a maximum and back down, so the weave swells, folds and blooms while up to three hoops of different sizes hang in space, tipping slowly, their colours running round. Choose the colours (rainbow, sunset, ocean or gold), how many threads a hoop has, how far the multiplier climbs, the number of hoops, their tilt, the thickness of the threads and the glow.
src/string-art.js is the ingredient your AI reuses. demo.js is only the example scene around it, and uses the demo harness only for the demo.
src/string-art.jscreateStringArt({ palette?, lines?, maxMultiplier?, rings?, tilt?, thickness?, glow?, aspect? }) => { scene, camera, material, setSize(width, height), update(time, loopSeconds), dispose() }createBloomPass(renderer, { width, height, glow?, exposure?, grain? }) => { render(scene, camera, output?), dispose() }PALETTES: { rainbow, sunset, ocean, gold }three@0.185.1 (source) — Renderer, instanced thread ribbons and the bloom targets.apw-runtime@1.0.0 (demo) — Demo harness.Coordinates: Perspective, 30° field of view, the camera 5.5 units from the origin; the hoops have radius 1, 0.66 and 0.32 and hang 0.35 apart in depth.
Lighting: Self-lit: every thread adds its colour; overlaps glow, and the bloom softens them.
Timing: update(time, loopSeconds) sets the loop time; each thread end is a closed-form function of it, so frames render in any order.
npm install
npm run render -- string-art/1.0.0 --out my-video.mp4Needs Node 18+, ffmpeg and Chrome/Chromium. Add --params my-settings.json (from Copy settings) for your own settings.sha256:1765e0ac8121bf7e…
Background3DSeamless loop14 seconds

Background3DSeamless loop10 seconds

Background3DSeamless loop12 seconds

Effect2DSeamless loop8 seconds

3D object3DSeamless loop16 seconds

3D object3DSeamless loop16 seconds

Background3DSeamless loop12 seconds

Background3DSeamless loop10 seconds