{"id":"julia-morph","version":"1.0.0","title":"Julia Morph","summary":"The Julia set of z² + c morphing as c circles the origin: dendrites, spirals, dust and lace in one loop. Loops perfectly.","kind":"background","target":"three","collections":["backgrounds","hypnotic-loops"],"tags":["julia set","fractal","mathematics","complex numbers","morph","psychedelic","hypnotic","stained glass","neon","loop","background"],"loopable":true,"motion":"procedural","durationSeconds":12,"status":"published","media":{"poster":"https://aipixelwizard.com/media/julia-morph/1.0.0/poster.webp","preview":"https://aipixelwizard.com/media/julia-morph/1.0.0/preview.mp4","sample":"https://aipixelwizard.com/media/julia-morph/1.0.0/sample.mp4","sampleBytes":5302158,"sampleNote":"Pre-rendered with the default settings. Customised settings must be exported locally (npm run render)."},"urls":{"page":"https://aipixelwizard.com/visuals/julia-morph","manifest":"https://aipixelwizard.com/api/v1/visuals/julia-morph/versions/1.0.0","agentMd":"https://aipixelwizard.com/registry/julia-morph/1.0.0/agent.md","files":"https://aipixelwizard.com/registry/julia-morph/1.0.0/","demo":"https://aipixelwizard.com/registry/julia-morph/1.0.0/index.html"},"description":"The Julia set of the iteration z → z² + c, with c travelling once round a circle in the complex plane. The set grows, pinches into dust, thickens into dendrites, curls into spirals and blooms into lace: a whole family of shapes in one smooth morph that returns exactly to where it began. Three looks share the same mathematics: stained glass (the inside coloured by how close the orbit came to a circle, leaded by the edge), neon filaments (the set drawn as glowing lines by its distance estimate) and smooth bands of escape time. Choose the look, the colours (gold, ice, ember or rainbow), the orbit of c, the zoom, how far the view sways, the brightness, the detail and where on its circle c starts.","role":"Background (WebGL shader, full frame): a hypnotic, mathematical motion loop for science, music and title content.","useCases":["A hypnotic backdrop for music, meditation and visualiser videos","A maths or science explainer on fractals and complex numbers","A technology or sci-fi title scene"],"synonyms":["fractal animation","julia fractal","mandelbrot family","morphing fractal","fractal loop","math art","complex dynamics","psychedelic fractal"],"digest":"53b51a409b593075dd0887232e67d1eed1524b22cca0d4e834be200c7e8754bd","implementation":{"target":"three","runtime":"browser","language":"javascript","module":"esm","entry":"src/julia-morph.js","exports":[{"name":"createJuliaMorph","signature":"createJuliaMorph({ style?, palette?, radius?, zoom?, spin?, brightness?, detail?, start? }) => { scene, camera, material, setSize(width, height), update(time, loopSeconds), dispose() }","description":"The whole fractal as one full-screen shader: render its scene with its camera after setSize and update, ideally through createBloomPass."},{"name":"createBloomPass","signature":"createBloomPass(renderer, { width, height, glow?, exposure?, grain? }) => { render(scene, camera, output?), dispose() }","description":"A small bloom with filmic tone mapping: draws a scene to the canvas with its glow."},{"name":"PALETTES","signature":"PALETTES: { ice, ember, neon, gold }","description":"Cosine gradients: colour = a + b·cos(2π(c·h + d))."},{"name":"STYLES","signature":"STYLES: ['neon', 'smooth', 'stained']","description":"The three looks."}],"reusable":["src/julia-morph.js"],"demo":"demo.js","harness":"index.html"},"dependencies":[{"id":"three","version":"0.185.1","scope":"source","reason":"Renderer, the full-screen shader and the bloom targets."},{"id":"apw-runtime","version":"1.0.0","scope":"demo","reason":"Demo harness."}],"uses":[],"usedBy":[],"params":[{"key":"style","label":"Look","type":"select","default":"stained","options":[{"value":"neon","label":"Neon filaments"},{"value":"smooth","label":"Smooth bands"},{"value":"stained","label":"Stained glass"}]},{"key":"palette","label":"Colours","type":"select","default":"gold","options":[{"value":"ice","label":"Ice"},{"value":"ember","label":"Ember"},{"value":"neon","label":"Rainbow"},{"value":"gold","label":"Gold"}]},{"key":"radius","label":"Orbit of c","help":"The distance of c from the origin: about 0.79 gives the famous family of shapes.","type":"number","min":0.6,"max":0.9,"step":0.005,"default":0.7885},{"key":"zoom","label":"Zoom","type":"number","min":0.7,"max":2,"step":0.05,"default":1.2},{"key":"spin","label":"Sway","type":"number","min":0,"max":1.6,"step":0.05,"default":1},{"key":"brightness","label":"Brightness","type":"number","min":0.5,"max":1.6,"step":0.05,"default":1},{"key":"detail","label":"Detail","help":"Iterations per pixel: more shows finer filaments and costs more.","type":"integer","min":60,"max":256,"step":10,"default":160},{"key":"start","label":"Starting point","help":"Where round its circle c starts, as a fraction of a turn.","type":"number","min":0,"max":1,"step":0.01,"default":0.3}],"presets":[{"id":"default","label":"Stained glass, gold","params":{}},{"id":"neon","label":"Neon filaments, ice","params":{"style":"neon","palette":"ice","zoom":1}},{"id":"ember","label":"Ember bands","params":{"style":"smooth","palette":"ember","zoom":1.1}},{"id":"rainbow","label":"Rainbow dragon","params":{"style":"neon","palette":"neon","radius":0.74,"start":0.1,"brightness":1.15,"zoom":1}}],"output":{"width":1080,"height":1080,"fps":30,"durationSeconds":12,"posterSeconds":3,"alpha":false,"motion":"procedural","loop":{"seamless":true,"cycleSeconds":12,"method":"c goes exactly once round its circle per loop, the colours cycle once, and the view's breathing and sway are sines of the loop, so the last frame meets the first."},"seed":null},"composition":{"inputs":"Time within the loop; the look, colours, orbit of c, zoom, sway, brightness, detail and starting point.","outputs":"A full frame, drawn by one iterating shader on a full-screen quad.","coordinates":"The complex plane, about 2.2 units across at zoom 1.2, centred on the origin; c = r·(cos a, sin a) with a going once round per loop.","lighting":"Self-lit: the colours are the fractal's; the bloom adds the glow of the neon look.","timing":"update(time, loopSeconds) sets the loop phase; frames render in any order.","compatibleWith":["kinetic-title","number-reveal"],"notes":["Each pixel iterates z → z² + c with its derivative dz → 2z·dz to up to 256 steps; escaping gives the smooth count ν = n + 1 − log₂ log₂|z| and the distance estimate d = ½·|z|·ln|z| / |dz|, which also antialiases the edges.","At |c| near 0.79 the set passes through dendrites, spirals, discs and Cantor dust as c goes round."]},"reuse":["Hypnotic music or meditation loop: Stained glass, gold.","Sci-fi or tech title: Neon filaments, ice.","Maths explainer on fractals: Rainbow dragon."],"integration":{"newProject":"Create a WebGLRenderer, createJuliaMorph() and createBloomPass(renderer, { width, height }); call julia.setSize(width, height), then each frame julia.update(time, loopSeconds) and bloom.render(julia.scene, julia.camera).","existingProject":"Copy src/julia-morph.js; render julia.scene with julia.camera into a render target (or through the bloom pass) as the backdrop of your scene."},"performance":{"notes":"One full-screen pass of up to 160 complex iterations per pixel (more for the finest detail) and a small bloom. About 13 ms a frame at 1080p on an integrated Intel GPU.","limits":"Software WebGL (no GPU) renders in a couple of seconds a frame."},"limitations":["Single-precision floats limit the zoom: deep zooms into the filaments blur and band.","The neon look is much costlier to encode than the stained look (fast-morphing fine filaments)."],"license":{"spdx":"MIT","notice":"Copyright (c) 2026 AI Pixel Wizard. Released under the MIT License. See LICENSE in this folder.","thirdParty":[{"name":"three.js","version":"0.185.1","license":"MIT","url":"https://github.com/mrdoob/three.js"}]},"rights":{"approvedForPublicRelease":true},"provenance":"Adapted from the owner's threejs-sketches/geometry-math/webgpu-julia-morph (MIT) and rebuilt for AI Pixel Wizard in October 2026 as an original shader: c exactly once round a circle, a distance-estimate neon look, an orbit-trap stained-glass look, smooth escape bands, an exact loop and the frame/time contract.","changelog":[{"version":"1.0.0","date":"2026-10-05","notes":"Initial release."}],"verification":{"testedOn":"2026-10-06","inputs":{"julia-morph@1.0.0":"53b51a409b593075dd0887232e67d1eed1524b22cca0d4e834be200c7e8754bd","three@0.185.1":"664ca387e5fab46ff2daaa6895e1d015426850891af5ea5082cbbcc3985b068c","apw-runtime@1.0.0":"5be859cdac74823ba0bcc32c6daf06688a871104d24db5d4ceaffffd84d7c40d"},"environment":"Chrome 154.0.8037.97 headless on Linux 7.0.0-38-generic (x64), Node 22.14.0","renderer":"WebGL 2 via SwiftShader (software)","width":1080,"height":1080,"fps":30,"frames":360,"renderSeconds":459.9,"loopCheck":{"checked":true,"seamless":true,"maxDifference":0,"note":"Frame 0 vs end state (progress 1): mean |Δ| 0.0000, max |Δ| 0 of 255."},"determinism":{"checked":true,"identical":true},"errors":[],"media":{"poster":"/media/julia-morph/1.0.0/poster.webp","preview":"/media/julia-morph/1.0.0/preview.mp4","sample":"/media/julia-morph/1.0.0/sample.mp4","sampleBytes":5302158}},"files":[{"path":"LICENSE","size":1072,"sha256":"8a5f3a96f07e11522ec4bdd0a583356f99bad1245920f9709cee09b995a45153","contentType":"text/plain; charset=utf-8","url":"https://aipixelwizard.com/registry/julia-morph/1.0.0/LICENSE"},{"path":"asset.json","size":9615,"sha256":"e2d982c72e85ac7da4e1214328375c799754dc4738ac7507bba6096e2e4156a3","contentType":"application/json; charset=utf-8","url":"https://aipixelwizard.com/registry/julia-morph/1.0.0/asset.json"},{"path":"demo.js","size":1189,"sha256":"2dd5bdefa0b93e12eacbd7d48cc3bc87fcf4852c5b2e6dc734469fa495b3adb2","contentType":"text/javascript; charset=utf-8","url":"https://aipixelwizard.com/registry/julia-morph/1.0.0/demo.js"},{"path":"index.html","size":525,"sha256":"f5eb29a67ad127cee9d6269ee9253677e12ff3bd919e29df01a4c463fdf0c239","contentType":"text/html; charset=utf-8","url":"https://aipixelwizard.com/registry/julia-morph/1.0.0/index.html"},{"path":"src/julia-morph.js","size":12805,"sha256":"a9868cfee1c895773293b88d53e0eaebe575122808a16d65aaf1cf060654d6a4","contentType":"text/javascript; charset=utf-8","url":"https://aipixelwizard.com/registry/julia-morph/1.0.0/src/julia-morph.js"}],"warnings":[]}