{"id":"neon-koi","version":"1.0.0","title":"Neon Koi","summary":"A koi woven from cyan and magenta light swims over rain-dark asphalt, its split silk tail writing glowing ripples across a puddle. Neon noir. Loops.","kind":"background","target":"three","collections":["impossible-worlds","hypnotic-loops"],"tags":["neon","koi","fish","cyberpunk","rain","puddle","night","city","glow","ripples","noir","animal","loop","portrait film"],"loopable":true,"motion":"procedural","durationSeconds":8,"status":"published","media":{"poster":"https://aipixelwizard.com/media/neon-koi/1.0.0/poster.webp","preview":"https://aipixelwizard.com/media/neon-koi/1.0.0/preview.mp4","sample":"https://aipixelwizard.com/media/neon-koi/1.0.0/sample.mp4","sampleBytes":2555551,"sampleNote":"Pre-rendered with the default settings. Customised settings must be exported locally (npm run render)."},"urls":{"page":"https://aipixelwizard.com/visuals/neon-koi","manifest":"https://aipixelwizard.com/api/v1/visuals/neon-koi/versions/1.0.0","agentMd":"https://aipixelwizard.com/registry/neon-koi/1.0.0/agent.md","files":"https://aipixelwizard.com/registry/neon-koi/1.0.0/","demo":"https://aipixelwizard.com/registry/neon-koi/1.0.0/index.html"},"description":"A koi fish made of cyan and magenta light swims through a rain-dark city puddle. It has overlapping scale arcs, articulated fins, a split flowing tail, glass eyes and barbels, and its tail writes luminous ripples across the water while rain falls and neon signs smear in vertical streaks on both sides. Everything is drawn in the shader, and the 8 seconds loop seamlessly. The film has no settings.","role":"Shader film (three.js): Neon noir, a finished 8-second portrait film with no settings.","useCases":["A gaming, music or nightlife backdrop","A cyberpunk or synthwave title card","A looping background for a streaming overlay"],"synonyms":["neon fish","glowing koi","cyberpunk koi","rainy night puddle","neon animation","light fish"],"digest":"45c2be6ce6d3e967f8567062bbeb08aebd7ac248b3e2192eae472f249f5a464f","implementation":{"target":"three","runtime":"browser","language":"javascript","module":"esm","entry":"src/neon-koi.js","exports":[{"name":"createNeonKoi","signature":"createNeonKoi() => { scene, camera, setSize(width, height), update(time), dispose() }","description":"The film as one full-screen shader; render its scene with its camera straight to the canvas."}],"reusable":["src/neon-koi.js"],"demo":"demo.js","harness":"index.html"},"dependencies":[{"id":"three","version":"0.185.1","scope":"source","reason":"Renderer and a full-screen shader material."},{"id":"apw-runtime","version":"1.0.0","scope":"demo","reason":"Demo harness."}],"uses":[],"usedBy":[],"params":[],"presets":[],"output":{"width":1080,"height":1350,"fps":30,"durationSeconds":8,"posterSeconds":5.5,"alpha":false,"motion":"procedural","loop":{"seamless":true,"cycleSeconds":8,"method":"Every part of the film is a function of the time modulo its length, and every motion completes whole cycles, so the last frame meets the first."},"seed":null},"composition":{"inputs":"The time in seconds, 0 to 8. The film has no other settings.","outputs":"An opaque full-frame picture, already in display colours: render it straight to the canvas.","coordinates":"Composed for a 4:5 portrait frame and measured by the frame height: in a wider frame the picture stays centred at full height and its background fills the sides; in a narrower one, such as 9:16, the sides are cropped.","lighting":"Self-lit neon: reflections and a glowing wake on wet asphalt.","timing":"The koi swims in place while its tail writes ripples; rain falls and the neon streaks flicker; the last frame matches the first.","compatibleWith":[],"notes":["The fish is a filled, shaded body, not an outline.","Rain, puddle reflections and the neon wake are all drawn in the shader.","Every pixel is a function of the time alone, so frames can be rendered in any order."]},"reuse":["Nightlife promo: the cyan and magenta read well behind white headlines.","Seamless loop: the koi circles back to its start, so it repeats for any length.","Streaming or music-channel background: a lively centre with calm edges."],"integration":{"newProject":"Create a WebGLRenderer on a canvas (no antialiasing), call createNeonKoi() once and film.setSize(width, height); then for each frame call film.update(timeInSeconds) and renderer.render(film.scene, film.camera).","existingProject":"Copy src/neon-koi.js, which needs only three. Render film.scene with film.camera into your own canvas or render target; the output is opaque and already in display colours, so use no tone mapping or colour conversion."},"performance":{"notes":"One full-screen fragment shader. About 7 ms a frame at 1080 by 1350 on an integrated Intel GPU (Iris Xe), and about 1 s a frame with software WebGL.","limits":"Plays at 30 frames a second at full size on an integrated GPU."},"limitations":["The film is finished: it has no settings. To change colours or timing, edit the shader.","It is composed for a 4:5 portrait frame.","Its length is fixed at 8 seconds; repeat the loop to fill a longer clip."],"license":{"spdx":"MIT","notice":"Copyright (c) 2026 AI Pixel Wizard. Released under the MIT License. See LICENSE in this folder.","thirdParty":[]},"rights":{"approvedForPublicRelease":true},"provenance":"From the owner's collection Twenty Impossible Worlds: the original GLSL ES 3.00 shader of the film “Neon Koi”, created with ChatGPT / Codex and used as published, wrapped for AI Pixel Wizard as a three.js full-screen shader in October 2026. The collection's synthesised soundtrack is not part of this ingredient.","changelog":[{"version":"1.0.0","date":"2026-10-10","notes":"Initial release."}],"verification":{"testedOn":"2026-10-10","inputs":{"neon-koi@1.0.0":"45c2be6ce6d3e967f8567062bbeb08aebd7ac248b3e2192eae472f249f5a464f","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":1350,"fps":30,"frames":240,"renderSeconds":662.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/neon-koi/1.0.0/poster.webp","preview":"/media/neon-koi/1.0.0/preview.mp4","sample":"/media/neon-koi/1.0.0/sample.mp4","sampleBytes":2555551}},"files":[{"path":"LICENSE","size":1072,"sha256":"8a5f3a96f07e11522ec4bdd0a583356f99bad1245920f9709cee09b995a45153","contentType":"text/plain; charset=utf-8","url":"https://aipixelwizard.com/registry/neon-koi/1.0.0/LICENSE"},{"path":"asset.json","size":5602,"sha256":"570576f3c45cc7c1a2b4b05beebbd38a8f0bb0cab398d660835de54f5395c522","contentType":"application/json; charset=utf-8","url":"https://aipixelwizard.com/registry/neon-koi/1.0.0/asset.json"},{"path":"demo.js","size":644,"sha256":"b51c79f1f1705fe1f87e0282ae2ad12ef3e7636ed37fcc366ddac4ca90b21e83","contentType":"text/javascript; charset=utf-8","url":"https://aipixelwizard.com/registry/neon-koi/1.0.0/demo.js"},{"path":"index.html","size":522,"sha256":"0250d90bb5a12d7955121fa61a7f2f63294003487aece6350d84d1704587bdb5","contentType":"text/html; charset=utf-8","url":"https://aipixelwizard.com/registry/neon-koi/1.0.0/index.html"},{"path":"src/neon-koi.js","size":9176,"sha256":"8d8189abe79e279049e67968a5d428220c506309aca840c28b3783941dad5886","contentType":"text/javascript; charset=utf-8","url":"https://aipixelwizard.com/registry/neon-koi/1.0.0/src/neon-koi.js"}],"warnings":[]}