{
  "schemaVersion": 1,
  "id": "chrome-swan",
  "version": "1.0.0",
  "status": "published",
  "kind": "background",
  "title": "The Silver Swan",
  "summary": "A heavy silver droplet draws itself into a long-necked swan above a black mirror, then pulls back into a drop. Liquid chrome with real reflections. Loops.",
  "description": "A single heavy droplet of liquid silver hangs above a rippling black mirror. It stretches and folds into a long-necked swan with folded wings, tooled feathers and one tiny ruby eye, with white architectural reflections running down its neck and a mirrored twin in the black water below. The swan holds, then pulls back into the droplet, so the film ends where it began and loops. The film has no settings.",
  "role": "Shader film (three.js): Liquid chrome luxury surrealism, a finished 8-second portrait film with no settings.",
  "collections": [
    "impossible-worlds",
    "chrome-glass",
    "hypnotic-loops"
  ],
  "tags": [
    "chrome",
    "swan",
    "liquid metal",
    "silver",
    "droplet",
    "mirror",
    "reflection",
    "luxury",
    "surreal",
    "bird",
    "animal",
    "black water",
    "loop",
    "portrait film"
  ],
  "synonyms": [
    "silver swan animation",
    "liquid metal swan",
    "chrome droplet",
    "mercury swan",
    "liquid chrome animation",
    "metal bird"
  ],
  "useCases": [
    "A jewellery, perfume or fashion brand teaser",
    "A luxury dark-mode title backdrop",
    "A looping background for a premium product page"
  ],
  "featured": null,
  "publishedAt": "2026-10-10",
  "implementation": {
    "target": "three",
    "runtime": "browser",
    "language": "javascript",
    "module": "esm",
    "entry": "src/chrome-swan.js",
    "exports": [
      {
        "name": "createChromeSwan",
        "signature": "createChromeSwan() => { 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/chrome-swan.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": 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": "A dark studio: soft white strip reflections on the chrome and a black mirror floor that reflects the swan.",
    "timing": "A droplet draws itself into a swan, the swan holds and the wings fold, then it pulls back into the droplet.",
    "compatibleWith": [],
    "notes": [
      "The reflection in the black water is drawn from the same geometry, so it moves with the swan.",
      "The metal is one continuous, smoothly blended surface, not separate parts.",
      "Every pixel is a function of the time alone, so frames can be rendered in any order."
    ]
  },
  "reuse": [
    "Luxury teaser: loop it behind a logo; the swan stands fully formed through the middle of the film.",
    "Seamless loop: it ends on the droplet it started from, so it can repeat for any length.",
    "Beauty and fashion reels: the dark frame leaves room for a title above the swan."
  ],
  "integration": {
    "newProject": "Create a WebGLRenderer on a canvas (no antialiasing), call createChromeSwan() once and film.setSize(width, height); then for each frame call film.update(timeInSeconds) and renderer.render(film.scene, film.camera).",
    "existingProject": "Copy src/chrome-swan.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 9 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": []
  },
  "provenance": "From the owner's collection Twenty Impossible Worlds: the original GLSL ES 3.00 shader of the film “The Silver Swan”, 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."
    }
  ]
}
