{
  "schemaVersion": 1,
  "id": "pixel-seed",
  "version": "1.0.0",
  "status": "published",
  "kind": "background",
  "title": "The Last Green Pixel",
  "summary": "A tiny rooftop robot plants one green pixel and a tree rises; the abandoned pixel-art city at dusk starts growing again. Retro 16-bit style.",
  "description": "A pixel-art rooftop at dusk: a purple-pink sky, a crescent moon, a skyline of lit windows and a tiny robot who walks to a patch of ground and plants a single green pixel. A tree grows beside it, then more of them, until green fills the skyline and the sky brightens towards morning. The picture is a 180 by 225 pixel grid drawn directly in the shader, with ordered dithering, a layered skyline, brickwork and fireflies; there are no image files. The film has no settings.",
  "role": "Shader film (three.js): Retro pixel art, a finished 8-second portrait film with no settings.",
  "collections": [
    "impossible-worlds"
  ],
  "tags": [
    "pixel art",
    "retro",
    "16-bit",
    "robot",
    "city",
    "rooftop",
    "tree",
    "planting",
    "growing",
    "dusk",
    "dithering",
    "game",
    "nostalgia",
    "portrait film"
  ],
  "synonyms": [
    "pixel art animation",
    "robot planting a tree",
    "retro game scene",
    "8-bit city",
    "pixel city growing",
    "last tree"
  ],
  "useCases": [
    "A game, indie-studio or retro-gaming channel intro",
    "An environmental or climate-hope message",
    "A nostalgic title backdrop"
  ],
  "featured": null,
  "publishedAt": "2026-10-10",
  "implementation": {
    "target": "three",
    "runtime": "browser",
    "language": "javascript",
    "module": "esm",
    "entry": "src/pixel-seed.js",
    "exports": [
      {
        "name": "createPixelSeed",
        "signature": "createPixelSeed() => { 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/pixel-seed.js"
    ],
    "demo": "demo.js",
    "harness": "index.html"
  },
  "dependencies": [
    {
      "id": "three",
      "version": "0.185.1",
      "reason": "Renderer and a full-screen shader material."
    },
    {
      "id": "apw-runtime",
      "version": "1.0.0",
      "scope": "demo",
      "reason": "Demo harness."
    }
  ],
  "params": [],
  "presets": [],
  "output": {
    "width": 1080,
    "height": 1350,
    "fps": 30,
    "durationSeconds": 8,
    "posterSeconds": 5.5,
    "alpha": false,
    "motion": "procedural",
    "loop": {
      "seamless": false,
      "method": "A one-shot film: it builds to a finished picture that holds to the last frame, so the end does not return to the start."
    },
    "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": "Painted: a dusk sky that brightens towards morning, lit windows and fireflies; there is no real lighting.",
    "timing": "The robot walks to the ground and plants a green pixel; a tree grows, then more, while the sky lightens from night towards morning.",
    "compatibleWith": [],
    "notes": [
      "The pixel grid is 180 by 225 and is scaled up with hard edges at any output size.",
      "Played on repeat it cuts from the green skyline back to the night.",
      "Every pixel is a function of the time alone, so frames can be rendered in any order."
    ]
  },
  "reuse": [
    "Climate or hope message: the bare city to the green one is a one-shot story told without words.",
    "Game channel intro: a nostalgic 16-bit look that stays crisp at any size.",
    "Pixel-art backdrop: hold the finished green skyline for a title."
  ],
  "integration": {
    "newProject": "Create a WebGLRenderer on a canvas (no antialiasing), call createPixelSeed() once and film.setSize(width, height); then for each frame call film.update(timeInSeconds) and renderer.render(film.scene, film.camera).",
    "existingProject": "Copy src/pixel-seed.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 24 ms a frame at 1080 by 1350 on an integrated Intel GPU (Iris Xe), and about 4 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.",
    "The end does not return to the start, so repeating it is a hard cut."
  ],
  "license": {
    "spdx": "MIT",
    "notice": "Copyright (c) 2026 AI Pixel Wizard. Released under the MIT License. See LICENSE in this folder.",
    "thirdParty": []
  },
  "provenance": "From the owner's collection Twenty Impossible Worlds: the original GLSL ES 3.00 shader of the film “The Last Green Pixel”, 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."
    }
  ]
}
