{
  "schema": "terra.asset-transcode-receipt.v1",
  "created_on": "2026-08-25",
  "purpose": "Seekable web replay of the published landslide comparison animation (2026-08-25 re-render)",
  "source": {
    "path": "public/assets/terra-slope-warming.gif",
    "sha256": "6983CE2E28D6D1B1BF0E495C9CC9454358DD510D4626E095C84B8FC9A1B0EE71",
    "width_px": 1932,
    "height_px": 1344,
    "decoded_frames": 47,
    "presentation_duration_seconds": 13.32
  },
  "output": {
    "path": "public/assets/terra-slope-warming.mp4",
    "sha256": "F70C96591E9FB38F17819F535114FC2D9CFD3E3D61410CA59FACAA19310C2783",
    "width_px": 1932,
    "height_px": 1344,
    "decoded_frames": 47,
    "presentation_duration_seconds": 11.16,
    "codec": "H.264 High, yuv420p",
    "all_frames_seekable": true
  },
  "transcode": {
    "tool": "ffmpeg 4.2.2 with libx264 (imageio-ffmpeg)",
    "command": "ffmpeg -hide_banner -y -f concat -safe 0 -i frames.txt -vsync vfr -frames:v 47 -c:v libx264 -preset slow -crf 19 -pix_fmt yuv420p -g 1 -keyint_min 1 -sc_threshold 0 terra-slope-warming.mp4",
    "frame_policy": "The GIF and the MP4 are both encoded from the same 47 rendered frames, once each and in input order, with no interpolation filter; the MP4 is encoded from the lossless PNG frames rather than the palette-quantized GIF.",
    "geometry_policy": "Frames are authored at an even 1932x1344; no pad, crop or rescale.",
    "timing_policy": "Both outputs carry the same graded per-frame presentation durations (see the render receipt). The GIF's 2.2 s final display hold is not reproduced by this encoder, so the MP4 is shorter; the web replay ends paused on the final frame. Replay time is presentation time and must not be labelled as simulation time; the in-frame 'sim t' clock is the recorded simulation time."
  }
}