{
  "format": "frameport-recipe",
  "version": 1,
  "generated": "2026-10-08T18:12:05.845Z",
  "source": {
    "title": "SA3D_R&D_XP47",
    "author": "Stephane Agullo",
    "authorUrl": "https://sa3d.fr",
    "url": "https://superspl.at/view?id=cdcec084",
    "license": "CC BY 4.0",
    "licenseUrl": "https://creativecommons.org/licenses/by/4.0/",
    "file": "apartment.sog",
    "bytes": 8379050,
    "sha256": "961aad67c47e6ee236bd3789978745da6b2ae6afe7f1a0863e05617ef03881d5",
    "splats": 661466,
    "shBands": 0
  },
  "changes": "Rotated to Y-up, far outliers cropped, decimated and re-packed as SOG. Renders are of the changed scene.",
  "tools": {
    "splat-transform": "3.6.4",
    "playcanvas": "2.22.4",
    "node": "v24.20.0",
    "python": "3.14.7",
    "numpy": "2.5.3",
    "pillow": "12.0.0",
    "ffmpeg": "9.0.2-full_build-www.gyan.dev",
    "gpu": "NVIDIA GeForce RTX 5070",
    "cpu": "AMD Ryzen 5 9600X 6-Core Processor",
    "os": "Windows_NT 10.0.26300"
  },
  "frame": {
    "rotate": [
      180,
      0,
      0
    ],
    "floorNormal": [
      -0.0007,
      1,
      -0.0011
    ],
    "floorAngleDeg": 0,
    "shareAboveFloor": 0.9613,
    "limitDeg": 5,
    "storedAs": "viewer frame: +Y up, no entity rotation"
  },
  "crop": {
    "room": [
      -16.05,
      -1.077,
      -0.983,
      1.76,
      6.535,
      10.156
    ],
    "roomMethod": "percentiles 1–99 of splats with opacity ≥ 0.3, plus 15% per side",
    "chosen": "crop-8m",
    "growM": 8,
    "box": [
      -24.05,
      -9.077,
      -8.983,
      9.76,
      14.535,
      18.156
    ],
    "kept": 661303,
    "removed": 163,
    "rule": "best mean SSIM over the fixed views at full density"
  },
  "candidates": [
    {
      "id": "c100",
      "keep": 100,
      "method": "none",
      "splats": 661303,
      "bytes": 8325089,
      "sha256": "af17a9663bff3c0b5416e81fb4420408c7543e0274314ed4d7174d44867a2c27",
      "buildMs": 861,
      "ssim": 0.9962,
      "psnr": 42.1
    },
    {
      "id": "u75",
      "keep": 75,
      "method": "uniform",
      "splats": 495977,
      "bytes": 6384378,
      "sha256": "5fcd52c883109b22e4fc787d055d7cb3415fdcc8f19fe3d240f234f7c91e7a9d",
      "buildMs": 3300,
      "ssim": 0.949,
      "psnr": 31.22
    },
    {
      "id": "u60",
      "keep": 60,
      "method": "uniform",
      "splats": 396782,
      "bytes": 5128894,
      "sha256": "bdeab50350a1e4308490d9a5ecdd5b1a00cdf449889c04fb5aa52a39faa0f051",
      "buildMs": 3110,
      "ssim": 0.8914,
      "psnr": 27.67
    },
    {
      "id": "u45",
      "keep": 45,
      "method": "uniform",
      "splats": 297586,
      "bytes": 3839725,
      "sha256": "75f63f547c024def02b4f5d6d59956446fe1d982e68432e6b2efec6f32b48792",
      "buildMs": 3898,
      "ssim": 0.8445,
      "psnr": 25.77
    },
    {
      "id": "u30",
      "keep": 30,
      "method": "uniform",
      "splats": 198391,
      "bytes": 2565206,
      "sha256": "9254f1d1975e855846e63967756de8875781461605d600327a8733021c388d74",
      "buildMs": 3900,
      "ssim": 0.7417,
      "psnr": 23.4
    },
    {
      "id": "u20",
      "keep": 20,
      "method": "uniform",
      "splats": 132261,
      "bytes": 1727850,
      "sha256": "064ef89fb5094ee4f379fd5a6a1941eb8708a2b92f8d5b9a74e9f85d9a9df910",
      "buildMs": 4358,
      "ssim": 0.6877,
      "psnr": 22.22
    },
    {
      "id": "u12",
      "keep": 12,
      "method": "uniform",
      "splats": 79356,
      "bytes": 1044844,
      "sha256": "4383de909c85dd83f4cbf1d18a39865f464f6f72f1e02984a6d86526f7b6d89a",
      "buildMs": 4763,
      "ssim": 0.5829,
      "psnr": 20.75
    },
    {
      "id": "u6",
      "keep": 6,
      "method": "uniform",
      "splats": 39678,
      "bytes": 533293,
      "sha256": "ba9a493992848ec1fd850203a6bface6b06de28a2512bca8aa1225f66b1cf5b4",
      "buildMs": 4712,
      "ssim": 0.4977,
      "psnr": 19.41
    },
    {
      "id": "a45",
      "keep": 45,
      "method": "adaptive",
      "splats": 297586,
      "bytes": 3896687,
      "sha256": "ea5c5e4c3200aac2e78a1946a0d92e0e05a91f0efa478da9f4d5133c38d7f83a",
      "buildMs": 5424,
      "ssim": 0.7545,
      "psnr": 23.91
    },
    {
      "id": "a20",
      "keep": 20,
      "method": "adaptive",
      "splats": 132261,
      "bytes": 1750006,
      "sha256": "fc6c4f7b00aa3b0b2a0b2d8eb8aec1f12d106e5d56ae1687ab879ba990183747",
      "buildMs": 6190,
      "ssim": 0.5272,
      "psnr": 20.33
    }
  ],
  "profiles": [
    {
      "id": "desktop",
      "maxMB": 12,
      "maxSplats": 1000000,
      "pick": "c100",
      "file": "desktop.sog"
    },
    {
      "id": "mobile",
      "maxMB": 4,
      "maxSplats": 300000,
      "pick": "u45",
      "file": "mobile.sog"
    },
    {
      "id": "preview",
      "maxMB": 1.5,
      "maxSplats": 100000,
      "pick": "u12",
      "file": "preview.sog"
    }
  ],
  "render": {
    "width": 1280,
    "height": 720,
    "fov": 60,
    "near": 0.05
  },
  "views": [
    {
      "id": "courtyard",
      "pos": [
        -3.8,
        1.5,
        7.2
      ],
      "target": [
        0,
        1,
        0
      ]
    },
    {
      "id": "interior",
      "pos": [
        -2.2,
        1.45,
        6
      ],
      "target": [
        -6,
        1.1,
        2
      ]
    },
    {
      "id": "detail",
      "pos": [
        -1.6,
        1.6,
        5.4
      ],
      "target": [
        -0.4,
        1.7,
        4.7
      ]
    }
  ],
  "steps": [
    {
      "step": "stats source",
      "command": "splat-transform source/apartment.sog --stats json null",
      "ms": 290
    },
    {
      "step": "orient",
      "command": "splat-transform source/apartment.sog -r 180,0,0 work/oriented.ply",
      "ms": 313
    },
    {
      "step": "render ref courtyard",
      "command": "splat-transform work/oriented.ply -r 0,0,180 work/ref-courtyard.webp --camera-pos -3.8,1.5,7.2 --camera-target 0,1,0 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1514
    },
    {
      "step": "render ref interior",
      "command": "splat-transform work/oriented.ply -r 0,0,180 work/ref-interior.webp --camera-pos -2.2,1.45,6 --camera-target -6,1.1,2 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1358
    },
    {
      "step": "render ref detail",
      "command": "splat-transform work/oriented.ply -r 0,0,180 work/ref-detail.webp --camera-pos -1.6,1.6,5.4 --camera-target -0.4,1.7,4.7 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1330
    },
    {
      "step": "crop crop-none",
      "command": "splat-transform work/oriented.ply -N work/crop-none.ply",
      "ms": 218
    },
    {
      "step": "pack crop-none",
      "command": "splat-transform work/crop-none.ply work/crop-none.sog",
      "ms": 882
    },
    {
      "step": "render crop-none courtyard",
      "command": "splat-transform work/crop-none.sog -r 0,0,180 work/crop-none-courtyard.webp --camera-pos -3.8,1.5,7.2 --camera-target 0,1,0 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1468
    },
    {
      "step": "render crop-none interior",
      "command": "splat-transform work/crop-none.sog -r 0,0,180 work/crop-none-interior.webp --camera-pos -2.2,1.45,6 --camera-target -6,1.1,2 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1441
    },
    {
      "step": "render crop-none detail",
      "command": "splat-transform work/crop-none.sog -r 0,0,180 work/crop-none-detail.webp --camera-pos -1.6,1.6,5.4 --camera-target -0.4,1.7,4.7 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1413
    },
    {
      "step": "crop crop-0m",
      "command": "splat-transform work/oriented.ply -N -B -1.76,-6.535,-0.983,16.05,1.077,10.156 work/crop-0m.ply",
      "ms": 258
    },
    {
      "step": "pack crop-0m",
      "command": "splat-transform work/crop-0m.ply work/crop-0m.sog",
      "ms": 862
    },
    {
      "step": "render crop-0m courtyard",
      "command": "splat-transform work/crop-0m.sog -r 0,0,180 work/crop-0m-courtyard.webp --camera-pos -3.8,1.5,7.2 --camera-target 0,1,0 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1452
    },
    {
      "step": "render crop-0m interior",
      "command": "splat-transform work/crop-0m.sog -r 0,0,180 work/crop-0m-interior.webp --camera-pos -2.2,1.45,6 --camera-target -6,1.1,2 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1441
    },
    {
      "step": "render crop-0m detail",
      "command": "splat-transform work/crop-0m.sog -r 0,0,180 work/crop-0m-detail.webp --camera-pos -1.6,1.6,5.4 --camera-target -0.4,1.7,4.7 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1386
    },
    {
      "step": "crop crop-3m",
      "command": "splat-transform work/oriented.ply -N -B -4.76,-9.535,-3.983,19.05,4.077,13.156 work/crop-3m.ply",
      "ms": 264
    },
    {
      "step": "pack crop-3m",
      "command": "splat-transform work/crop-3m.ply work/crop-3m.sog",
      "ms": 839
    },
    {
      "step": "render crop-3m courtyard",
      "command": "splat-transform work/crop-3m.sog -r 0,0,180 work/crop-3m-courtyard.webp --camera-pos -3.8,1.5,7.2 --camera-target 0,1,0 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1481
    },
    {
      "step": "render crop-3m interior",
      "command": "splat-transform work/crop-3m.sog -r 0,0,180 work/crop-3m-interior.webp --camera-pos -2.2,1.45,6 --camera-target -6,1.1,2 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1664
    },
    {
      "step": "render crop-3m detail",
      "command": "splat-transform work/crop-3m.sog -r 0,0,180 work/crop-3m-detail.webp --camera-pos -1.6,1.6,5.4 --camera-target -0.4,1.7,4.7 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1476
    },
    {
      "step": "crop crop-8m",
      "command": "splat-transform work/oriented.ply -N -B -9.76,-14.535,-8.983,24.05,9.077,18.156 work/crop-8m.ply",
      "ms": 307
    },
    {
      "step": "pack crop-8m",
      "command": "splat-transform work/crop-8m.ply work/crop-8m.sog",
      "ms": 847
    },
    {
      "step": "render crop-8m courtyard",
      "command": "splat-transform work/crop-8m.sog -r 0,0,180 work/crop-8m-courtyard.webp --camera-pos -3.8,1.5,7.2 --camera-target 0,1,0 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1487
    },
    {
      "step": "render crop-8m interior",
      "command": "splat-transform work/crop-8m.sog -r 0,0,180 work/crop-8m-interior.webp --camera-pos -2.2,1.45,6 --camera-target -6,1.1,2 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1440
    },
    {
      "step": "render crop-8m detail",
      "command": "splat-transform work/crop-8m.sog -r 0,0,180 work/crop-8m-detail.webp --camera-pos -1.6,1.6,5.4 --camera-target -0.4,1.7,4.7 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1401
    },
    {
      "step": "crop crop-20m",
      "command": "splat-transform work/oriented.ply -N -B -21.76,-26.535,-20.983,36.05,21.077,30.156 work/crop-20m.ply",
      "ms": 256
    },
    {
      "step": "pack crop-20m",
      "command": "splat-transform work/crop-20m.ply work/crop-20m.sog",
      "ms": 940
    },
    {
      "step": "render crop-20m courtyard",
      "command": "splat-transform work/crop-20m.sog -r 0,0,180 work/crop-20m-courtyard.webp --camera-pos -3.8,1.5,7.2 --camera-target 0,1,0 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1475
    },
    {
      "step": "render crop-20m interior",
      "command": "splat-transform work/crop-20m.sog -r 0,0,180 work/crop-20m-interior.webp --camera-pos -2.2,1.45,6 --camera-target -6,1.1,2 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1516
    },
    {
      "step": "render crop-20m detail",
      "command": "splat-transform work/crop-20m.sog -r 0,0,180 work/crop-20m-detail.webp --camera-pos -1.6,1.6,5.4 --camera-target -0.4,1.7,4.7 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1460
    },
    {
      "step": "pack c100",
      "command": "splat-transform work/base.ply work/c100.sog",
      "ms": 861
    },
    {
      "step": "info work/c100.sog",
      "command": "splat-transform work/c100.sog --info json null",
      "ms": 158
    },
    {
      "step": "render c100 courtyard",
      "command": "splat-transform work/c100.sog -r 0,0,180 work/c100-courtyard.webp --camera-pos -3.8,1.5,7.2 --camera-target 0,1,0 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1454
    },
    {
      "step": "render c100 interior",
      "command": "splat-transform work/c100.sog -r 0,0,180 work/c100-interior.webp --camera-pos -2.2,1.45,6 --camera-target -6,1.1,2 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1542
    },
    {
      "step": "render c100 detail",
      "command": "splat-transform work/c100.sog -r 0,0,180 work/c100-detail.webp --camera-pos -1.6,1.6,5.4 --camera-target -0.4,1.7,4.7 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1412
    },
    {
      "step": "decimate u75",
      "command": "splat-transform work/base.ply -d 75% work/u75.ply",
      "ms": 2280
    },
    {
      "step": "pack u75",
      "command": "splat-transform work/u75.ply work/u75.sog",
      "ms": 1021
    },
    {
      "step": "info work/u75.sog",
      "command": "splat-transform work/u75.sog --info json null",
      "ms": 144
    },
    {
      "step": "render u75 courtyard",
      "command": "splat-transform work/u75.sog -r 0,0,180 work/u75-courtyard.webp --camera-pos -3.8,1.5,7.2 --camera-target 0,1,0 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1438
    },
    {
      "step": "render u75 interior",
      "command": "splat-transform work/u75.sog -r 0,0,180 work/u75-interior.webp --camera-pos -2.2,1.45,6 --camera-target -6,1.1,2 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1413
    },
    {
      "step": "render u75 detail",
      "command": "splat-transform work/u75.sog -r 0,0,180 work/u75-detail.webp --camera-pos -1.6,1.6,5.4 --camera-target -0.4,1.7,4.7 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1367
    },
    {
      "step": "decimate u60",
      "command": "splat-transform work/base.ply -d 60% work/u60.ply",
      "ms": 2394
    },
    {
      "step": "pack u60",
      "command": "splat-transform work/u60.ply work/u60.sog",
      "ms": 715
    },
    {
      "step": "info work/u60.sog",
      "command": "splat-transform work/u60.sog --info json null",
      "ms": 138
    },
    {
      "step": "render u60 courtyard",
      "command": "splat-transform work/u60.sog -r 0,0,180 work/u60-courtyard.webp --camera-pos -3.8,1.5,7.2 --camera-target 0,1,0 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1397
    },
    {
      "step": "render u60 interior",
      "command": "splat-transform work/u60.sog -r 0,0,180 work/u60-interior.webp --camera-pos -2.2,1.45,6 --camera-target -6,1.1,2 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1470
    },
    {
      "step": "render u60 detail",
      "command": "splat-transform work/u60.sog -r 0,0,180 work/u60-detail.webp --camera-pos -1.6,1.6,5.4 --camera-target -0.4,1.7,4.7 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1434
    },
    {
      "step": "decimate u45",
      "command": "splat-transform work/base.ply -d 45% work/u45.ply",
      "ms": 3241
    },
    {
      "step": "pack u45",
      "command": "splat-transform work/u45.ply work/u45.sog",
      "ms": 657
    },
    {
      "step": "info work/u45.sog",
      "command": "splat-transform work/u45.sog --info json null",
      "ms": 127
    },
    {
      "step": "render u45 courtyard",
      "command": "splat-transform work/u45.sog -r 0,0,180 work/u45-courtyard.webp --camera-pos -3.8,1.5,7.2 --camera-target 0,1,0 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1384
    },
    {
      "step": "render u45 interior",
      "command": "splat-transform work/u45.sog -r 0,0,180 work/u45-interior.webp --camera-pos -2.2,1.45,6 --camera-target -6,1.1,2 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1445
    },
    {
      "step": "render u45 detail",
      "command": "splat-transform work/u45.sog -r 0,0,180 work/u45-detail.webp --camera-pos -1.6,1.6,5.4 --camera-target -0.4,1.7,4.7 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1360
    },
    {
      "step": "decimate u30",
      "command": "splat-transform work/base.ply -d 30% work/u30.ply",
      "ms": 3313
    },
    {
      "step": "pack u30",
      "command": "splat-transform work/u30.ply work/u30.sog",
      "ms": 587
    },
    {
      "step": "info work/u30.sog",
      "command": "splat-transform work/u30.sog --info json null",
      "ms": 119
    },
    {
      "step": "render u30 courtyard",
      "command": "splat-transform work/u30.sog -r 0,0,180 work/u30-courtyard.webp --camera-pos -3.8,1.5,7.2 --camera-target 0,1,0 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1372
    },
    {
      "step": "render u30 interior",
      "command": "splat-transform work/u30.sog -r 0,0,180 work/u30-interior.webp --camera-pos -2.2,1.45,6 --camera-target -6,1.1,2 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1331
    },
    {
      "step": "render u30 detail",
      "command": "splat-transform work/u30.sog -r 0,0,180 work/u30-detail.webp --camera-pos -1.6,1.6,5.4 --camera-target -0.4,1.7,4.7 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1323
    },
    {
      "step": "decimate u20",
      "command": "splat-transform work/base.ply -d 20% work/u20.ply",
      "ms": 3802
    },
    {
      "step": "pack u20",
      "command": "splat-transform work/u20.ply work/u20.sog",
      "ms": 556
    },
    {
      "step": "info work/u20.sog",
      "command": "splat-transform work/u20.sog --info json null",
      "ms": 144
    },
    {
      "step": "render u20 courtyard",
      "command": "splat-transform work/u20.sog -r 0,0,180 work/u20-courtyard.webp --camera-pos -3.8,1.5,7.2 --camera-target 0,1,0 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1397
    },
    {
      "step": "render u20 interior",
      "command": "splat-transform work/u20.sog -r 0,0,180 work/u20-interior.webp --camera-pos -2.2,1.45,6 --camera-target -6,1.1,2 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1310
    },
    {
      "step": "render u20 detail",
      "command": "splat-transform work/u20.sog -r 0,0,180 work/u20-detail.webp --camera-pos -1.6,1.6,5.4 --camera-target -0.4,1.7,4.7 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1387
    },
    {
      "step": "decimate u12",
      "command": "splat-transform work/base.ply -d 12% work/u12.ply",
      "ms": 4213
    },
    {
      "step": "pack u12",
      "command": "splat-transform work/u12.ply work/u12.sog",
      "ms": 550
    },
    {
      "step": "info work/u12.sog",
      "command": "splat-transform work/u12.sog --info json null",
      "ms": 111
    },
    {
      "step": "render u12 courtyard",
      "command": "splat-transform work/u12.sog -r 0,0,180 work/u12-courtyard.webp --camera-pos -3.8,1.5,7.2 --camera-target 0,1,0 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1348
    },
    {
      "step": "render u12 interior",
      "command": "splat-transform work/u12.sog -r 0,0,180 work/u12-interior.webp --camera-pos -2.2,1.45,6 --camera-target -6,1.1,2 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1346
    },
    {
      "step": "render u12 detail",
      "command": "splat-transform work/u12.sog -r 0,0,180 work/u12-detail.webp --camera-pos -1.6,1.6,5.4 --camera-target -0.4,1.7,4.7 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1452
    },
    {
      "step": "decimate u6",
      "command": "splat-transform work/base.ply -d 6% work/u6.ply",
      "ms": 4302
    },
    {
      "step": "pack u6",
      "command": "splat-transform work/u6.ply work/u6.sog",
      "ms": 410
    },
    {
      "step": "info work/u6.sog",
      "command": "splat-transform work/u6.sog --info json null",
      "ms": 106
    },
    {
      "step": "render u6 courtyard",
      "command": "splat-transform work/u6.sog -r 0,0,180 work/u6-courtyard.webp --camera-pos -3.8,1.5,7.2 --camera-target 0,1,0 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1383
    },
    {
      "step": "render u6 interior",
      "command": "splat-transform work/u6.sog -r 0,0,180 work/u6-interior.webp --camera-pos -2.2,1.45,6 --camera-target -6,1.1,2 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1323
    },
    {
      "step": "render u6 detail",
      "command": "splat-transform work/u6.sog -r 0,0,180 work/u6-detail.webp --camera-pos -1.6,1.6,5.4 --camera-target -0.4,1.7,4.7 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1315
    },
    {
      "step": "decimate a45",
      "command": "splat-transform work/base.ply --decimate-adaptive 45% work/a45.ply",
      "ms": 4675
    },
    {
      "step": "pack a45",
      "command": "splat-transform work/a45.ply work/a45.sog",
      "ms": 748
    },
    {
      "step": "info work/a45.sog",
      "command": "splat-transform work/a45.sog --info json null",
      "ms": 132
    },
    {
      "step": "render a45 courtyard",
      "command": "splat-transform work/a45.sog -r 0,0,180 work/a45-courtyard.webp --camera-pos -3.8,1.5,7.2 --camera-target 0,1,0 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1370
    },
    {
      "step": "render a45 interior",
      "command": "splat-transform work/a45.sog -r 0,0,180 work/a45-interior.webp --camera-pos -2.2,1.45,6 --camera-target -6,1.1,2 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1338
    },
    {
      "step": "render a45 detail",
      "command": "splat-transform work/a45.sog -r 0,0,180 work/a45-detail.webp --camera-pos -1.6,1.6,5.4 --camera-target -0.4,1.7,4.7 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1327
    },
    {
      "step": "decimate a20",
      "command": "splat-transform work/base.ply --decimate-adaptive 20% work/a20.ply",
      "ms": 5521
    },
    {
      "step": "pack a20",
      "command": "splat-transform work/a20.ply work/a20.sog",
      "ms": 669
    },
    {
      "step": "info work/a20.sog",
      "command": "splat-transform work/a20.sog --info json null",
      "ms": 114
    },
    {
      "step": "render a20 courtyard",
      "command": "splat-transform work/a20.sog -r 0,0,180 work/a20-courtyard.webp --camera-pos -3.8,1.5,7.2 --camera-target 0,1,0 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1382
    },
    {
      "step": "render a20 interior",
      "command": "splat-transform work/a20.sog -r 0,0,180 work/a20-interior.webp --camera-pos -2.2,1.45,6 --camera-target -6,1.1,2 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1317
    },
    {
      "step": "render a20 detail",
      "command": "splat-transform work/a20.sog -r 0,0,180 work/a20-detail.webp --camera-pos -1.6,1.6,5.4 --camera-target -0.4,1.7,4.7 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1302
    },
    {
      "step": "decimate u30 again",
      "command": "splat-transform work/base.ply -d 30% work/u30-again.ply",
      "ms": 3321
    },
    {
      "step": "pack u30 again",
      "command": "splat-transform work/u30.ply work/u30-again.sog",
      "ms": 557
    },
    {
      "step": "render u30 again detail",
      "command": "splat-transform work/u30-again.sog -r 0,0,180 work/u30-again-detail.webp --camera-pos -1.6,1.6,5.4 --camera-target -0.4,1.7,4.7 --camera-fov 60 --camera-near 0.05 --resolution 1280x720",
      "ms": 1327
    },
    {
      "step": "render track",
      "command": "splat-transform work/c100.sog -r 0,0,180 work/track/f.webp --camera-track work/track.json --camera-near 0.05 --resolution 960x540",
      "ms": 20544
    },
    {
      "step": "encode film",
      "command": "ffmpeg -framerate 30 -i work/track/f.%04d.webp -c:v libx264 -pix_fmt yuv420p -crf 23 -preset slow -movflags +faststart -an img/fallback.mp4",
      "ms": 1100
    }
  ]
}