{"id":"liminal-corridor","version":"1.0.0","title":"Liminal Corridor","summary":"An empty corridor under buzzing fluorescent lights, one flickering, the camera creeping down it. Loops perfectly.","kind":"background","target":"three","collections":["backgrounds","hypnotic-loops"],"tags":["liminal space","backrooms","corridor","hallway","fluorescent","flicker","horror","eerie","office","hospital","loop","background"],"loopable":true,"motion":"procedural","durationSeconds":12,"status":"published","media":{"poster":"https://aipixelwizard.com/media/liminal-corridor/1.0.0/poster.webp","preview":"https://aipixelwizard.com/media/liminal-corridor/1.0.0/preview.mp4","sample":"https://aipixelwizard.com/media/liminal-corridor/1.0.0/sample.mp4","sampleBytes":2985108,"sampleNote":"Pre-rendered with the default settings. Customised settings must be exported locally (npm run render)."},"urls":{"page":"https://aipixelwizard.com/visuals/liminal-corridor","manifest":"https://aipixelwizard.com/api/v1/visuals/liminal-corridor/versions/1.0.0","agentMd":"https://aipixelwizard.com/registry/liminal-corridor/1.0.0/agent.md","files":"https://aipixelwizard.com/registry/liminal-corridor/1.0.0/","demo":"https://aipixelwizard.com/registry/liminal-corridor/1.0.0/index.html"},"description":"The uncanny emptiness of a corridor at night: rows of fluorescent ceiling panels running away into the haze, their light pooling on the walls and gleaming in the floor, doors along the walls and nobody there, while the camera creeps slowly forward and one tube on a faulty circuit flickers. Choose the place: the Backrooms (mono-yellow wallpaper, damp carpet, a yellow haze), an office at night (grey walls, wooden doors, glossy vinyl tiles) or a hospital ward (pale green walls, a handrail, a white floor), how badly the tube flickers, and the exposure.","role":"Background (WebGL shader, full frame): an eerie liminal-space loop for horror, mystery and internet-culture content.","useCases":["Horror, mystery and creepypasta videos","Internet-culture and analogue-horror edits, liminal-space compilations","A tense backdrop for a story, a podcast or a game trailer"],"synonyms":["the backrooms","liminal hallway","empty corridor","fluorescent hallway","creepy hallway","endless corridor","office hallway at night","hospital corridor"],"digest":"10295ac2509bf13585d28f564c2b3f17662d1d0902ad362c8b696357bfc4aa74","implementation":{"target":"three","runtime":"browser","language":"javascript","module":"esm","entry":"src/liminal-corridor.js","exports":[{"name":"createLiminalCorridor","signature":"createLiminalCorridor({ style?, flicker?, seed?, exposure? }) => { scene, camera, material, spacing, setSize(width, height), update(time, loopSeconds), dispose() }","description":"The corridor as one full-screen shader: render its scene with its camera after setSize and update. The camera walks four panels per loop."},{"name":"faultyTube","signature":"faultyTube({ loopSeconds, flicker?, seed? }) => (time) => brightness","description":"The faulty tube's brightness over a loop (seeded flicker and dropouts), for syncing a buzz or a scare."},{"name":"STYLES","signature":"STYLES: { backrooms, office, hospital }","description":"The three places: light, wall, floor, ceiling, trim, haze and door colours, and floor gloss."}],"reusable":["src/liminal-corridor.js"],"demo":"demo.js","harness":"index.html"},"dependencies":[{"id":"three","version":"0.185.1","scope":"source","reason":"Renderer and the full-screen shader."},{"id":"apw-runtime","version":"1.0.0","scope":"demo","reason":"Demo harness."}],"uses":[],"usedBy":[],"params":[{"key":"style","label":"Place","type":"select","default":"backrooms","options":[{"value":"backrooms","label":"The Backrooms"},{"value":"office","label":"Office at night"},{"value":"hospital","label":"Hospital ward"}]},{"key":"flicker","label":"Faulty light","help":"How badly one tube in four flickers.","type":"number","min":0,"max":1,"step":0.05,"default":0.5},{"key":"exposure","label":"Exposure","type":"number","min":0.5,"max":1.6,"step":0.05,"default":1},{"key":"seed","label":"Seed","help":"Changes when the tube flickers, and the stains and wear.","type":"integer","min":1,"max":999,"step":1,"default":2}],"presets":[{"id":"default","label":"The Backrooms","params":{}},{"id":"office","label":"Office at night","params":{"style":"office","flicker":0.35,"seed":6}},{"id":"hospital","label":"Hospital ward, failing light","params":{"style":"hospital","flicker":0.9,"exposure":0.9,"seed":13}},{"id":"steady","label":"Backrooms, steady and bright","params":{"flicker":0,"exposure":1.3,"seed":4}}],"output":{"width":1080,"height":1080,"fps":30,"durationSeconds":12,"posterSeconds":4,"alpha":false,"motion":"procedural","loop":{"seamless":true,"cycleSeconds":12,"method":"The camera walks exactly four panels per loop and the lights repeat every four panels; the flicker is scheduled round the loop and the camera's sway is whole cycles, so the last frame meets the first."},"seed":{"param":"seed","behavior":"Seed picks when the faulty tube flickers and shapes the stains and wear."}},"composition":{"inputs":"Time within the loop; the place, flicker, exposure and seed.","outputs":"A full frame, drawn by one shader on a full-screen quad.","coordinates":"Metres: the corridor is 2.4 wide and 2.7 high, panels every 3; the camera is at eye height, 1.62.","lighting":"Self-contained: exact diffuse light from each panel, a glossy floor reflection and soft halos.","timing":"update(time, loopSeconds) is a pure function of time; frames render in any order. faultyTube gives the flicker for syncing sound.","compatibleWith":["kinetic-title","stop-motion-feel","dither-animation"],"notes":["One tube in four is on the faulty circuit, so they flicker together, as tubes on one circuit do.","The corridor has no end: it runs into haze."]},"reuse":["Horror opener: The Backrooms with a title that appears only while the tube is out (sync with faultyTube).","Analogue horror: Office at night under Dither Animation or Stop-Motion Feel for a found-footage look.","Podcast background: Hospital ward, failing light, behind a story."],"integration":{"newProject":"Create a WebGLRenderer, createLiminalCorridor(), call setSize with the canvas size, then each frame update(time, loopSeconds) and renderer.render(corridor.scene, corridor.camera).","existingProject":"Copy src/liminal-corridor.js and render it into a render target to use as a backdrop or a screen in your scene."},"performance":{"notes":"One full-screen pass with no textures: each pixel sums the light of seven panels and fourteen halos. Smooth at 1080p on laptop GPUs.","limits":"Software WebGL (no GPU) renders slowly. On phones, render smaller and scale up."},"limitations":["The corridor is straight and endless: no turns, side passages or furniture.","Light does not cast shadows of the door frames."],"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/light-atmosphere/fluorescent-corridor (MIT), rebuilt for AI Pixel Wizard in October 2026 as one analytic shader: exact area lighting from the ceiling panels, a glossy floor reflection, three places (the Backrooms, an office, a hospital) with doors, trims and stains, a faulty tube, a looping walk and the frame/time contract.","changelog":[{"version":"1.0.0","date":"2026-10-05","notes":"Initial release."}],"verification":{"testedOn":"2026-10-06","inputs":{"liminal-corridor@1.0.0":"10295ac2509bf13585d28f564c2b3f17662d1d0902ad362c8b696357bfc4aa74","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":902.8,"loopCheck":{"checked":true,"seamless":true,"maxDifference":1,"note":"Frame 0 vs end state (progress 1): mean |Δ| 0.0003, max |Δ| 1 of 255."},"determinism":{"checked":true,"identical":true},"errors":[],"media":{"poster":"/media/liminal-corridor/1.0.0/poster.webp","preview":"/media/liminal-corridor/1.0.0/preview.mp4","sample":"/media/liminal-corridor/1.0.0/sample.mp4","sampleBytes":2985108}},"files":[{"path":"LICENSE","size":1072,"sha256":"8a5f3a96f07e11522ec4bdd0a583356f99bad1245920f9709cee09b995a45153","contentType":"text/plain; charset=utf-8","url":"https://aipixelwizard.com/registry/liminal-corridor/1.0.0/LICENSE"},{"path":"asset.json","size":8259,"sha256":"884c5747818f75c348453664c5e4a5aff5d124249fdbf7006e0e7424daba8613","contentType":"application/json; charset=utf-8","url":"https://aipixelwizard.com/registry/liminal-corridor/1.0.0/asset.json"},{"path":"demo.js","size":917,"sha256":"5f18e3da34dc80bc07fffcebc1926528c74c3a3b9fffe9e104693c7c7326b4f2","contentType":"text/javascript; charset=utf-8","url":"https://aipixelwizard.com/registry/liminal-corridor/1.0.0/demo.js"},{"path":"index.html","size":530,"sha256":"daee5f5756c8a012a3361783dc81f3c0a5716e5e03f8088ce959bf4ded6a372e","contentType":"text/html; charset=utf-8","url":"https://aipixelwizard.com/registry/liminal-corridor/1.0.0/index.html"},{"path":"src/liminal-corridor.js","size":16983,"sha256":"a2ab8d4a70d9eee3a22f774451fb3c120d689db76379cb3e7234dae8fd6a5d58","contentType":"text/javascript; charset=utf-8","url":"https://aipixelwizard.com/registry/liminal-corridor/1.0.0/src/liminal-corridor.js"}],"warnings":[]}