{
  "schemaVersion": 1,
  "id": "hologram",
  "version": "1.0.0",
  "status": "published",
  "kind": "object",
  "title": "Hologram",
  "summary": "A sci-fi hologram hovering over a metal projector: a dot-matrix Earth, a DNA helix or your message, in glowing scan lines. Loops perfectly.",
  "description": "A projection of light floats above a turned metal emitter: drawn in drifting scan lines with a bright rim, lit by a beam rising from the lens with dust floating up through it, and torn sideways now and then by a glitch that splits its colours. Choose the subject: a dot-matrix Earth (real coastlines) with flight paths arcing between cities, a turning DNA double helix, or a message panel with your title and a live signal trace, lettered in a squared sci-fi face. Pick the colour, how often it glitches and flickers, and the room colour. The hologram's light pools on the floor and catches the projector's edges.",
  "role": "Hero object (Three.js 3D): a futuristic hologram for tech, science and sci-fi intros.",
  "collections": [
    "hypnotic-loops",
    "particles"
  ],
  "tags": [
    "hologram",
    "holographic",
    "sci-fi",
    "futuristic",
    "globe",
    "earth",
    "dna",
    "glitch",
    "scan lines",
    "tech",
    "hud",
    "loop",
    "3d"
  ],
  "synonyms": [
    "hologram projection",
    "holographic display",
    "holographic globe",
    "sci-fi hologram",
    "hologram effect",
    "futuristic projection",
    "digital earth",
    "rotating globe hologram",
    "dna hologram",
    "incoming transmission"
  ],
  "useCases": [
    "A tech, AI or cyber-security intro with a global network or a message in light",
    "Science and health explainers: a turning DNA helix as a cutaway",
    "Sci-fi scenes, game trailers and futuristic product launches"
  ],
  "featured": null,
  "publishedAt": "2026-10-06",
  "implementation": {
    "target": "three",
    "runtime": "browser",
    "language": "javascript",
    "module": "esm",
    "entry": "src/hologram.js",
    "exports": [
      {
        "name": "createHologramProjection",
        "signature": "createHologramProjection({ subject?, color?, title?, subtitle?, arcs?, spin?, lift?, seed? }) => { group, uniforms, lift, top, update(time, loopSeconds), dispose() }",
        "description": "The hologram itself (subject, beam, lens glow and rising dust) for a hologram-only scene, with the projector's lens at its origin."
      },
      {
        "name": "createProjector",
        "signature": "createProjector({ color?, metal? }) => { group, lights, lensY, radius, dispose() }",
        "description": "The metal emitter, for the solid scene; its status lights go in the hologram scene."
      },
      {
        "name": "createHologramPass",
        "signature": "createHologramPass(renderer, { width, height, glow?, split?, grain?, exposure? }) => { render({ scene, holoScene, camera, level?, tears?, output? }), dispose() }",
        "description": "Renders the solid scene and the hologram layer, then glows, tears, colour-splits and tone-maps them into the final frame."
      },
      {
        "name": "hologramSignal",
        "signature": "hologramSignal({ loopSeconds, glitch?, flicker?, seed? }) => { level(time), tears(time) }",
        "description": "Seeded flicker and glitches over a loop, as pure functions of time."
      },
      {
        "name": "holoGlyphs",
        "signature": "holoGlyphs(text, { tracking? }) => { width, strokes }",
        "description": "The squared sci-fi lettering as stroke paths, for drawing text in the same face."
      },
      {
        "name": "HOLO_COLORS",
        "signature": "HOLO_COLORS: { cyan, green, amber, red, violet }",
        "description": "Suggested hologram colours."
      }
    ],
    "reusable": [
      "src/hologram.js"
    ],
    "demo": "demo.js",
    "harness": "index.html"
  },
  "dependencies": [
    {
      "id": "three",
      "version": "0.185.1",
      "reason": "Renderer, geometry and the hologram shaders."
    },
    {
      "id": "chrome-material",
      "version": "1.1.0",
      "scope": "demo",
      "reason": "Studio environment light and the room backdrop."
    },
    {
      "id": "apw-runtime",
      "version": "1.0.0",
      "scope": "demo",
      "reason": "Demo harness."
    }
  ],
  "params": [
    {
      "key": "subject",
      "label": "Subject",
      "type": "select",
      "default": "globe",
      "options": [
        {
          "value": "globe",
          "label": "Earth"
        },
        {
          "value": "dna",
          "label": "DNA helix"
        },
        {
          "value": "message",
          "label": "Message"
        }
      ]
    },
    {
      "key": "color",
      "label": "Hologram colour",
      "type": "color",
      "default": "#43d6ff"
    },
    {
      "key": "title",
      "label": "Message",
      "help": "Shown when the subject is Message, in capitals: letters with accents, numbers and common punctuation.",
      "type": "text",
      "default": "SYSTEM ONLINE",
      "maxLength": 28,
      "sensitive": true
    },
    {
      "key": "subtitle",
      "label": "Small line",
      "help": "Shown above the message.",
      "type": "text",
      "default": "All channels secure",
      "maxLength": 40,
      "sensitive": true
    },
    {
      "key": "arcs",
      "label": "Flight paths on the Earth",
      "type": "boolean",
      "default": true
    },
    {
      "key": "glitch",
      "label": "Glitches",
      "type": "number",
      "min": 0,
      "max": 1,
      "step": 0.05,
      "default": 0.35
    },
    {
      "key": "flicker",
      "label": "Flicker",
      "type": "number",
      "min": 0,
      "max": 1,
      "step": 0.05,
      "default": 0.3
    },
    {
      "key": "background",
      "label": "Room colour",
      "type": "color",
      "default": "#070b14"
    },
    {
      "key": "seed",
      "label": "Seed",
      "help": "Changes when the glitches and flickers happen.",
      "type": "integer",
      "min": 1,
      "max": 999,
      "step": 1,
      "default": 7
    }
  ],
  "presets": [
    {
      "id": "default",
      "label": "Earth briefing",
      "params": {}
    },
    {
      "id": "dna",
      "label": "DNA lab",
      "params": {
        "subject": "dna",
        "color": "#4dffb0",
        "background": "#04100c",
        "glitch": 0.2
      }
    },
    {
      "id": "message",
      "label": "Incoming message",
      "params": {
        "subject": "message",
        "color": "#ffb347",
        "title": "INCOMING TRANSMISSION",
        "subtitle": "Channel 7, encrypted",
        "background": "#110b05",
        "glitch": 0.5
      }
    },
    {
      "id": "alert",
      "label": "Red alert",
      "params": {
        "color": "#ff4057",
        "background": "#12060a",
        "glitch": 0.85,
        "flicker": 0.65,
        "seed": 21
      }
    }
  ],
  "output": {
    "width": 1080,
    "height": 1080,
    "fps": 30,
    "durationSeconds": 12,
    "posterSeconds": 4,
    "alpha": false,
    "motion": "procedural",
    "loop": {
      "seamless": true,
      "cycleSeconds": 12,
      "method": "The subject turns whole turns, the arcs, dust, scan lines and signal trace repeat a whole number of times, and the glitches and flickers are scheduled round the loop, so the last frame meets the first."
    },
    "seed": {
      "param": "seed",
      "behavior": "Seed picks when the glitches, flickers and dust happen: same seed, same hologram."
    }
  },
  "composition": {
    "inputs": "Time within the loop; the subject, colour, texts and seed.",
    "outputs": "Two groups: the projector for the solid scene, the hologram for a hologram-only scene; createHologramPass draws both into the final frame.",
    "coordinates": "The projector stands on y = 0 and is 1.93 units across; the hologram's centre floats 1.6 units above the lens and the Earth has a radius of 1.",
    "lighting": "The projector is physical metal and needs scene.environment. The hologram emits light; add a PointLight in its colour above the lens so it lights the floor and the projector.",
    "timing": "update(time, loopSeconds) and the signal are pure functions of time; frames render in any order.",
    "compatibleWith": [
      "kinetic-title",
      "particle-tunnel",
      "orbit-camera"
    ],
    "notes": [
      "Message texts are treated as private: not stored in shared packs unless you choose to include them.",
      "The lettering is a stroke face built into the code: capital letters with the common accents, digits and punctuation.",
      "Coastlines come from Natural Earth (public domain) at 1° resolution, built into the code."
    ]
  },
  "reuse": [
    "Global network intro: the Earth briefing preset with your title over the top of the frame.",
    "Science explainer: the DNA lab preset as a cutaway while you talk.",
    "Sci-fi story beat: the Incoming message preset with your own message, glitches up."
  ],
  "integration": {
    "newProject": "Create a solid scene (room, floor, createProjector) and a hologram scene (createHologramProjection), then each frame call update(time, loopSeconds) and createHologramPass(...).render({ scene, holoScene, camera, level, tears }).",
    "existingProject": "Copy src/hologram.js. Put the projection in its own scene above any object of yours, and draw your scene through createHologramPass so the hologram glows and glitches without touching the rest."
  },
  "performance": {
    "notes": "Two scene passes and a small glow chain at full resolution; the Earth is one sphere shaded per pixel. Smooth at 1080p on laptop GPUs.",
    "limits": "Software WebGL (no GPU) renders slowly. Lower the glow chain or the resolution for phones."
  },
  "limitations": [
    "The Earth shows land from 1:110m Natural Earth outlines: small islands are missing.",
    "Message lettering covers A–Z with the common accents (á à â ã ä å ç), 0–9 and common punctuation; other characters are skipped."
  ],
  "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"
      },
      {
        "name": "Natural Earth 1:110m land",
        "license": "Public domain",
        "url": "https://www.naturalearthdata.com"
      }
    ]
  },
  "provenance": "Adapted from the owner's threejs-sketches/light-atmosphere/webgpu-hologram (MIT), rebuilt for AI Pixel Wizard in October 2026 in WebGL: a turned metal projector, three subjects (a dot-matrix Earth from Natural Earth coastlines with flight arcs, a DNA helix, a lettered message panel), a lit beam with rising dust, seeded glitches and flicker, and the frame/time contract.",
  "changelog": [
    {
      "version": "1.0.0",
      "date": "2026-10-05",
      "notes": "Initial release."
    }
  ]
}
