{
  "purpose": "Standalone experimental marketing scene; original assets preserved.",
  "assets": [
    {
      "id": "truss",
      "source": "public/stage-builder/truss-q30-200cm.glb",
      "file": "truss.glb",
      "bytes": 33072,
      "sha256": "ec0a9ce9c910bd8e82588f5af08dabd8ef9b3b5e516228cce926a4f533391a2e",
      "transformation": "Unmodified copy; renderer applies bottom-center anchoring in metres."
    },
    {
      "id": "speaker",
      "source": "public/render/pezzi/rcf-hdl-10-a.glb",
      "file": "speaker.glb",
      "bytes": 369700,
      "sha256": "aa44d704fb1565f13aea278d1b2c371fe652aabc19e78f34a1955553fbff18af",
      "transformation": "Unmodified copy; renderer applies bottom-center anchoring in metres."
    },
    {
      "id": "sub",
      "source": "public/render/pezzi/mpe-gos18-sub-nera.glb",
      "file": "sub.glb",
      "bytes": 33928,
      "sha256": "5f6b31f4f6edbf94e8ee585a24e9ba21982fddd06d98c8ccf7e111546877d5f5",
      "transformation": "Unmodified copy; renderer applies bottom-center anchoring in metres."
    },
    {
      "id": "beam",
      "source": "public/render/pezzi/beam-295w.glb",
      "file": "beam.glb",
      "bytes": 71264,
      "sha256": "3b2f4afb4894b80879adb4330c2177126d9f3769ed55e230560e4782cf4f6efa",
      "transformation": "Unmodified copy; renderer applies bottom-center anchoring in metres."
    },
    {
      "id": "led",
      "source": "public/render/pezzi/permat/ledwall-100x50.glb",
      "file": "led.glb",
      "bytes": 322916,
      "sha256": "a6ac96a679eafc3e5905cf9e068b8018617ea97fd0e6f0c360e0089cf21cda34",
      "transformation": "Unmodified copy; renderer applies bottom-center anchoring in metres."
    },
    {
      "id": "console",
      "source": "public/render/pezzi/lib/x32-rpg.glb",
      "file": "console.glb",
      "bytes": 118768,
      "sha256": "9b1b261524b89eaa2b85219906e99b9a0b24e2c6ae85dd4999afdea0957490cd",
      "transformation": "Unmodified copy; renderer applies bottom-center anchoring in metres."
    },
    {
      "id": "dj",
      "source": "public/render/pezzi/lib/g-2x-cdj-2000-djm-800-rpg.glb",
      "file": "dj.glb",
      "bytes": 2385840,
      "sha256": "3801c53646e77a31fcf1562e5361735c8266f7068470f6dfe762db69fd1e3813",
      "transformation": "Unmodified catalogue copy; renderer rotates the long axis onto two adjacent 120x60 cm tables on the stage. One 240 cm front cover uses the canonical RECORP logotype."
    },
    {
      "id": "sub-rcf-8006",
      "source": "public/render/pezzi/permat/sub-rcf-8006-h.glb",
      "file": "sub-rcf-8006.glb",
      "bytes": 204800,
      "sha256": "76426f1defc08d614197fb3cf7c5b32cebc5396d9602371fe74649172d6fa9d7",
      "transformation": "Unmodified catalogue copy of canonical horizontal RCF8006-AS; two touching cabinets ground-stacked under each flown HDL10 hang, keeping the DJ booth front clear; spacing derived from actual model width."
    },
    {
      "id": "people",
      "source": "Lowpoly People + Waldo by Loïc Norgeot, https://sketchfab.com/3d-models/lowpoly-people-waldo-9ec7a14729aa490fa712e51c217db0f5",
      "license": "CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/), commercial use allowed, author credited next to every 3D stage (src/app/homepage-3d/credits.tsx)",
      "file": "people.glb",
      "bytes": 1974492,
      "sha256": "6acb88fab50023988cdb3d7166487010cc2498935ab9a2f63d6fb27479fa87bf",
      "transformation": "tools/3d-pipeline/bin/build-crowd-people.mjs: 80 standing adult scans (19 poses excluded), Z-up to Y-up, feet at origin, height 1, facing yaw in extras, normals quantized. Untextured: clothing, skin and hair are tinted by height bands at render time.",
      "originalScanCredits": {
        "source": "https://sketchfab.com/3d-models/lowpoly-people-waldo-9ec7a14729aa490fa712e51c217db0f5",
        "scope": "Original scan authors credited by the source catalogue. This preserves the catalogue attribution; individual selected meshes are not mapped to specific authors.",
        "authors": [
          "@FrancescoPusterla",
          "@fablabbudapestitseez3d",
          "@jc",
          "@my3dworld",
          "@justin.levitz",
          "@peel-3d.com",
          "@deathlessvr",
          "@myminimate",
          "@3DCap",
          "@onepoint",
          "@fwild",
          "@marpi",
          "@conjurer",
          "@thor3D",
          "@vitronic",
          "@3dhubs",
          "@codame",
          "@benhaim"
        ],
        "licenseAsStatedBySource": "All original scans licensed under CC-attribution."
      }
    }
  ],
  "posters": [
    {
      "viewport": "desktop",
      "moment": "initial",
      "source": "tools/3d-pipeline/bin/capture-palco-fasi.mjs",
      "file": "poster-desktop-initial.webp",
      "width": 1440,
      "height": 900,
      "bytes": 5616,
      "sha256": "3b4529b48d3e389cc38dda7ab05859872a00f655dce740d782ed01890c4fb53e",
      "transformation": "WebP quality80 from a Playwright capture of the live scene (progress 0); HTML overlays, shade and development tools hidden."
    },
    {
      "viewport": "desktop",
      "moment": "final",
      "source": "tools/3d-pipeline/bin/capture-palco-fasi.mjs",
      "file": "poster-desktop-final.webp",
      "width": 1440,
      "height": 900,
      "bytes": 69852,
      "sha256": "bdc49768955182d568a4034d4c8b18ce43ec24ac98915c84dd5fcda2bb02a925",
      "transformation": "WebP quality80 from a Playwright capture of the live scene (progress 1); HTML overlays, shade and development tools hidden. Corner-blocked Q30 rig, RCF8006-AS ground-stacked under each HDL10 hang, DJ and audience."
    },
    {
      "viewport": "mobile",
      "moment": "initial",
      "source": "tools/3d-pipeline/bin/capture-palco-fasi.mjs",
      "file": "poster-mobile-initial.webp",
      "width": 390,
      "height": 844,
      "bytes": 1812,
      "sha256": "624d3a97cb8afade9b64ce2e9869179098509312a031f47579d91d5f7c8eb8ce",
      "transformation": "WebP quality80 from a Playwright capture of the live scene (progress 0); HTML overlays, shade and development tools hidden."
    },
    {
      "viewport": "mobile",
      "moment": "final",
      "source": "tools/3d-pipeline/bin/capture-palco-fasi.mjs",
      "file": "poster-mobile-final.webp",
      "width": 390,
      "height": 844,
      "bytes": 16668,
      "sha256": "1c1ac64b33bd3f86299e0b9e0eb15ac0da6d0d2dd0b2b489670a0621dd40727f",
      "transformation": "WebP quality80 from a Playwright capture of the live scene (progress 1); HTML overlays, shade and development tools hidden. Corner-blocked Q30 rig, RCF8006-AS ground-stacked under each HDL10 hang, DJ and audience."
    }
  ],
  "logo": {
    "source": "public/brand/logotipo-negativo.svg",
    "file": "recorp-logo.png",
    "width": 1024,
    "sha256": "0ee7f96781c6ddee603a0fcf29df80d2232d7eada15a395e54207f3a1ab1579d",
    "transformation": "Rasterization of the unchanged canonical white SVG into transparent PNG with explicit dimensions for WebGL textures."
  },
  "lineArray": {
    "source": "speaker.glb original HDL10 front sockets",
    "countPerSide": 5,
    "splayDeg": [
      0,
      2,
      4,
      6,
      8
    ],
    "transformation": "Five unmodified cabinet clones connected front-bottom to front-top with cumulative pitch0,2,6,12,20degrees. Existing public illustrative hang cables retained; no authenticated composer state/import."
  },
  "phases": [
    {
      "phase": "proposta",
      "viewport": "desktop",
      "file": "fase-proposta-desktop.webp",
      "width": 1280,
      "height": 800,
      "bytes": 66254,
      "sha256": "7d0cef21faa626db05301bf5185088a8ef17c135ecea94c28f194a580cd78bd1",
      "source": "tools/3d-pipeline/bin/capture-palco-fasi.mjs",
      "transformation": "WebP quality80 of the /temp \"Come lavoriamo\" stage at rest in this phase (section framing); static fallback for reduced motion, save-data and WebGL failure."
    },
    {
      "phase": "proposta",
      "viewport": "mobile",
      "file": "fase-proposta-mobile.webp",
      "width": 780,
      "height": 585,
      "bytes": 30312,
      "sha256": "a815a916ada45cc2ce7ef746394d064de7923c2f4249ff5f6d7bcd591552e4b6",
      "source": "tools/3d-pipeline/bin/capture-palco-fasi.mjs",
      "transformation": "WebP quality80 of the /temp \"Come lavoriamo\" stage at rest in this phase (section framing); static fallback for reduced motion, save-data and WebGL failure."
    },
    {
      "phase": "preparazione",
      "viewport": "desktop",
      "file": "fase-preparazione-desktop.webp",
      "width": 1280,
      "height": 800,
      "bytes": 21254,
      "sha256": "8fcd539fecf602128a8506f757c68d818b0a1c7aa929ed211c215da3e9b756be",
      "source": "tools/3d-pipeline/bin/capture-palco-fasi.mjs",
      "transformation": "WebP quality80 of the /temp \"Come lavoriamo\" stage at rest in this phase (section framing); static fallback for reduced motion, save-data and WebGL failure."
    },
    {
      "phase": "preparazione",
      "viewport": "mobile",
      "file": "fase-preparazione-mobile.webp",
      "width": 780,
      "height": 585,
      "bytes": 11640,
      "sha256": "9f8a26e0c99079b20115a7082886ac189dfb2c3447dd4ae0d66bfc700c565f54",
      "source": "tools/3d-pipeline/bin/capture-palco-fasi.mjs",
      "transformation": "WebP quality80 of the /temp \"Come lavoriamo\" stage at rest in this phase (section framing); static fallback for reduced motion, save-data and WebGL failure."
    },
    {
      "phase": "evento",
      "viewport": "desktop",
      "file": "fase-evento-desktop.webp",
      "width": 1280,
      "height": 800,
      "bytes": 40020,
      "sha256": "8067e138c1b070e4ae3e76154ac389295f84b6aceb7041a0ce39529e7046f05c",
      "source": "tools/3d-pipeline/bin/capture-palco-fasi.mjs",
      "transformation": "WebP quality80 of the /temp \"Come lavoriamo\" stage at rest in this phase (section framing); static fallback for reduced motion, save-data and WebGL failure."
    },
    {
      "phase": "evento",
      "viewport": "mobile",
      "file": "fase-evento-mobile.webp",
      "width": 780,
      "height": 585,
      "bytes": 22208,
      "sha256": "76b073fe2484eb66f04bc5e88290e3940bab57878a01175d9945c4059c8b44e9",
      "source": "tools/3d-pipeline/bin/capture-palco-fasi.mjs",
      "transformation": "WebP quality80 of the /temp \"Come lavoriamo\" stage at rest in this phase (section framing); static fallback for reduced motion, save-data and WebGL failure."
    }
  ],
  "people": {
    "source": "src/app/homepage-3d/crowd.ts",
    "transformation": "Instanced body scans from people.glb, deterministic placement and colours; the DJ enters from the side of the deck."
  }
}
