{
  "status": "checkpoint-3-ready-for-user-review",
  "tested_dates": [
    "2026-10-17",
    "2026-10-18"
  ],
  "coverage": "Six tested tools; 30 cases, 31 attempts. Only complete native-timed groups rendered here.",
  "missing_timing": [],
  "quality_scores": {
    "status": "checkpoint-3-editorial-review-pending-user",
    "reviewer": "Codex visual assessment; AnimGen team review pending",
    "review_date": "2026-10-18",
    "scope": "Six tools, 30 cases, 31 attempts. Only these inputs and recorded settings; not a tool-wide success-rate estimate.",
    "score_order": [
      "identity",
      "motion",
      "loop_or_ending",
      "alpha_edges",
      "import_and_preparation"
    ],
    "score_basis": "First four scores describe unchanged source output. The fifth describes the work needed to obtain a usable result, not just whether an atlas loads. All raw atlases loaded in the common Godot adapter, including rejected outputs. No weighted ranking.",
    "selection_convention": "Zero-based source frame ranges, inclusive endpoints. Concatenate ranges in order. Preserve source duration unless speed_multiplier is given. No redraw, AI enhancement, interpolation, per-frame alignment or alpha cleanup.",
    "labor": {
      "human_edit_minutes": null,
      "reason": "Human active editing was not timed; do not invent it or substitute script runtime. Automated build time is measured separately per output. Recipes are reproducible but labor cost remains unquantified."
    },
    "records": [
      {
        "id": "autosprite/pixel-idle-1",
        "scores": [
          3,
          4,
          4,
          4,
          5
        ],
        "usability": "direct",
        "ranges": null,
        "pixel_grid": "Reinterpreted at 256×256; original 96×139 grid not retained.",
        "note": "Recognizable colors, sword and breathing loop. The original wide ready stance becomes a narrower, more upright stance.",
        "evidence_frames": [
          0,
          6,
          12,
          24
        ]
      },
      {
        "id": "autosprite/pixel-run-1",
        "scores": [
          3,
          4,
          3,
          4,
          3
        ],
        "usability": "edited",
        "ranges": [
          [
            8,
            14
          ]
        ],
        "pixel_grid": "Reinterpreted at 256×256; original grid not retained.",
        "note": "Clear strides and complete sword; view and proportions rock through the longer output. Select one seven-frame cycle at original 12 FPS; some view rocking remains.",
        "evidence_frames": [
          8,
          10,
          12,
          14
        ]
      },
      {
        "id": "autosprite/pixel-attack-1",
        "scores": [
          3,
          1,
          3,
          4,
          1
        ],
        "usability": "unusable",
        "ranges": null,
        "pixel_grid": "Reinterpreted at 256×256; original grid not retained.",
        "note": "Sword is raised and lowered, without a readable horizontal slash. Trimming cannot supply the missing action.",
        "evidence_frames": [
          0,
          4,
          7,
          10
        ]
      },
      {
        "id": "autosprite/robot-idle-1",
        "scores": [
          4,
          2,
          4,
          4,
          1
        ],
        "usability": "unusable",
        "ranges": null,
        "pixel_grid": null,
        "note": "A stable casual idle with arms lowered, not the requested fists-up fighting guard. Retained as the first attempt; its cost is included.",
        "evidence_frames": [
          0,
          8,
          16,
          24
        ]
      },
      {
        "id": "autosprite/robot-idle-2",
        "scores": [
          4,
          4,
          4,
          4,
          5
        ],
        "usability": "direct",
        "ranges": null,
        "pixel_grid": null,
        "note": "Second attempt has raised fists and a readable fighting idle. More side-on than the input. Both attempts count toward cost; only this one contributes a usable idle.",
        "evidence_frames": [
          0,
          8,
          16,
          24
        ]
      },
      {
        "id": "autosprite/robot-run-1",
        "scores": [
          3,
          3,
          3,
          4,
          3
        ],
        "usability": "edited",
        "ranges": [
          [
            7,
            13
          ]
        ],
        "pixel_grid": null,
        "note": "Recognizable running with both strides, but torso perspective rocks. Select one seven-frame cycle at original speed; no repositioning or repainting.",
        "evidence_frames": [
          7,
          8,
          10,
          12,
          13
        ]
      },
      {
        "id": "autosprite/robot-attack-1",
        "scores": [
          4,
          4,
          3,
          4,
          3
        ],
        "usability": "edited",
        "ranges": [
          [
            3,
            12
          ]
        ],
        "pixel_grid": null,
        "note": "Source contains two punches. Keep the first punch with startup and return to guard, ten frames at 12 FPS.",
        "evidence_frames": [
          3,
          5,
          6,
          9,
          12,
          17
        ]
      },
      {
        "id": "ludo/pixel-idle-1",
        "scores": [
          4,
          4,
          4,
          4,
          5
        ],
        "usability": "direct",
        "ranges": null,
        "pixel_grid": "Native 96×139 canvas; pixel-scale changes and mixed colors remain, not a locked 16-color palette.",
        "note": "Keeps the ready stance, recognizable outfit and sword, with subtle breathing. Uses the official GIF's own pixels and 70 ms delays.",
        "evidence_frames": [
          0,
          9,
          18,
          35
        ]
      },
      {
        "id": "ludo/pixel-run-1",
        "scores": [
          3,
          3,
          3,
          4,
          3
        ],
        "usability": "edited",
        "ranges": [
          [
            8,
            15
          ]
        ],
        "pixel_grid": "Native 96×139 canvas; palette and edge pixels change.",
        "note": "Raw rear foot is cut at the left edge in extended strides (for example 0, 7 and 16). Frames 8–15 provide a simplified compact cycle; a few sword-tip edge pixels remain tight/cropped. This is a borderline usable edit, not a clean full-stride result.",
        "evidence_frames": [
          0,
          7,
          8,
          9,
          12,
          15,
          16
        ],
        "borderline": true
      },
      {
        "id": "ludo/pixel-attack-1",
        "scores": [
          3,
          2,
          4,
          4,
          1
        ],
        "usability": "unusable",
        "ranges": null,
        "pixel_grid": "Native 96×139 canvas; pixel-scale shapes and colors change.",
        "note": "During the attack the blade becomes foreshortened/very thin and reaches outside the canvas; the extended hand is also clipped. A full readable sword attack cannot be recovered by trimming.",
        "evidence_frames": [
          2,
          3,
          4,
          6,
          7,
          9
        ]
      },
      {
        "id": "ludo/robot-idle-1",
        "scores": [
          4,
          4,
          4,
          5,
          5
        ],
        "usability": "direct",
        "ranges": null,
        "pixel_grid": null,
        "note": "Clear fists-up breathing idle with stable feet and a blink; small view shifts remain. Clean transparency in the reviewed backgrounds.",
        "evidence_frames": [
          0,
          9,
          18,
          35
        ]
      },
      {
        "id": "ludo/robot-run-1",
        "scores": [
          3,
          3,
          3,
          5,
          3
        ],
        "usability": "edited",
        "ranges": [
          [
            18,
            33
          ]
        ],
        "speed_multiplier": 1.25,
        "pixel_grid": null,
        "note": "Original movement reads as a slow jog/march with short strides and some body-size/view drift. Select a complete 16-frame cycle and increase playback speed by 25%; the short stride style remains. Borderline for a game needing a forceful run.",
        "evidence_frames": [
          18,
          21,
          25,
          28,
          33
        ],
        "borderline": true
      },
      {
        "id": "ludo/robot-attack-1",
        "scores": [
          4,
          4,
          5,
          5,
          5
        ],
        "usability": "direct",
        "ranges": null,
        "pixel_grid": null,
        "note": "One clear punch with anticipation, extension and recovery. A longer extension hold gives it a deliberate pace; no edit is required to retain the requested action.",
        "evidence_frames": [
          4,
          10,
          13,
          19,
          25,
          35
        ]
      },
      {
        "id": "spriteflow/pixel-idle-1",
        "scores": [
          4,
          4,
          4,
          4,
          5
        ],
        "usability": "direct",
        "ranges": null,
        "pixel_grid": "Smooth 512×512 reinterpretation; original pixel grid is not preserved.",
        "note": "Readable ready-stance breathing with stable feet and complete sword. Functionally usable as a 2D animation, not a drop-in grid-faithful pixel asset.",
        "evidence_frames": [
          0,
          8,
          16,
          31
        ]
      },
      {
        "id": "spriteflow/pixel-run-1",
        "scores": [
          4,
          3,
          3,
          3,
          3
        ],
        "usability": "edited",
        "ranges": [
          [
            8,
            11
          ]
        ],
        "pixel_grid": "Smooth 512×512 reinterpretation with soft/ghosted edges.",
        "note": "Remove standing endpoints and select a four-pose cycle at native 8 FPS. Large green residue appears in early raw frames; selected frames still show mild green/soft edges at the boots. No cleanup was applied.",
        "evidence_frames": [
          0,
          2,
          8,
          9,
          10,
          11,
          31
        ]
      },
      {
        "id": "spriteflow/pixel-attack-1",
        "scores": [
          4,
          3,
          4,
          3,
          1
        ],
        "usability": "unusable",
        "ranges": null,
        "pixel_grid": "Smooth 512×512 reinterpretation; not the source pixel grid.",
        "note": "The swing is recognizable, but its extended sword is clipped at the right edge during the impact/extension poses. Cutting those poses would remove the attack being tested.",
        "evidence_frames": [
          14,
          15,
          16,
          17,
          19,
          20,
          23
        ]
      },
      {
        "id": "spriteflow/robot-idle-1",
        "scores": [
          4,
          4,
          4,
          4,
          5
        ],
        "usability": "direct",
        "ranges": null,
        "pixel_grid": null,
        "note": "Recognizable fighting guard, stable feet and small breathing/hand motion. The subtle action works as an idle.",
        "evidence_frames": [
          0,
          8,
          16,
          31
        ]
      },
      {
        "id": "spriteflow/robot-run-1",
        "scores": [
          4,
          3,
          3,
          3,
          3
        ],
        "usability": "edited",
        "ranges": [
          [
            20,
            25
          ]
        ],
        "pixel_grid": null,
        "note": "Source starts and finishes standing. Select six running poses at native 8 FPS. Facial-expression changes and some green tint on boots/joints remain.",
        "evidence_frames": [
          0,
          20,
          22,
          24,
          25,
          31
        ]
      },
      {
        "id": "spriteflow/robot-attack-1",
        "scores": [
          4,
          3,
          3,
          4,
          3
        ],
        "usability": "edited",
        "ranges": [
          [
            4,
            13
          ]
        ],
        "pixel_grid": null,
        "note": "Source performs two punches. Keep the first with its held extension and return; ten frames at native 8 FPS. Sparse transition poses remain visible.",
        "evidence_frames": [
          4,
          6,
          10,
          11,
          12,
          13,
          22
        ]
      },
      {
        "id": "pixellab/pixel-idle-1",
        "scores": [
          4,
          3,
          3,
          3,
          3
        ],
        "usability": "edited",
        "ranges": [
          [
            2,
            5
          ]
        ],
        "pixel_grid": "Native 96×139 pixel grid; no resampling. Palette and individual edge pixels are not locked.",
        "note": "Remove the two exported input-reference frames. Four generated poses form a small breathing/hair-motion loop at native 6 FPS; a few stray hair/blade pixels remain.",
        "evidence_frames": [
          0,
          1,
          2,
          3,
          4,
          5
        ]
      },
      {
        "id": "pixellab/pixel-run-1",
        "scores": [
          4,
          3,
          3,
          3,
          3
        ],
        "usability": "edited",
        "ranges": [
          [
            2,
            9
          ]
        ],
        "speed_multiplier": 2,
        "pixel_grid": "Native 96×139 pixel grid; no smoothing. Sword-tip and hair pixels vary.",
        "note": "Remove the two reference frames and play the eight generated poses at 12 FPS instead of the editor's 6 FPS. This gives a stylized short-stride jog, not an athletic airborne run; slight foot-edge clipping and sword-tip variation remain. Borderline usability.",
        "evidence_frames": [
          0,
          1,
          2,
          3,
          5,
          6,
          9
        ],
        "borderline": true
      },
      {
        "id": "pixellab/pixel-attack-1",
        "scores": [
          3,
          2,
          3,
          2,
          1
        ],
        "usability": "unusable",
        "ranges": null,
        "pixel_grid": "Native 96×139 grid, but the thin weapon is unstable across generated frames.",
        "note": "In the generated portion the sword becomes thin/broken while the arm changes pose. A clear complete horizontal slash would require redrawing weapon frames or another generation.",
        "evidence_frames": [
          2,
          5,
          8,
          11,
          14,
          17
        ]
      },
      {
        "id": "sprite-ai/pixel-idle-1",
        "scores": [
          3,
          3,
          4,
          2,
          1
        ],
        "usability": "unusable",
        "ranges": null,
        "pixel_grid": "139×139 canvas with pixel-scale art; original blade pixels are not retained.",
        "note": "Body and breathing remain recognizable, but the front portion of the sword breaks into sparse pixels throughout. The loss is also visible on dark backgrounds; it is not only white-on-white display.",
        "evidence_frames": [
          0,
          2,
          4,
          7
        ]
      },
      {
        "id": "sprite-ai/pixel-run-1",
        "scores": [
          3,
          3,
          3,
          2,
          1
        ],
        "usability": "unusable",
        "ranges": null,
        "pixel_grid": "139×139 pixel-scale output; edge/palette changes present.",
        "note": "Compact readable running poses and easy eight-frame JSON timing, but the sword remains shortened/broken through the cycle. Repair would require drawing the weapon across frames.",
        "evidence_frames": [
          0,
          1,
          2,
          4,
          6,
          7
        ]
      },
      {
        "id": "sprite-ai/pixel-attack-1",
        "scores": [
          3,
          2,
          3,
          2,
          1
        ],
        "usability": "unusable",
        "ranges": null,
        "pixel_grid": "139×139 pixel-scale output; weapon continuity is not preserved.",
        "note": "Attack poses are present, but the blade becomes a fragmented line in key frames 2–5, obscuring the requested slash. Retiming cannot restore the missing sword.",
        "evidence_frames": [
          0,
          2,
          3,
          4,
          5,
          7
        ]
      },
      {
        "id": "animgen/pixel-idle-1",
        "scores": [
          2,
          3,
          3,
          4,
          1
        ],
        "usability": "unusable",
        "ranges": null,
        "pixel_grid": "560×752 video-derived output, soft/semtransparent pixels and many mixed colors; not a retained 96×139 grid.",
        "note": "From frame 1, the white blouse changes to orange and the sleeves/gloves change. Removing the first frame would hide the jump but would not restore the input costume, so this is not accepted as the same-character idle.",
        "evidence_frames": [
          0,
          1,
          20,
          60,
          96
        ]
      },
      {
        "id": "animgen/pixel-run-1",
        "scores": [
          3,
          3,
          2,
          4,
          1
        ],
        "usability": "unusable",
        "ranges": null,
        "pixel_grid": "560×752 video-derived pixel-style output; original grid and palette are not retained.",
        "note": "Running is recognizable, but the extended rear foot and sword are repeatedly clipped by the canvas. No complete clear cycle without those losses was identified in this pass.",
        "evidence_frames": [
          1,
          4,
          8,
          14,
          29,
          44,
          69,
          90
        ]
      },
      {
        "id": "animgen/pixel-attack-1",
        "scores": [
          3,
          2,
          1,
          4,
          1
        ],
        "usability": "unusable",
        "ranges": null,
        "pixel_grid": "560×752 video-derived output; not a grid-faithful pixel export.",
        "note": "The attack sends the sword and forward hand outside the right edge, holds the clipped pose, then changes back to ready. A complete visible slash cannot be recovered by removing idle time.",
        "evidence_frames": [
          18,
          27,
          28,
          35,
          56,
          57
        ]
      },
      {
        "id": "animgen/robot-idle-1",
        "scores": [
          5,
          4,
          4,
          5,
          5
        ],
        "usability": "direct",
        "ranges": null,
        "pixel_grid": null,
        "note": "Preserves the input costume and proportions with subtle breathing in a raised-fist guard. Feet remain in place and the alpha edge is clean in the reviewed backgrounds.",
        "evidence_frames": [
          0,
          24,
          48,
          72,
          96
        ]
      },
      {
        "id": "animgen/robot-run-1",
        "scores": [
          4,
          4,
          3,
          3,
          3
        ],
        "usability": "edited",
        "ranges": [
          [
            16,
            30
          ]
        ],
        "pixel_grid": null,
        "note": "Clear alternating strides. Trim the standing start and select a 15-frame cycle at the original 41/42 ms durations. Raw later frames include a faint green/ghosted foot artifact (for example 51); selected pixels are otherwise unchanged.",
        "evidence_frames": [
          0,
          16,
          19,
          23,
          27,
          30,
          51
        ]
      },
      {
        "id": "animgen/robot-attack-1",
        "scores": [
          5,
          3,
          3,
          5,
          3
        ],
        "usability": "edited",
        "ranges": [
          [
            24,
            33
          ],
          [
            63,
            77
          ]
        ],
        "pixel_grid": null,
        "note": "One clear punch, but long startup/ending idle and a prolonged extension hold. Keep 24–33 then 63–77, removing only the middle held pose and surrounding idle; original retained-frame durations and recovery are preserved.",
        "evidence_frames": [
          24,
          28,
          30,
          33,
          63,
          65,
          70,
          77
        ]
      }
    ]
  },
  "cost_per_usable": [
    {
      "tool": "autosprite",
      "group": "pixel",
      "cases": 3,
      "attempts": 3,
      "usable": 2,
      "direct": 1,
      "edited": 1,
      "usable_excluding_borderline": 2,
      "unit": "credits",
      "group_units": 15,
      "units_basis": "recorded actual consumption",
      "units_per_usable": 7.5,
      "units_per_usable_excluding_borderline": 7.5,
      "export_unlocks": 3,
      "usd_full_allowance_estimate_per_usable": null,
      "usd_formula": null,
      "no_usable_reason": null
    },
    {
      "tool": "autosprite",
      "group": "robot",
      "cases": 3,
      "attempts": 4,
      "usable": 3,
      "direct": 1,
      "edited": 2,
      "usable_excluding_borderline": 3,
      "unit": "credits",
      "group_units": 20,
      "units_basis": "recorded actual consumption",
      "units_per_usable": 6.666666666666667,
      "units_per_usable_excluding_borderline": 6.666666666666667,
      "export_unlocks": 4,
      "usd_full_allowance_estimate_per_usable": null,
      "usd_formula": null,
      "no_usable_reason": null
    },
    {
      "tool": "ludo",
      "group": "pixel",
      "cases": 3,
      "attempts": 3,
      "usable": 2,
      "direct": 1,
      "edited": 1,
      "usable_excluding_borderline": 1,
      "unit": "credits",
      "group_units": 13.5,
      "units_basis": "quote-based estimate; individual exact debits missing",
      "units_per_usable": 6.75,
      "units_per_usable_excluding_borderline": 13.5,
      "export_unlocks": null,
      "usd_full_allowance_estimate_per_usable": 0.54,
      "usd_formula": "$20 / 250 credits (Indie monthly)",
      "no_usable_reason": null
    },
    {
      "tool": "ludo",
      "group": "robot",
      "cases": 3,
      "attempts": 3,
      "usable": 3,
      "direct": 2,
      "edited": 1,
      "usable_excluding_borderline": 2,
      "unit": "credits",
      "group_units": 27,
      "units_basis": "recorded actual consumption",
      "units_per_usable": 9.0,
      "units_per_usable_excluding_borderline": 13.5,
      "export_unlocks": null,
      "usd_full_allowance_estimate_per_usable": 0.72,
      "usd_formula": "$20 / 250 credits (Indie monthly)",
      "no_usable_reason": null
    },
    {
      "tool": "spriteflow",
      "group": "pixel",
      "cases": 3,
      "attempts": 3,
      "usable": 2,
      "direct": 1,
      "edited": 1,
      "usable_excluding_borderline": 2,
      "unit": "credits",
      "group_units": 30,
      "units_basis": "recorded actual consumption",
      "units_per_usable": 15.0,
      "units_per_usable_excluding_borderline": 15.0,
      "export_unlocks": null,
      "usd_full_allowance_estimate_per_usable": 1.1175,
      "usd_formula": "$14.90 / 200 credits (account offer; invoice/tax not verified)",
      "no_usable_reason": null
    },
    {
      "tool": "spriteflow",
      "group": "robot",
      "cases": 3,
      "attempts": 3,
      "usable": 3,
      "direct": 1,
      "edited": 2,
      "usable_excluding_borderline": 3,
      "unit": "credits",
      "group_units": 30,
      "units_basis": "recorded actual consumption",
      "units_per_usable": 10.0,
      "units_per_usable_excluding_borderline": 10.0,
      "export_unlocks": null,
      "usd_full_allowance_estimate_per_usable": 0.745,
      "usd_formula": "$14.90 / 200 credits (account offer; invoice/tax not verified)",
      "no_usable_reason": null
    },
    {
      "tool": "pixellab",
      "group": "pixel",
      "cases": 3,
      "attempts": 3,
      "usable": 2,
      "direct": 0,
      "edited": 2,
      "usable_excluding_borderline": 1,
      "unit": "generation allowance",
      "group_units": 7,
      "units_basis": "recorded actual consumption",
      "units_per_usable": 3.5,
      "units_per_usable_excluding_borderline": 7.0,
      "export_unlocks": null,
      "usd_full_allowance_estimate_per_usable": null,
      "usd_formula": null,
      "no_usable_reason": null
    },
    {
      "tool": "sprite-ai",
      "group": "pixel",
      "cases": 3,
      "attempts": 3,
      "usable": 0,
      "direct": 0,
      "edited": 0,
      "usable_excluding_borderline": 0,
      "unit": "Tokens",
      "group_units": 42,
      "units_basis": "recorded actual consumption",
      "units_per_usable": null,
      "units_per_usable_excluding_borderline": null,
      "export_unlocks": null,
      "usd_full_allowance_estimate_per_usable": null,
      "usd_formula": null,
      "no_usable_reason": "No accepted result; cost per usable result is undefined, not zero."
    },
    {
      "tool": "animgen",
      "group": "pixel",
      "cases": 3,
      "attempts": 3,
      "usable": 0,
      "direct": 0,
      "edited": 0,
      "usable_excluding_borderline": 0,
      "unit": "credits",
      "group_units": 108,
      "units_basis": "recorded actual consumption",
      "units_per_usable": null,
      "units_per_usable_excluding_borderline": null,
      "export_unlocks": null,
      "usd_full_allowance_estimate_per_usable": null,
      "usd_formula": null,
      "no_usable_reason": "No accepted result; cost per usable result is undefined, not zero."
    },
    {
      "tool": "animgen",
      "group": "robot",
      "cases": 3,
      "attempts": 3,
      "usable": 3,
      "direct": 1,
      "edited": 2,
      "usable_excluding_borderline": 3,
      "unit": "credits",
      "group_units": 108,
      "units_basis": "recorded actual consumption",
      "units_per_usable": 36.0,
      "units_per_usable_excluding_borderline": 36.0,
      "export_unlocks": null,
      "usd_full_allowance_estimate_per_usable": null,
      "usd_formula": null,
      "no_usable_reason": null
    }
  ],
  "publication": "Local review only; no deployment. Recheck display rights before publication.",
  "panels": [
    {
      "file": "pixel-idle-native-compare.mp4",
      "sha256": "167327711378193c9a9a512da2378bfedd9b434d7bde1632c30b6a7a0278f3b6",
      "bytes": 2440618,
      "poster": {
        "file": "pixel-idle-native-compare.jpg",
        "sha256": "8c8b71f10e39c9d6160cd88e82c9b5db58ad8120d2f6b760a040cb10b049165a"
      },
      "container_fps": 60,
      "seconds": 12,
      "timing": "Original speed; source frames held, no interpolation. Sampling tolerance 1/60s.",
      "records": [
        {
          "tool": "autosprite",
          "case": "pixel-idle-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            256,
            256
          ],
          "frame_count": 25,
          "durations_ms": [
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333
          ],
          "timing_basis": "Recorded original UI playback: 12 FPS",
          "cost": {
            "unit": "credits",
            "charged": 5,
            "quoted": 5,
            "refund": 0,
            "funding": "free allowance",
            "export_unlocks": 1
          },
          "display_transform": {
            "fixed_union_crop": [
              84,
              28,
              184,
              227
            ],
            "display_scale": 1.1557788944723617,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "2fff1e96ae44f19cf5c715b52f3c5c84dcda07405735152fadefbbbd97162b72",
            "876d17bc27d54844c4d7cc06398059834aaf6a9e9c678d681e62ed4f5b890bbd"
          ],
          "terms_url": "https://www.autosprite.io/terms"
        },
        {
          "tool": "ludo",
          "case": "pixel-idle-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            96,
            139
          ],
          "frame_count": 36,
          "durations_ms": [
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70,
            70
          ],
          "timing_basis": "Official GIF delays; not assumed identical to JSON timing",
          "cost": {
            "unit": "credits",
            "charged": null,
            "quoted": 4.5,
            "refund": 0,
            "funding": "Free",
            "note": "Quote was 4.5 credits, displayed integer balance changed from 10 to 6. Exact fractional balance and actual debit were not independently exposed; do not report a verified 4-credit debit."
          },
          "display_transform": {
            "fixed_union_crop": [
              0,
              0,
              96,
              139
            ],
            "display_scale": 1.6546762589928057,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "90cd80f819f2c29ec8f7eb4aacb93f415ba5cbd8839972f8ae03b2f80c839c24"
          ],
          "terms_url": "https://ludo.ai/privacy-policies"
        },
        {
          "tool": "spriteflow",
          "case": "pixel-idle-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            512,
            512
          ],
          "frame_count": 32,
          "durations_ms": [
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0
          ],
          "timing_basis": "Official manifest animation.fps",
          "cost": {
            "unit": "credits",
            "charged": 10,
            "quoted": 10,
            "refund": 0,
            "funding": "Starter",
            "note": null
          },
          "display_transform": {
            "fixed_union_crop": [
              114,
              64,
              407,
              446
            ],
            "display_scale": 0.6020942408376964,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "123c49c8e28f3ce940d7261747ee60119319fdc0cd3c6249844beddc646779c6",
            "c8e89a4d35cd951e4917cef9644f844d8a6682bc321b89b95af38464e6b93eb9"
          ],
          "terms_url": "https://spriteflow.io/terms"
        },
        {
          "tool": "pixellab",
          "case": "pixel-idle-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            96,
            139
          ],
          "frame_count": 6,
          "durations_ms": [
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666
          ],
          "timing_basis": "Official PXO editor timing; includes two input-reference frames",
          "cost": {
            "unit": "generation allowance",
            "charged": 1,
            "quoted": 1,
            "refund": 0,
            "funding": "free trial",
            "cash_usd": 0
          },
          "display_transform": {
            "fixed_union_crop": [
              0,
              0,
              96,
              139
            ],
            "display_scale": 1.6546762589928057,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "47780b08a8ec89bd547bacda7f76a22ad2ecad31fbd7b0f3334a33f15e7dc265",
            "f4fb93650237cb7cf8f4f45e263efd42fcf07e7cf92762b3a1b282ff2753b19f"
          ],
          "terms_url": "https://www.pixellab.ai/termsofservice"
        },
        {
          "tool": "sprite-ai",
          "case": "pixel-idle-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            139,
            139
          ],
          "frame_count": 8,
          "durations_ms": [
            125,
            125,
            125,
            125,
            125,
            125,
            125,
            125
          ],
          "timing_basis": "Official atlas per-frame duration (milliseconds)",
          "cost": {
            "unit": "Tokens",
            "charged": 14,
            "quoted": 14,
            "refund": 0,
            "export_charged": 0,
            "funding": "Creator monthly"
          },
          "display_transform": {
            "fixed_union_crop": [
              22,
              1,
              107,
              138
            ],
            "display_scale": 1.6788321167883211,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "4587f20b7755fae1a6bcae01295c62e4a3467b66101152f15f04e4d2da7bf1f6",
            "a4ad108b3a2781d6bee8312c6511ff4c0a8f2e5494a42b80ad50fd2834ac5d7b"
          ],
          "terms_url": "https://www.sprite-ai.art/terms"
        },
        {
          "tool": "animgen",
          "case": "pixel-idle-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            560,
            752
          ],
          "frame_count": 97,
          "durations_ms": [
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42
          ],
          "timing_basis": "Official atlas per-frame duration (milliseconds)",
          "cost": {
            "unit": "credits",
            "charged": 36,
            "quoted": 36,
            "refund": 0,
            "export_charged": 0,
            "funding": "existing account"
          },
          "display_transform": {
            "fixed_union_crop": [
              0,
              0,
              560,
              752
            ],
            "display_scale": 0.3058510638297872,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "3a035bf3eb055ae9f1ee172297594aa1127d35bcae5c41826fa5dd1629eac275",
            "95f7f3ddcccac50f5fa33c691c403d7ce2dfa437dc5233388c79694c3da3711e"
          ],
          "terms_url": "https://animgen.com/terms"
        }
      ]
    },
    {
      "file": "pixel-run-native-compare.mp4",
      "sha256": "f065439ec143576e2c9325b196432e2459fe3641de5758623421146eddf35b9f",
      "bytes": 3758717,
      "poster": {
        "file": "pixel-run-native-compare.jpg",
        "sha256": "c123ff2c009dc6a15135eaa6c291ca73d9f5582b4050407b82269ca32d2de67d"
      },
      "container_fps": 60,
      "seconds": 12,
      "timing": "Original speed; source frames held, no interpolation. Sampling tolerance 1/60s.",
      "records": [
        {
          "tool": "autosprite",
          "case": "pixel-run-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            256,
            256
          ],
          "frame_count": 25,
          "durations_ms": [
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333
          ],
          "timing_basis": "Recorded original UI playback: 12 FPS",
          "cost": {
            "unit": "credits",
            "charged": 5,
            "quoted": 5,
            "refund": 0,
            "funding": "approved post-purchase account balance; see ../paid-batch-20261017.json",
            "export_unlocks": 1
          },
          "display_transform": {
            "fixed_union_crop": [
              29,
              29,
              241,
              228
            ],
            "display_scale": 1.1557788944723617,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "a3c46dfe6fa92076675c7632f4725bd87d033d4fb70b39e8072a45880a912272",
            "f111346dba14ac9cb66040e7269f3f7be0f328b152b80560b310e654ca2809c1"
          ],
          "terms_url": "https://www.autosprite.io/terms"
        },
        {
          "tool": "ludo",
          "case": "pixel-run-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            96,
            139
          ],
          "frame_count": 35,
          "durations_ms": [
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63,
            63
          ],
          "timing_basis": "Official atlas per-frame duration (milliseconds)",
          "cost": {
            "unit": "credits",
            "charged": null,
            "quoted": 4.5,
            "refund": 0,
            "funding": "Indie monthly",
            "note": "Quoted 4.5; integer balance changed 255 to 251. Exact individual fractional debit was not exposed. Pixel run plus pixel attack together changed 255 to 246, consistent with two 4.5-credit quotes; full approved batch changed 255 to 228."
          },
          "display_transform": {
            "fixed_union_crop": [
              0,
              0,
              96,
              139
            ],
            "display_scale": 1.6546762589928057,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "a84c20a3b93076116cf4fa1d8eaf66a3f20e4f2fbe3fba827a5cc3ba20edad23",
            "f26c848d9e686dc870e83ba8eaf68c3cbc9c2c6fa59b9750a07b2ea6b9e538b4"
          ],
          "terms_url": "https://ludo.ai/privacy-policies"
        },
        {
          "tool": "spriteflow",
          "case": "pixel-run-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            512,
            512
          ],
          "frame_count": 32,
          "durations_ms": [
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0
          ],
          "timing_basis": "Official manifest animation.fps",
          "cost": {
            "unit": "credits",
            "charged": 10,
            "quoted": 10,
            "refund": 0,
            "funding": "Starter",
            "note": null
          },
          "display_transform": {
            "fixed_union_crop": [
              104,
              77,
              491,
              441
            ],
            "display_scale": 0.6318681318681318,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "e8eb7111cbc1b468215b4dbd8e2ca38daf2b1dea88e6626f3bae444afa9501cc",
            "0187149dcb7ae71a2778bc1c7737d063d74372cb9e5c3c7d2b63b6c5246f96e9"
          ],
          "terms_url": "https://spriteflow.io/terms"
        },
        {
          "tool": "pixellab",
          "case": "pixel-run-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            96,
            139
          ],
          "frame_count": 10,
          "durations_ms": [
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666
          ],
          "timing_basis": "Official PXO editor timing; includes two input-reference frames",
          "cost": {
            "unit": "generation allowance",
            "charged": 2,
            "quoted": 2,
            "refund": 0,
            "funding": "free trial",
            "cash_usd": 0
          },
          "display_transform": {
            "fixed_union_crop": [
              0,
              0,
              96,
              139
            ],
            "display_scale": 1.6546762589928057,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "ef3973492560fb8d9512e0f1cb14c5a4f9e1b20fc5d8910269426f0f73dcaff9",
            "71d496ea65dd1177b3adbec1df2e6b032f96975fc50d5679f7fa2bc14c1e8746"
          ],
          "terms_url": "https://www.pixellab.ai/termsofservice"
        },
        {
          "tool": "sprite-ai",
          "case": "pixel-run-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            139,
            139
          ],
          "frame_count": 8,
          "durations_ms": [
            125,
            125,
            125,
            125,
            125,
            125,
            125,
            125
          ],
          "timing_basis": "Official atlas per-frame duration (milliseconds)",
          "cost": {
            "unit": "Tokens",
            "charged": 14,
            "quoted": 14,
            "refund": 0,
            "export_charged": 0,
            "funding": "Creator monthly"
          },
          "display_transform": {
            "fixed_union_crop": [
              10,
              1,
              110,
              138
            ],
            "display_scale": 1.6788321167883211,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "bc9aa17535b09607655ff60df267e7b6f4a15b9c4ca30c1c5107a447eb45b957",
            "a4ad108b3a2781d6bee8312c6511ff4c0a8f2e5494a42b80ad50fd2834ac5d7b"
          ],
          "terms_url": "https://www.sprite-ai.art/terms"
        },
        {
          "tool": "animgen",
          "case": "pixel-run-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            560,
            752
          ],
          "frame_count": 97,
          "durations_ms": [
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42
          ],
          "timing_basis": "Official atlas per-frame duration (milliseconds)",
          "cost": {
            "unit": "credits",
            "charged": 36,
            "quoted": 36,
            "refund": 0,
            "export_charged": 0,
            "funding": "existing account"
          },
          "display_transform": {
            "fixed_union_crop": [
              0,
              0,
              560,
              752
            ],
            "display_scale": 0.3058510638297872,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "9f0fb917e705dda748b46d3b927311a49eb0c8e654df7e686ebde00f0cd500f4",
            "95f7f3ddcccac50f5fa33c691c403d7ce2dfa437dc5233388c79694c3da3711e"
          ],
          "terms_url": "https://animgen.com/terms"
        }
      ]
    },
    {
      "file": "pixel-attack-native-compare.mp4",
      "sha256": "34c8bedbb04a369b4db30eb68f039f666c2ea7eda1c06ba4708f035beb21ea4d",
      "bytes": 1603531,
      "poster": {
        "file": "pixel-attack-native-compare.jpg",
        "sha256": "f03f37ec3d9bc0f712564deaf2dbd43f280f48512d205903af5ba14006a22f1c"
      },
      "container_fps": 60,
      "seconds": 12,
      "timing": "Original speed; source frames held, no interpolation. Sampling tolerance 1/60s.",
      "records": [
        {
          "tool": "autosprite",
          "case": "pixel-attack-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            256,
            256
          ],
          "frame_count": 25,
          "durations_ms": [
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333
          ],
          "timing_basis": "Recorded original UI playback: 12 FPS",
          "cost": {
            "unit": "credits",
            "charged": 5,
            "quoted": 5,
            "refund": 0,
            "funding": "approved post-purchase account balance; see ../paid-batch-20261017.json",
            "export_unlocks": 1
          },
          "display_transform": {
            "fixed_union_crop": [
              89,
              51,
              239,
              225
            ],
            "display_scale": 1.3218390804597702,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "c6d47511cfa6ba296bc6ebb07af98810ab53a5946aa9c32484058b2cfafcdd4d",
            "8d08987eccef57d7aad5b17a6d1d69741fd28fae7714d36a24de89f1cfaeccd2"
          ],
          "terms_url": "https://www.autosprite.io/terms"
        },
        {
          "tool": "ludo",
          "case": "pixel-attack-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            96,
            139
          ],
          "frame_count": 36,
          "durations_ms": [
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64,
            64
          ],
          "timing_basis": "Official atlas per-frame duration (milliseconds)",
          "cost": {
            "unit": "credits",
            "charged": 4.5,
            "quoted": 4.5,
            "refund": 0,
            "funding": "Indie monthly",
            "note": null
          },
          "display_transform": {
            "fixed_union_crop": [
              0,
              0,
              96,
              139
            ],
            "display_scale": 1.6546762589928057,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "20cc2d98ec5281fadaf8632b2f93284559d128c84455c9b99105af2ac9131c22",
            "e3220757e3255d83021f73cf5346e02b3331cc0141f7573eb9dbbc775174c230"
          ],
          "terms_url": "https://ludo.ai/privacy-policies"
        },
        {
          "tool": "spriteflow",
          "case": "pixel-attack-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            512,
            512
          ],
          "frame_count": 32,
          "durations_ms": [
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0
          ],
          "timing_basis": "Official manifest animation.fps",
          "cost": {
            "unit": "credits",
            "charged": 10,
            "quoted": 10,
            "refund": 0,
            "funding": "Starter",
            "note": null
          },
          "display_transform": {
            "fixed_union_crop": [
              0,
              67,
              512,
              447
            ],
            "display_scale": 0.546875,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "3f0a69268831d7d2e3a110e39c836389b7e643eac01c65a64cd63f1713da34a3",
            "b1f53963fe23bda95d73891fdd4e8cae8f6b32eddd7236ea0c6c05891cabe45e"
          ],
          "terms_url": "https://spriteflow.io/terms"
        },
        {
          "tool": "pixellab",
          "case": "pixel-attack-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            96,
            139
          ],
          "frame_count": 18,
          "durations_ms": [
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666,
            166.66666666666666
          ],
          "timing_basis": "Official PXO editor timing; includes two input-reference frames",
          "cost": {
            "unit": "generation allowance",
            "charged": 4,
            "quoted": 4,
            "refund": 0,
            "funding": "free trial",
            "cash_usd": 0
          },
          "display_transform": {
            "fixed_union_crop": [
              0,
              0,
              96,
              139
            ],
            "display_scale": 1.6546762589928057,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "d27c4a4fa53db1bbc0cc726d9124984dde4dde1933dd715bfe153faa01c22416",
            "646a9cdd86c8c8cc1cbd99e1cf01b35af6c268fde43c27009a927ab927d06c9a"
          ],
          "terms_url": "https://www.pixellab.ai/termsofservice"
        },
        {
          "tool": "sprite-ai",
          "case": "pixel-attack-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            139,
            139
          ],
          "frame_count": 8,
          "durations_ms": [
            125,
            125,
            125,
            125,
            125,
            125,
            125,
            125
          ],
          "timing_basis": "Official atlas per-frame duration (milliseconds)",
          "cost": {
            "unit": "Tokens",
            "charged": 14,
            "quoted": 14,
            "refund": 0,
            "export_charged": 0,
            "funding": "Creator monthly"
          },
          "display_transform": {
            "fixed_union_crop": [
              20,
              1,
              134,
              138
            ],
            "display_scale": 1.6788321167883211,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "8888faddcf2c0a9c902f090f19c797e3623d60092fc40d0d608ccd973cc8d20a",
            "a4ad108b3a2781d6bee8312c6511ff4c0a8f2e5494a42b80ad50fd2834ac5d7b"
          ],
          "terms_url": "https://www.sprite-ai.art/terms"
        },
        {
          "tool": "animgen",
          "case": "pixel-attack-1",
          "attempt": 1,
          "input_sha256": "1f536be0f66d4cb273d4b95074d2628ce3079c5029d6aecf92be1f9bf23aa355",
          "frame_size": [
            560,
            752
          ],
          "frame_count": 97,
          "durations_ms": [
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42
          ],
          "timing_basis": "Official atlas per-frame duration (milliseconds)",
          "cost": {
            "unit": "credits",
            "charged": 36,
            "quoted": 36,
            "refund": 0,
            "export_charged": 0,
            "funding": "existing account"
          },
          "display_transform": {
            "fixed_union_crop": [
              0,
              0,
              560,
              752
            ],
            "display_scale": 0.3058510638297872,
            "filter": "nearest",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "20bed7a2e3663353e4901fcc971987497ce68652b4d970acbedd2f11df36de4d",
            "95f7f3ddcccac50f5fa33c691c403d7ce2dfa437dc5233388c79694c3da3711e"
          ],
          "terms_url": "https://animgen.com/terms"
        }
      ]
    },
    {
      "file": "robot-idle-native-compare.mp4",
      "sha256": "2878c9ff37cb3044dfd37a8603b2b547da73e5f05748002319e3207d9eced653",
      "bytes": 1927580,
      "poster": {
        "file": "robot-idle-native-compare.jpg",
        "sha256": "baa3ab449870c8fa28a9beb19e9cb72f1c08bd2ac0997731e9d1a0b13c3f72cd"
      },
      "container_fps": 60,
      "seconds": 12,
      "timing": "Original speed; source frames held, no interpolation. Sampling tolerance 1/60s.",
      "records": [
        {
          "tool": "autosprite",
          "case": "robot-idle-1",
          "attempt": 1,
          "input_sha256": "94952fa2b23241d3b1c8200b6ed1ed8c1a1a4cdff29dba66c2d7675a04b739fc",
          "frame_size": [
            256,
            256
          ],
          "frame_count": 25,
          "durations_ms": [
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333
          ],
          "timing_basis": "Recorded original UI playback: 12 FPS",
          "cost": {
            "unit": "credits",
            "charged": 5,
            "quoted": 5,
            "refund": 0,
            "funding": "free allowance",
            "export_unlocks": 1
          },
          "display_transform": {
            "fixed_union_crop": [
              79,
              51,
              171,
              212
            ],
            "display_scale": 1.4285714285714286,
            "filter": "lanczos",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "cd8d7a3a8403022d1d1a258f6bbd8b2caeb9b6469013b320602f546a21a3d3ff",
            "cddc3c82bcf0b34ff0c159010ebc0fdc3443105b52707b7a42f9724085cbf8dd"
          ],
          "terms_url": "https://www.autosprite.io/terms"
        },
        {
          "tool": "ludo",
          "case": "robot-idle-1",
          "attempt": 1,
          "input_sha256": "94952fa2b23241d3b1c8200b6ed1ed8c1a1a4cdff29dba66c2d7675a04b739fc",
          "frame_size": [
            428,
            566
          ],
          "frame_count": 36,
          "durations_ms": [
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59
          ],
          "timing_basis": "Official atlas per-frame duration (milliseconds)",
          "cost": {
            "unit": "credits",
            "charged": 9,
            "quoted": 9,
            "refund": 0,
            "funding": "Free",
            "note": null
          },
          "display_transform": {
            "fixed_union_crop": [
              25,
              1,
              427,
              556
            ],
            "display_scale": 0.4144144144144144,
            "filter": "lanczos",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "ae21f5ebc427db86237220e957e97d53fe99d280442910968ed03fc210c8eb44",
            "5611f9c9927f413af5ac0f1a9b381a1de94d459dd1dcbe3fd19b3f2ec3e276ee"
          ],
          "terms_url": "https://ludo.ai/privacy-policies"
        },
        {
          "tool": "spriteflow",
          "case": "robot-idle-1",
          "attempt": 1,
          "input_sha256": "94952fa2b23241d3b1c8200b6ed1ed8c1a1a4cdff29dba66c2d7675a04b739fc",
          "frame_size": [
            512,
            512
          ],
          "frame_count": 32,
          "durations_ms": [
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0
          ],
          "timing_basis": "Official manifest animation.fps",
          "cost": {
            "unit": "credits",
            "charged": 10,
            "quoted": 10,
            "refund": 0,
            "funding": "Free",
            "note": null
          },
          "display_transform": {
            "fixed_union_crop": [
              144,
              101,
              368,
              418
            ],
            "display_scale": 0.7255520504731862,
            "filter": "lanczos",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "3be5d66ea00ea2b9e8eb628855e004f88912bc68f3531af16e892e9cd55d1fdb",
            "3b9c5895c6138c529940ece51a2cc65f5069dce7a1153aa74d8e1ebc095291b4"
          ],
          "terms_url": "https://spriteflow.io/terms"
        },
        {
          "tool": "animgen",
          "case": "robot-idle-1",
          "attempt": 1,
          "input_sha256": "94952fa2b23241d3b1c8200b6ed1ed8c1a1a4cdff29dba66c2d7675a04b739fc",
          "frame_size": [
            640,
            640
          ],
          "frame_count": 97,
          "durations_ms": [
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42
          ],
          "timing_basis": "Official atlas per-frame duration (milliseconds)",
          "cost": {
            "unit": "credits",
            "charged": 36,
            "quoted": 36,
            "refund": 0,
            "export_charged": 0,
            "funding": "existing account"
          },
          "display_transform": {
            "fixed_union_crop": [
              144,
              67,
              499,
              583
            ],
            "display_scale": 0.44573643410852715,
            "filter": "lanczos",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "0aadff923e1a6d94145215c4fe446222900389433cc93e9a0d12fdbd8da61fe6",
            "728ee0097bf828b93102caa6f322e16bf4cd573f1a0eeb2fabea6f6235053564"
          ],
          "terms_url": "https://animgen.com/terms"
        }
      ]
    },
    {
      "file": "robot-run-native-compare.mp4",
      "sha256": "200ac8b8f1ab73981fff72719e30305a0050d422fb54093bcde58e4539327318",
      "bytes": 3177150,
      "poster": {
        "file": "robot-run-native-compare.jpg",
        "sha256": "aa56ac80c003e5253455903e446c284af3643b942328bac4adb5180ad623da64"
      },
      "container_fps": 60,
      "seconds": 12,
      "timing": "Original speed; source frames held, no interpolation. Sampling tolerance 1/60s.",
      "records": [
        {
          "tool": "autosprite",
          "case": "robot-run-1",
          "attempt": 1,
          "input_sha256": "94952fa2b23241d3b1c8200b6ed1ed8c1a1a4cdff29dba66c2d7675a04b739fc",
          "frame_size": [
            256,
            256
          ],
          "frame_count": 25,
          "durations_ms": [
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333
          ],
          "timing_basis": "Recorded original UI playback: 12 FPS",
          "cost": {
            "unit": "credits",
            "charged": 5,
            "quoted": 5,
            "refund": 0,
            "funding": "approved post-purchase account balance; see ../paid-batch-20261017.json",
            "export_unlocks": 1
          },
          "display_transform": {
            "fixed_union_crop": [
              40,
              48,
              193,
              215
            ],
            "display_scale": 1.377245508982036,
            "filter": "lanczos",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "b306031e811c6e611f7ee61628e4a50fc2d078b85d95de075ac9d68b4a67ae4c",
            "5aac1768ed514f9e4372441887222092193952d75633ce4a518578dcddc5baaf"
          ],
          "terms_url": "https://www.autosprite.io/terms"
        },
        {
          "tool": "ludo",
          "case": "robot-run-1",
          "attempt": 1,
          "input_sha256": "94952fa2b23241d3b1c8200b6ed1ed8c1a1a4cdff29dba66c2d7675a04b739fc",
          "frame_size": [
            464,
            572
          ],
          "frame_count": 36,
          "durations_ms": [
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59,
            59
          ],
          "timing_basis": "Official atlas per-frame duration (milliseconds)",
          "cost": {
            "unit": "credits",
            "charged": 9,
            "quoted": 9,
            "refund": 0,
            "funding": "Indie monthly",
            "note": null
          },
          "display_transform": {
            "fixed_union_crop": [
              1,
              13,
              422,
              570
            ],
            "display_scale": 0.4129263913824057,
            "filter": "lanczos",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "4ed8c983223ea19a91d8cdc63e3d4d7680de6906ae2d4cef36e9815355fe26b3",
            "2bf11489356722e371cfd8d926a158ff20d25d6860e68b6dd08ec753f40669aa"
          ],
          "terms_url": "https://ludo.ai/privacy-policies"
        },
        {
          "tool": "spriteflow",
          "case": "robot-run-1",
          "attempt": 1,
          "input_sha256": "94952fa2b23241d3b1c8200b6ed1ed8c1a1a4cdff29dba66c2d7675a04b739fc",
          "frame_size": [
            512,
            512
          ],
          "frame_count": 32,
          "durations_ms": [
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0
          ],
          "timing_basis": "Official manifest animation.fps",
          "cost": {
            "unit": "credits",
            "charged": 10,
            "quoted": 10,
            "refund": 0,
            "funding": "Starter",
            "note": null
          },
          "display_transform": {
            "fixed_union_crop": [
              111,
              94,
              383,
              422
            ],
            "display_scale": 0.7012195121951219,
            "filter": "lanczos",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "c7e1053497d1d37bb9b8e7d4f5dc9f7d541859d053dd2d2d51a98303f4929b78",
            "a317973a9d2a068e5d3e270aff6889b9eba91d41d27b6a25a12187bb432551a1"
          ],
          "terms_url": "https://spriteflow.io/terms"
        },
        {
          "tool": "animgen",
          "case": "robot-run-1",
          "attempt": 1,
          "input_sha256": "94952fa2b23241d3b1c8200b6ed1ed8c1a1a4cdff29dba66c2d7675a04b739fc",
          "frame_size": [
            640,
            640
          ],
          "frame_count": 97,
          "durations_ms": [
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42
          ],
          "timing_basis": "Official atlas per-frame duration (milliseconds)",
          "cost": {
            "unit": "credits",
            "charged": 36,
            "quoted": 36,
            "refund": 0,
            "export_charged": 0,
            "funding": "existing account"
          },
          "display_transform": {
            "fixed_union_crop": [
              87,
              53,
              516,
              591
            ],
            "display_scale": 0.4275092936802974,
            "filter": "lanczos",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "e889a1b0c952b3b56c188d8c5f59eb6e99960a41b7ac29ee65dcaaa9a262fa2e",
            "728ee0097bf828b93102caa6f322e16bf4cd573f1a0eeb2fabea6f6235053564"
          ],
          "terms_url": "https://animgen.com/terms"
        }
      ]
    },
    {
      "file": "robot-attack-native-compare.mp4",
      "sha256": "52b9c52067e2bf50befbfda64c4d631b87cba4165c190d80606091790117cb7f",
      "bytes": 1554523,
      "poster": {
        "file": "robot-attack-native-compare.jpg",
        "sha256": "f04399e63a45ac8cd89f29fcd1f94e504e46711e32b28c47c24f11f1038485ce"
      },
      "container_fps": 60,
      "seconds": 12,
      "timing": "Original speed; source frames held, no interpolation. Sampling tolerance 1/60s.",
      "records": [
        {
          "tool": "autosprite",
          "case": "robot-attack-1",
          "attempt": 1,
          "input_sha256": "94952fa2b23241d3b1c8200b6ed1ed8c1a1a4cdff29dba66c2d7675a04b739fc",
          "frame_size": [
            256,
            256
          ],
          "frame_count": 25,
          "durations_ms": [
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333,
            83.33333333333333
          ],
          "timing_basis": "Recorded original UI playback: 12 FPS",
          "cost": {
            "unit": "credits",
            "charged": 5,
            "quoted": 5,
            "refund": 0,
            "funding": "approved post-purchase account balance; see ../paid-batch-20261017.json",
            "export_unlocks": 1
          },
          "display_transform": {
            "fixed_union_crop": [
              81,
              57,
              212,
              210
            ],
            "display_scale": 1.5032679738562091,
            "filter": "lanczos",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "def18df105ae8ab9683fa8fb4a283c6df52ea78059412d6c3d2ac613470b6a6d",
            "9a86d47cb847c1b00f0f06cc92853b6f28d92b845b5f2e228ada52d7424d0728"
          ],
          "terms_url": "https://www.autosprite.io/terms"
        },
        {
          "tool": "ludo",
          "case": "robot-attack-1",
          "attempt": 1,
          "input_sha256": "94952fa2b23241d3b1c8200b6ed1ed8c1a1a4cdff29dba66c2d7675a04b739fc",
          "frame_size": [
            462,
            446
          ],
          "frame_count": 36,
          "durations_ms": [
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75,
            75
          ],
          "timing_basis": "Official atlas per-frame duration (milliseconds)",
          "cost": {
            "unit": "credits",
            "charged": 9,
            "quoted": 9,
            "refund": 0,
            "funding": "Indie monthly",
            "note": null
          },
          "display_transform": {
            "fixed_union_crop": [
              19,
              2,
              460,
              445
            ],
            "display_scale": 0.5191873589164786,
            "filter": "lanczos",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "0a4acc185dda743b1ab24b6ebf50f7a175ade13cfd11f0dad424bce7045c903c",
            "f7577f95a128156aca406aed361b506aaf88b4b651ca203e78dc0abd0d318b34"
          ],
          "terms_url": "https://ludo.ai/privacy-policies"
        },
        {
          "tool": "spriteflow",
          "case": "robot-attack-1",
          "attempt": 1,
          "input_sha256": "94952fa2b23241d3b1c8200b6ed1ed8c1a1a4cdff29dba66c2d7675a04b739fc",
          "frame_size": [
            512,
            512
          ],
          "frame_count": 32,
          "durations_ms": [
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0,
            125.0
          ],
          "timing_basis": "Official manifest animation.fps",
          "cost": {
            "unit": "credits",
            "charged": 10,
            "quoted": 10,
            "refund": 0,
            "funding": "Starter",
            "note": null
          },
          "display_transform": {
            "fixed_union_crop": [
              145,
              106,
              448,
              418
            ],
            "display_scale": 0.7371794871794872,
            "filter": "lanczos",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "d86e6c23b9781e9cfd18152b62d229870cb95294d8555ff0758db0cf9c39859a",
            "fa9e6ca24d467cc96e929331cc74ebcbc35b30bab5dc69dbd0fca2866c7dc3c3"
          ],
          "terms_url": "https://spriteflow.io/terms"
        },
        {
          "tool": "animgen",
          "case": "robot-attack-1",
          "attempt": 1,
          "input_sha256": "94952fa2b23241d3b1c8200b6ed1ed8c1a1a4cdff29dba66c2d7675a04b739fc",
          "frame_size": [
            640,
            640
          ],
          "frame_count": 97,
          "durations_ms": [
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42,
            41,
            42,
            42
          ],
          "timing_basis": "Official atlas per-frame duration (milliseconds)",
          "cost": {
            "unit": "credits",
            "charged": 36,
            "quoted": 36,
            "refund": 0,
            "export_charged": 0,
            "funding": "existing account"
          },
          "display_transform": {
            "fixed_union_crop": [
              143,
              73,
              596,
              584
            ],
            "display_scale": 0.4500978473581213,
            "filter": "lanczos",
            "per_frame_alignment": false
          },
          "content_edits": [],
          "source_hashes": [
            "dd15e4a59ad518e59dacd1dcd7a3aba87fa4a77c8ae2ccd907c36cc89fe75fce",
            "728ee0097bf828b93102caa6f322e16bf4cd573f1a0eeb2fabea6f6235053564"
          ],
          "terms_url": "https://animgen.com/terms"
        }
      ]
    }
  ],
  "processed_records": [
    {
      "id": "autosprite/pixel-attack-1",
      "tool": "autosprite",
      "case": "pixel-attack-1",
      "group": "pixel",
      "action": "attack",
      "attempt": 1,
      "usability": "unusable",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24
      ],
      "durations_ms": [
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333
      ],
      "duration_ms": 2083.333333333333,
      "frame_count": 25,
      "frame_size": [
        256,
        256
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          89,
          51,
          239,
          225
        ],
        "display_scale": 1.3218390804597702,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "c6d47511cfa6ba296bc6ebb07af98810ab53a5946aa9c32484058b2cfafcdd4d",
        "8d08987eccef57d7aad5b17a6d1d69741fd28fae7714d36a24de89f1cfaeccd2"
      ],
      "note": "Sword is raised and lowered, without a readable horizontal slash. Trimming cannot supply the missing action.",
      "video": {
        "container_fps": 60,
        "seconds": 8.5,
        "frames": 510,
        "motion_interpolation": false
      },
      "video_sha256": "f71dcc297d8f5db34b8b5a3264fe46b1d987adc20c9fe9b59e23e68321ef01fe",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 1.214,
      "human_edit_minutes": null
    },
    {
      "id": "autosprite/pixel-idle-1",
      "tool": "autosprite",
      "case": "pixel-idle-1",
      "group": "pixel",
      "action": "idle",
      "attempt": 1,
      "usability": "direct",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24
      ],
      "durations_ms": [
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333
      ],
      "duration_ms": 2083.333333333333,
      "frame_count": 25,
      "frame_size": [
        256,
        256
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          84,
          28,
          184,
          227
        ],
        "display_scale": 1.1557788944723617,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "2fff1e96ae44f19cf5c715b52f3c5c84dcda07405735152fadefbbbd97162b72",
        "876d17bc27d54844c4d7cc06398059834aaf6a9e9c678d681e62ed4f5b890bbd"
      ],
      "note": "Recognizable colors, sword and breathing loop. The original wide ready stance becomes a narrower, more upright stance.",
      "video": {
        "container_fps": 60,
        "seconds": 6.25,
        "frames": 375,
        "motion_interpolation": false
      },
      "video_sha256": "2ffe71645a5df8a719b7fece4c2531234ffd2a3446791a9474fac6a5eb66c040",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.737,
      "human_edit_minutes": null
    },
    {
      "id": "autosprite/pixel-run-1",
      "tool": "autosprite",
      "case": "pixel-run-1",
      "group": "pixel",
      "action": "run",
      "attempt": 1,
      "usability": "edited",
      "source_frame_indices": [
        8,
        9,
        10,
        11,
        12,
        13,
        14
      ],
      "durations_ms": [
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333
      ],
      "duration_ms": 583.3333333333333,
      "frame_count": 7,
      "frame_size": [
        256,
        256
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          31,
          29,
          241,
          228
        ],
        "display_scale": 1.1557788944723617,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "a3c46dfe6fa92076675c7632f4725bd87d033d4fb70b39e8072a45880a912272",
        "f111346dba14ac9cb66040e7269f3f7be0f328b152b80560b310e654ca2809c1"
      ],
      "note": "Clear strides and complete sword; view and proportions rock through the longer output. Select one seven-frame cycle at original 12 FPS; some view rocking remains.",
      "video": {
        "container_fps": 60,
        "seconds": 1.75,
        "frames": 105,
        "motion_interpolation": false
      },
      "video_sha256": "e3b7b499ceb26cf67ab6bcd873ae789db6841c80e2580a33e0e0f74454712fdf",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.241,
      "human_edit_minutes": null
    },
    {
      "id": "autosprite/robot-attack-1",
      "tool": "autosprite",
      "case": "robot-attack-1",
      "group": "robot",
      "action": "attack",
      "attempt": 1,
      "usability": "edited",
      "source_frame_indices": [
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12
      ],
      "durations_ms": [
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333
      ],
      "duration_ms": 833.3333333333333,
      "frame_count": 10,
      "frame_size": [
        256,
        256
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          81,
          57,
          212,
          210
        ],
        "display_scale": 1.5032679738562091,
        "filter": "lanczos",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "def18df105ae8ab9683fa8fb4a283c6df52ea78059412d6c3d2ac613470b6a6d",
        "9a86d47cb847c1b00f0f06cc92853b6f28d92b845b5f2e228ada52d7424d0728"
      ],
      "note": "Source contains two punches. Keep the first punch with startup and return to guard, ten frames at 12 FPS.",
      "video": {
        "container_fps": 60,
        "seconds": 4.75,
        "frames": 285,
        "motion_interpolation": false
      },
      "video_sha256": "2af44eee5984f6d2cb153ddc1cca81a924b538276f1a2b8c6cff97ca5376db2b",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.606,
      "human_edit_minutes": null
    },
    {
      "id": "autosprite/robot-idle-2",
      "tool": "autosprite",
      "case": "robot-idle-2",
      "group": "robot",
      "action": "idle",
      "attempt": 2,
      "usability": "direct",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24
      ],
      "durations_ms": [
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333
      ],
      "duration_ms": 2083.333333333333,
      "frame_count": 25,
      "frame_size": [
        256,
        256
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          76,
          37,
          192,
          233
        ],
        "display_scale": 1.1734693877551021,
        "filter": "lanczos",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "2cbf3349cb9a68216eddb43aa24bc1f6ddfa614ae079f1572851781aa8057f7c",
        "c41dd611f1911ae0cdc585e785d72076e66395c5f675156e3c22df2b9d4407f9"
      ],
      "note": "Second attempt has raised fists and a readable fighting idle. More side-on than the input. Both attempts count toward cost; only this one contributes a usable idle.",
      "video": {
        "container_fps": 60,
        "seconds": 6.25,
        "frames": 375,
        "motion_interpolation": false
      },
      "video_sha256": "8e4170d1694b6dbf1bd887daa79264788fa84ab0a702d98bdc6ce5aff13fa0f9",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.762,
      "human_edit_minutes": null
    },
    {
      "id": "autosprite/robot-run-1",
      "tool": "autosprite",
      "case": "robot-run-1",
      "group": "robot",
      "action": "run",
      "attempt": 1,
      "usability": "edited",
      "source_frame_indices": [
        7,
        8,
        9,
        10,
        11,
        12,
        13
      ],
      "durations_ms": [
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333
      ],
      "duration_ms": 583.3333333333333,
      "frame_count": 7,
      "frame_size": [
        256,
        256
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          50,
          48,
          191,
          215
        ],
        "display_scale": 1.377245508982036,
        "filter": "lanczos",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "b306031e811c6e611f7ee61628e4a50fc2d078b85d95de075ac9d68b4a67ae4c",
        "5aac1768ed514f9e4372441887222092193952d75633ce4a518578dcddc5baaf"
      ],
      "note": "Recognizable running with both strides, but torso perspective rocks. Select one seven-frame cycle at original speed; no repositioning or repainting.",
      "video": {
        "container_fps": 60,
        "seconds": 1.75,
        "frames": 105,
        "motion_interpolation": false
      },
      "video_sha256": "601712ce4edd1caf87702e3d02d23422372456410921828a1a0abc9682ff8910",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.244,
      "human_edit_minutes": null
    },
    {
      "id": "ludo/pixel-attack-1",
      "tool": "ludo",
      "case": "pixel-attack-1",
      "group": "pixel",
      "action": "attack",
      "attempt": 1,
      "usability": "unusable",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24,
        25,
        26,
        27,
        28,
        29,
        30,
        31,
        32,
        33,
        34,
        35
      ],
      "durations_ms": [
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0,
        64.0
      ],
      "duration_ms": 2304.0,
      "frame_count": 36,
      "frame_size": [
        96,
        139
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          0,
          0,
          96,
          139
        ],
        "display_scale": 1.6546762589928057,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "20cc2d98ec5281fadaf8632b2f93284559d128c84455c9b99105af2ac9131c22",
        "e3220757e3255d83021f73cf5346e02b3331cc0141f7573eb9dbbc775174c230"
      ],
      "note": "During the attack the blade becomes foreshortened/very thin and reaches outside the canvas; the extended hand is also clipped. A full readable sword attack cannot be recovered by trimming.",
      "video": {
        "container_fps": 60,
        "seconds": 9.166666666666666,
        "frames": 550,
        "motion_interpolation": false
      },
      "video_sha256": "d8fb0d17329a1d0c008ba8b018e9beac38c55b29480b49a58fa6db36ff3a4409",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 1.174,
      "human_edit_minutes": null
    },
    {
      "id": "ludo/pixel-idle-1",
      "tool": "ludo",
      "case": "pixel-idle-1",
      "group": "pixel",
      "action": "idle",
      "attempt": 1,
      "usability": "direct",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24,
        25,
        26,
        27,
        28,
        29,
        30,
        31,
        32,
        33,
        34,
        35
      ],
      "durations_ms": [
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0,
        70.0
      ],
      "duration_ms": 2520.0,
      "frame_count": 36,
      "frame_size": [
        96,
        139
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          0,
          0,
          96,
          139
        ],
        "display_scale": 1.6546762589928057,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "90cd80f819f2c29ec8f7eb4aacb93f415ba5cbd8839972f8ae03b2f80c839c24"
      ],
      "note": "Keeps the ready stance, recognizable outfit and sword, with subtle breathing. Uses the official GIF's own pixels and 70 ms delays.",
      "video": {
        "container_fps": 60,
        "seconds": 7.566666666666666,
        "frames": 454,
        "motion_interpolation": false
      },
      "video_sha256": "aa56e2268c6ced190e1b5e80c90c24d01cbdb0bf2f1897ad08b4ab88a30870d5",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.847,
      "human_edit_minutes": null
    },
    {
      "id": "ludo/pixel-run-1",
      "tool": "ludo",
      "case": "pixel-run-1",
      "group": "pixel",
      "action": "run",
      "attempt": 1,
      "usability": "edited",
      "source_frame_indices": [
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15
      ],
      "durations_ms": [
        63.0,
        63.0,
        63.0,
        63.0,
        63.0,
        63.0,
        63.0,
        63.0
      ],
      "duration_ms": 504.0,
      "frame_count": 8,
      "frame_size": [
        96,
        139
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          2,
          0,
          96,
          139
        ],
        "display_scale": 1.6546762589928057,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "a84c20a3b93076116cf4fa1d8eaf66a3f20e4f2fbe3fba827a5cc3ba20edad23",
        "f26c848d9e686dc870e83ba8eaf68c3cbc9c2c6fa59b9750a07b2ea6b9e538b4"
      ],
      "note": "Raw rear foot is cut at the left edge in extended strides (for example 0, 7 and 16). Frames 8–15 provide a simplified compact cycle; a few sword-tip edge pixels remain tight/cropped. This is a borderline usable edit, not a clean full-stride result.",
      "video": {
        "container_fps": 60,
        "seconds": 1.5166666666666666,
        "frames": 91,
        "motion_interpolation": false
      },
      "video_sha256": "2842637354e99d2f9c7ec2b0c4e28e8287029100c47b2b6f9b5fa24ca1d907bd",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.197,
      "human_edit_minutes": null
    },
    {
      "id": "ludo/robot-attack-1",
      "tool": "ludo",
      "case": "robot-attack-1",
      "group": "robot",
      "action": "attack",
      "attempt": 1,
      "usability": "direct",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24,
        25,
        26,
        27,
        28,
        29,
        30,
        31,
        32,
        33,
        34,
        35
      ],
      "durations_ms": [
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0,
        75.0
      ],
      "duration_ms": 2700.0,
      "frame_count": 36,
      "frame_size": [
        462,
        446
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          19,
          2,
          460,
          445
        ],
        "display_scale": 0.5191873589164786,
        "filter": "lanczos",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "0a4acc185dda743b1ab24b6ebf50f7a175ade13cfd11f0dad424bce7045c903c",
        "f7577f95a128156aca406aed361b506aaf88b4b651ca203e78dc0abd0d318b34"
      ],
      "note": "One clear punch with anticipation, extension and recovery. A longer extension hold gives it a deliberate pace; no edit is required to retain the requested action.",
      "video": {
        "container_fps": 60,
        "seconds": 10.366666666666667,
        "frames": 622,
        "motion_interpolation": false
      },
      "video_sha256": "bd90d6aec5be0ceabb2fccfc900b91d8d93f3bd4d6cdfc96841890874f5873e1",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 1.316,
      "human_edit_minutes": null
    },
    {
      "id": "ludo/robot-idle-1",
      "tool": "ludo",
      "case": "robot-idle-1",
      "group": "robot",
      "action": "idle",
      "attempt": 1,
      "usability": "direct",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24,
        25,
        26,
        27,
        28,
        29,
        30,
        31,
        32,
        33,
        34,
        35
      ],
      "durations_ms": [
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0,
        59.0
      ],
      "duration_ms": 2124.0,
      "frame_count": 36,
      "frame_size": [
        428,
        566
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          25,
          1,
          427,
          556
        ],
        "display_scale": 0.4144144144144144,
        "filter": "lanczos",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "ae21f5ebc427db86237220e957e97d53fe99d280442910968ed03fc210c8eb44",
        "5611f9c9927f413af5ac0f1a9b381a1de94d459dd1dcbe3fd19b3f2ec3e276ee"
      ],
      "note": "Clear fists-up breathing idle with stable feet and a blink; small view shifts remain. Clean transparency in the reviewed backgrounds.",
      "video": {
        "container_fps": 60,
        "seconds": 6.383333333333334,
        "frames": 383,
        "motion_interpolation": false
      },
      "video_sha256": "963227b368bfa4a886741179608c0cbf6c9d520af2ebea7df1a899b4a3faa801",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.865,
      "human_edit_minutes": null
    },
    {
      "id": "ludo/robot-run-1",
      "tool": "ludo",
      "case": "robot-run-1",
      "group": "robot",
      "action": "run",
      "attempt": 1,
      "usability": "edited",
      "source_frame_indices": [
        18,
        19,
        20,
        21,
        22,
        23,
        24,
        25,
        26,
        27,
        28,
        29,
        30,
        31,
        32,
        33
      ],
      "durations_ms": [
        47.2,
        47.2,
        47.2,
        47.2,
        47.2,
        47.2,
        47.2,
        47.2,
        47.2,
        47.2,
        47.2,
        47.2,
        47.2,
        47.2,
        47.2,
        47.2
      ],
      "duration_ms": 755.2,
      "frame_count": 16,
      "frame_size": [
        464,
        572
      ],
      "speed_multiplier": 1.25,
      "display_transform": {
        "fixed_union_crop": [
          3,
          13,
          421,
          570
        ],
        "display_scale": 0.4129263913824057,
        "filter": "lanczos",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "4ed8c983223ea19a91d8cdc63e3d4d7680de6906ae2d4cef36e9815355fe26b3",
        "2bf11489356722e371cfd8d926a158ff20d25d6860e68b6dd08ec753f40669aa"
      ],
      "note": "Original movement reads as a slow jog/march with short strides and some body-size/view drift. Select a complete 16-frame cycle and increase playback speed by 25%; the short stride style remains. Borderline for a game needing a forceful run.",
      "video": {
        "container_fps": 60,
        "seconds": 2.2666666666666666,
        "frames": 136,
        "motion_interpolation": false
      },
      "video_sha256": "d02042e0886cec0a3bfe88ffeb09f2ce8c3ecfcc0c2fce3c6e63ed0638f1ae2b",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.397,
      "human_edit_minutes": null
    },
    {
      "id": "spriteflow/pixel-attack-1",
      "tool": "spriteflow",
      "case": "pixel-attack-1",
      "group": "pixel",
      "action": "attack",
      "attempt": 1,
      "usability": "unusable",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24,
        25,
        26,
        27,
        28,
        29,
        30,
        31
      ],
      "durations_ms": [
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0
      ],
      "duration_ms": 4000.0,
      "frame_count": 32,
      "frame_size": [
        512,
        512
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          0,
          67,
          512,
          447
        ],
        "display_scale": 0.546875,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "3f0a69268831d7d2e3a110e39c836389b7e643eac01c65a64cd63f1713da34a3",
        "b1f53963fe23bda95d73891fdd4e8cae8f6b32eddd7236ea0c6c05891cabe45e"
      ],
      "note": "The swing is recognizable, but its extended sword is clipped at the right edge during the impact/extension poses. Cutting those poses would remove the attack being tested.",
      "video": {
        "container_fps": 60,
        "seconds": 14.25,
        "frames": 855,
        "motion_interpolation": false
      },
      "video_sha256": "02009a2b77ab563806971b6bd4673a259a04e73af85068bad995c4d5cc7f3bf9",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 2.026,
      "human_edit_minutes": null
    },
    {
      "id": "spriteflow/pixel-idle-1",
      "tool": "spriteflow",
      "case": "pixel-idle-1",
      "group": "pixel",
      "action": "idle",
      "attempt": 1,
      "usability": "direct",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24,
        25,
        26,
        27,
        28,
        29,
        30,
        31
      ],
      "durations_ms": [
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0
      ],
      "duration_ms": 4000.0,
      "frame_count": 32,
      "frame_size": [
        512,
        512
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          114,
          64,
          407,
          446
        ],
        "display_scale": 0.6020942408376964,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "123c49c8e28f3ce940d7261747ee60119319fdc0cd3c6249844beddc646779c6",
        "c8e89a4d35cd951e4917cef9644f844d8a6682bc321b89b95af38464e6b93eb9"
      ],
      "note": "Readable ready-stance breathing with stable feet and complete sword. Functionally usable as a 2D animation, not a drop-in grid-faithful pixel asset.",
      "video": {
        "container_fps": 60,
        "seconds": 12.0,
        "frames": 720,
        "motion_interpolation": false
      },
      "video_sha256": "a71b64273df4fd4cdd675bfdfa4aab52817a9aeb5ce5a89f62cde50957cac3a0",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 1.442,
      "human_edit_minutes": null
    },
    {
      "id": "spriteflow/pixel-run-1",
      "tool": "spriteflow",
      "case": "pixel-run-1",
      "group": "pixel",
      "action": "run",
      "attempt": 1,
      "usability": "edited",
      "source_frame_indices": [
        8,
        9,
        10,
        11
      ],
      "durations_ms": [
        125.0,
        125.0,
        125.0,
        125.0
      ],
      "duration_ms": 500.0,
      "frame_count": 4,
      "frame_size": [
        512,
        512
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          104,
          79,
          490,
          441
        ],
        "display_scale": 0.6353591160220995,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "e8eb7111cbc1b468215b4dbd8e2ca38daf2b1dea88e6626f3bae444afa9501cc",
        "0187149dcb7ae71a2778bc1c7737d063d74372cb9e5c3c7d2b63b6c5246f96e9"
      ],
      "note": "Remove standing endpoints and select a four-pose cycle at native 8 FPS. Large green residue appears in early raw frames; selected frames still show mild green/soft edges at the boots. No cleanup was applied.",
      "video": {
        "container_fps": 60,
        "seconds": 1.5,
        "frames": 90,
        "motion_interpolation": false
      },
      "video_sha256": "75aa2ee49ca9b60efc23e9f963b5de053a88155f86eeccb390e2e161c3aa466e",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.255,
      "human_edit_minutes": null
    },
    {
      "id": "spriteflow/robot-attack-1",
      "tool": "spriteflow",
      "case": "robot-attack-1",
      "group": "robot",
      "action": "attack",
      "attempt": 1,
      "usability": "edited",
      "source_frame_indices": [
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13
      ],
      "durations_ms": [
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0
      ],
      "duration_ms": 1250.0,
      "frame_count": 10,
      "frame_size": [
        512,
        512
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          145,
          107,
          443,
          418
        ],
        "display_scale": 0.7395498392282959,
        "filter": "lanczos",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "d86e6c23b9781e9cfd18152b62d229870cb95294d8555ff0758db0cf9c39859a",
        "fa9e6ca24d467cc96e929331cc74ebcbc35b30bab5dc69dbd0fca2866c7dc3c3"
      ],
      "note": "Source performs two punches. Keep the first with its held extension and return; ten frames at native 8 FPS. Sparse transition poses remain visible.",
      "video": {
        "container_fps": 60,
        "seconds": 6.0,
        "frames": 360,
        "motion_interpolation": false
      },
      "video_sha256": "025f96c3d2a2b36ad01f84db3ab3d904d1e5c49c52296dd293b3dd176a4e1c0c",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.815,
      "human_edit_minutes": null
    },
    {
      "id": "spriteflow/robot-idle-1",
      "tool": "spriteflow",
      "case": "robot-idle-1",
      "group": "robot",
      "action": "idle",
      "attempt": 1,
      "usability": "direct",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24,
        25,
        26,
        27,
        28,
        29,
        30,
        31
      ],
      "durations_ms": [
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0
      ],
      "duration_ms": 4000.0,
      "frame_count": 32,
      "frame_size": [
        512,
        512
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          144,
          101,
          368,
          418
        ],
        "display_scale": 0.7255520504731862,
        "filter": "lanczos",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "3be5d66ea00ea2b9e8eb628855e004f88912bc68f3531af16e892e9cd55d1fdb",
        "3b9c5895c6138c529940ece51a2cc65f5069dce7a1153aa74d8e1ebc095291b4"
      ],
      "note": "Recognizable fighting guard, stable feet and small breathing/hand motion. The subtle action works as an idle.",
      "video": {
        "container_fps": 60,
        "seconds": 12.0,
        "frames": 720,
        "motion_interpolation": false
      },
      "video_sha256": "15e112977f456464fb12948fe6a37df47d477ab5a1ce19a5453c18e1f972d7f7",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 1.478,
      "human_edit_minutes": null
    },
    {
      "id": "spriteflow/robot-run-1",
      "tool": "spriteflow",
      "case": "robot-run-1",
      "group": "robot",
      "action": "run",
      "attempt": 1,
      "usability": "edited",
      "source_frame_indices": [
        20,
        21,
        22,
        23,
        24,
        25
      ],
      "durations_ms": [
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0
      ],
      "duration_ms": 750.0,
      "frame_count": 6,
      "frame_size": [
        512,
        512
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          111,
          94,
          381,
          422
        ],
        "display_scale": 0.7012195121951219,
        "filter": "lanczos",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "c7e1053497d1d37bb9b8e7d4f5dc9f7d541859d053dd2d2d51a98303f4929b78",
        "a317973a9d2a068e5d3e270aff6889b9eba91d41d27b6a25a12187bb432551a1"
      ],
      "note": "Source starts and finishes standing. Select six running poses at native 8 FPS. Facial-expression changes and some green tint on boots/joints remain.",
      "video": {
        "container_fps": 60,
        "seconds": 2.25,
        "frames": 135,
        "motion_interpolation": false
      },
      "video_sha256": "8886019a0b61d0c764fff420276b7d17964ad9b3ceef418857573c1d0ca15a5c",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.352,
      "human_edit_minutes": null
    },
    {
      "id": "pixellab/pixel-attack-1",
      "tool": "pixellab",
      "case": "pixel-attack-1",
      "group": "pixel",
      "action": "attack",
      "attempt": 1,
      "usability": "unusable",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17
      ],
      "durations_ms": [
        166.66666666666666,
        166.66666666666666,
        166.66666666666666,
        166.66666666666666,
        166.66666666666666,
        166.66666666666666,
        166.66666666666666,
        166.66666666666666,
        166.66666666666666,
        166.66666666666666,
        166.66666666666666,
        166.66666666666666,
        166.66666666666666,
        166.66666666666666,
        166.66666666666666,
        166.66666666666666,
        166.66666666666666,
        166.66666666666666
      ],
      "duration_ms": 3000.0,
      "frame_count": 18,
      "frame_size": [
        96,
        139
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          0,
          0,
          96,
          139
        ],
        "display_scale": 1.6546762589928057,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "d27c4a4fa53db1bbc0cc726d9124984dde4dde1933dd715bfe153faa01c22416",
        "646a9cdd86c8c8cc1cbd99e1cf01b35af6c268fde43c27009a927ab927d06c9a"
      ],
      "note": "In the generated portion the sword becomes thin/broken while the arm changes pose. A clear complete horizontal slash would require redrawing weapon frames or another generation.",
      "video": {
        "container_fps": 60,
        "seconds": 11.25,
        "frames": 675,
        "motion_interpolation": false
      },
      "video_sha256": "cb9d4b8a521bfa63c63f09c141eac464ebac0c44bf8d62f4e6dfc0ff67908373",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 1.476,
      "human_edit_minutes": null
    },
    {
      "id": "pixellab/pixel-idle-1",
      "tool": "pixellab",
      "case": "pixel-idle-1",
      "group": "pixel",
      "action": "idle",
      "attempt": 1,
      "usability": "edited",
      "source_frame_indices": [
        2,
        3,
        4,
        5
      ],
      "durations_ms": [
        166.66666666666666,
        166.66666666666666,
        166.66666666666666,
        166.66666666666666
      ],
      "duration_ms": 666.6666666666666,
      "frame_count": 4,
      "frame_size": [
        96,
        139
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          1,
          0,
          95,
          139
        ],
        "display_scale": 1.6546762589928057,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "47780b08a8ec89bd547bacda7f76a22ad2ecad31fbd7b0f3334a33f15e7dc265",
        "f4fb93650237cb7cf8f4f45e263efd42fcf07e7cf92762b3a1b282ff2753b19f"
      ],
      "note": "Remove the two exported input-reference frames. Four generated poses form a small breathing/hair-motion loop at native 6 FPS; a few stray hair/blade pixels remain.",
      "video": {
        "container_fps": 60,
        "seconds": 2.0,
        "frames": 120,
        "motion_interpolation": false
      },
      "video_sha256": "890cdca8d5c973f83d3cd1e47abec434b46e3d9177a79fbcba69afc0e580def7",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.243,
      "human_edit_minutes": null
    },
    {
      "id": "pixellab/pixel-run-1",
      "tool": "pixellab",
      "case": "pixel-run-1",
      "group": "pixel",
      "action": "run",
      "attempt": 1,
      "usability": "edited",
      "source_frame_indices": [
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9
      ],
      "durations_ms": [
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333,
        83.33333333333333
      ],
      "duration_ms": 666.6666666666666,
      "frame_count": 8,
      "frame_size": [
        96,
        139
      ],
      "speed_multiplier": 2,
      "display_transform": {
        "fixed_union_crop": [
          0,
          0,
          96,
          138
        ],
        "display_scale": 1.6666666666666667,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "ef3973492560fb8d9512e0f1cb14c5a4f9e1b20fc5d8910269426f0f73dcaff9",
        "71d496ea65dd1177b3adbec1df2e6b032f96975fc50d5679f7fa2bc14c1e8746"
      ],
      "note": "Remove the two reference frames and play the eight generated poses at 12 FPS instead of the editor's 6 FPS. This gives a stylized short-stride jog, not an athletic airborne run; slight foot-edge clipping and sword-tip variation remain. Borderline usability.",
      "video": {
        "container_fps": 60,
        "seconds": 2.0,
        "frames": 120,
        "motion_interpolation": false
      },
      "video_sha256": "3402a2a6e0e67e265ae191a2a681684346312b785415d719278eefd69f1fedce",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.251,
      "human_edit_minutes": null
    },
    {
      "id": "sprite-ai/pixel-attack-1",
      "tool": "sprite-ai",
      "case": "pixel-attack-1",
      "group": "pixel",
      "action": "attack",
      "attempt": 1,
      "usability": "unusable",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7
      ],
      "durations_ms": [
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0
      ],
      "duration_ms": 1000.0,
      "frame_count": 8,
      "frame_size": [
        139,
        139
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          20,
          1,
          134,
          138
        ],
        "display_scale": 1.6788321167883211,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "8888faddcf2c0a9c902f090f19c797e3623d60092fc40d0d608ccd973cc8d20a",
        "a4ad108b3a2781d6bee8312c6511ff4c0a8f2e5494a42b80ad50fd2834ac5d7b"
      ],
      "note": "Attack poses are present, but the blade becomes a fragmented line in key frames 2–5, obscuring the requested slash. Retiming cannot restore the missing sword.",
      "video": {
        "container_fps": 60,
        "seconds": 5.25,
        "frames": 315,
        "motion_interpolation": false
      },
      "video_sha256": "aa1747e3e4063a926e8fd72f40ffcc4837c429bbe2923230f00b34a2e5e0773e",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.679,
      "human_edit_minutes": null
    },
    {
      "id": "sprite-ai/pixel-idle-1",
      "tool": "sprite-ai",
      "case": "pixel-idle-1",
      "group": "pixel",
      "action": "idle",
      "attempt": 1,
      "usability": "unusable",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7
      ],
      "durations_ms": [
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0
      ],
      "duration_ms": 1000.0,
      "frame_count": 8,
      "frame_size": [
        139,
        139
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          22,
          1,
          107,
          138
        ],
        "display_scale": 1.6788321167883211,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "4587f20b7755fae1a6bcae01295c62e4a3467b66101152f15f04e4d2da7bf1f6",
        "a4ad108b3a2781d6bee8312c6511ff4c0a8f2e5494a42b80ad50fd2834ac5d7b"
      ],
      "note": "Body and breathing remain recognizable, but the front portion of the sword breaks into sparse pixels throughout. The loss is also visible on dark backgrounds; it is not only white-on-white display.",
      "video": {
        "container_fps": 60,
        "seconds": 3.0,
        "frames": 180,
        "motion_interpolation": false
      },
      "video_sha256": "b10f6a98fee3d5df1784cca6a95bdbfca9def5b9f97ee1e2d02e7dc1c2a046fe",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.399,
      "human_edit_minutes": null
    },
    {
      "id": "sprite-ai/pixel-run-1",
      "tool": "sprite-ai",
      "case": "pixel-run-1",
      "group": "pixel",
      "action": "run",
      "attempt": 1,
      "usability": "unusable",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7
      ],
      "durations_ms": [
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0,
        125.0
      ],
      "duration_ms": 1000.0,
      "frame_count": 8,
      "frame_size": [
        139,
        139
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          10,
          1,
          110,
          138
        ],
        "display_scale": 1.6788321167883211,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "bc9aa17535b09607655ff60df267e7b6f4a15b9c4ca30c1c5107a447eb45b957",
        "a4ad108b3a2781d6bee8312c6511ff4c0a8f2e5494a42b80ad50fd2834ac5d7b"
      ],
      "note": "Compact readable running poses and easy eight-frame JSON timing, but the sword remains shortened/broken through the cycle. Repair would require drawing the weapon across frames.",
      "video": {
        "container_fps": 60,
        "seconds": 3.0,
        "frames": 180,
        "motion_interpolation": false
      },
      "video_sha256": "37ca32bda05143e6a3d71c15a47dafe225310d043839da0b18161860ee94a5ad",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.407,
      "human_edit_minutes": null
    },
    {
      "id": "animgen/pixel-attack-1",
      "tool": "animgen",
      "case": "pixel-attack-1",
      "group": "pixel",
      "action": "attack",
      "attempt": 1,
      "usability": "unusable",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24,
        25,
        26,
        27,
        28,
        29,
        30,
        31,
        32,
        33,
        34,
        35,
        36,
        37,
        38,
        39,
        40,
        41,
        42,
        43,
        44,
        45,
        46,
        47,
        48,
        49,
        50,
        51,
        52,
        53,
        54,
        55,
        56,
        57,
        58,
        59,
        60,
        61,
        62,
        63,
        64,
        65,
        66,
        67,
        68,
        69,
        70,
        71,
        72,
        73,
        74,
        75,
        76,
        77,
        78,
        79,
        80,
        81,
        82,
        83,
        84,
        85,
        86,
        87,
        88,
        89,
        90,
        91,
        92,
        93,
        94,
        95,
        96
      ],
      "durations_ms": [
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0
      ],
      "duration_ms": 4042.0,
      "frame_count": 97,
      "frame_size": [
        560,
        752
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          0,
          0,
          560,
          752
        ],
        "display_scale": 0.3058510638297872,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "20bed7a2e3663353e4901fcc971987497ce68652b4d970acbedd2f11df36de4d",
        "95f7f3ddcccac50f5fa33c691c403d7ce2dfa437dc5233388c79694c3da3711e"
      ],
      "note": "The attack sends the sword and forward hand outside the right edge, holds the clipped pose, then changes back to ready. A complete visible slash cannot be recovered by removing idle time.",
      "video": {
        "container_fps": 60,
        "seconds": 14.383333333333333,
        "frames": 863,
        "motion_interpolation": false
      },
      "video_sha256": "05c8931fd78bbdbcdcf2399b0778561b958199f5b5c7c0234074d02ddd5b8082",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 2.432,
      "human_edit_minutes": null
    },
    {
      "id": "animgen/pixel-idle-1",
      "tool": "animgen",
      "case": "pixel-idle-1",
      "group": "pixel",
      "action": "idle",
      "attempt": 1,
      "usability": "unusable",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24,
        25,
        26,
        27,
        28,
        29,
        30,
        31,
        32,
        33,
        34,
        35,
        36,
        37,
        38,
        39,
        40,
        41,
        42,
        43,
        44,
        45,
        46,
        47,
        48,
        49,
        50,
        51,
        52,
        53,
        54,
        55,
        56,
        57,
        58,
        59,
        60,
        61,
        62,
        63,
        64,
        65,
        66,
        67,
        68,
        69,
        70,
        71,
        72,
        73,
        74,
        75,
        76,
        77,
        78,
        79,
        80,
        81,
        82,
        83,
        84,
        85,
        86,
        87,
        88,
        89,
        90,
        91,
        92,
        93,
        94,
        95,
        96
      ],
      "durations_ms": [
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0
      ],
      "duration_ms": 4042.0,
      "frame_count": 97,
      "frame_size": [
        560,
        752
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          0,
          0,
          560,
          752
        ],
        "display_scale": 0.3058510638297872,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "3a035bf3eb055ae9f1ee172297594aa1127d35bcae5c41826fa5dd1629eac275",
        "95f7f3ddcccac50f5fa33c691c403d7ce2dfa437dc5233388c79694c3da3711e"
      ],
      "note": "From frame 1, the white blouse changes to orange and the sleeves/gloves change. Removing the first frame would hide the jump but would not restore the input costume, so this is not accepted as the same-character idle.",
      "video": {
        "container_fps": 60,
        "seconds": 12.133333333333333,
        "frames": 728,
        "motion_interpolation": false
      },
      "video_sha256": "64c0227739c36cea4c2253df4a95d634e1e92305b8e594484603d5a9c4d69f17",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 2.026,
      "human_edit_minutes": null
    },
    {
      "id": "animgen/pixel-run-1",
      "tool": "animgen",
      "case": "pixel-run-1",
      "group": "pixel",
      "action": "run",
      "attempt": 1,
      "usability": "unusable",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24,
        25,
        26,
        27,
        28,
        29,
        30,
        31,
        32,
        33,
        34,
        35,
        36,
        37,
        38,
        39,
        40,
        41,
        42,
        43,
        44,
        45,
        46,
        47,
        48,
        49,
        50,
        51,
        52,
        53,
        54,
        55,
        56,
        57,
        58,
        59,
        60,
        61,
        62,
        63,
        64,
        65,
        66,
        67,
        68,
        69,
        70,
        71,
        72,
        73,
        74,
        75,
        76,
        77,
        78,
        79,
        80,
        81,
        82,
        83,
        84,
        85,
        86,
        87,
        88,
        89,
        90,
        91,
        92,
        93,
        94,
        95,
        96
      ],
      "durations_ms": [
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0
      ],
      "duration_ms": 4042.0,
      "frame_count": 97,
      "frame_size": [
        560,
        752
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          0,
          0,
          560,
          752
        ],
        "display_scale": 0.3058510638297872,
        "filter": "nearest",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "9f0fb917e705dda748b46d3b927311a49eb0c8e654df7e686ebde00f0cd500f4",
        "95f7f3ddcccac50f5fa33c691c403d7ce2dfa437dc5233388c79694c3da3711e"
      ],
      "note": "Running is recognizable, but the extended rear foot and sword are repeatedly clipped by the canvas. No complete clear cycle without those losses was identified in this pass.",
      "video": {
        "container_fps": 60,
        "seconds": 12.133333333333333,
        "frames": 728,
        "motion_interpolation": false
      },
      "video_sha256": "4dd36177ccae20f1b1e16f18da61d69845ec3515f53d07f346dd6f66f0eda376",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 2.053,
      "human_edit_minutes": null
    },
    {
      "id": "animgen/robot-attack-1",
      "tool": "animgen",
      "case": "robot-attack-1",
      "group": "robot",
      "action": "attack",
      "attempt": 1,
      "usability": "edited",
      "source_frame_indices": [
        24,
        25,
        26,
        27,
        28,
        29,
        30,
        31,
        32,
        33,
        63,
        64,
        65,
        66,
        67,
        68,
        69,
        70,
        71,
        72,
        73,
        74,
        75,
        76,
        77
      ],
      "durations_ms": [
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0
      ],
      "duration_ms": 1042.0,
      "frame_count": 25,
      "frame_size": [
        640,
        640
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          143,
          73,
          596,
          584
        ],
        "display_scale": 0.4500978473581213,
        "filter": "lanczos",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "dd15e4a59ad518e59dacd1dcd7a3aba87fa4a77c8ae2ccd907c36cc89fe75fce",
        "728ee0097bf828b93102caa6f322e16bf4cd573f1a0eeb2fabea6f6235053564"
      ],
      "note": "One clear punch, but long startup/ending idle and a prolonged extension hold. Keep 24–33 then 63–77, removing only the middle held pose and surrounding idle; original retained-frame durations and recovery are preserved.",
      "video": {
        "container_fps": 60,
        "seconds": 5.383333333333334,
        "frames": 323,
        "motion_interpolation": false
      },
      "video_sha256": "1be48041923c702097ffa5f188c307d2bc37045b33dbddfd47b275d71bb1bd99",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.995,
      "human_edit_minutes": null
    },
    {
      "id": "animgen/robot-idle-1",
      "tool": "animgen",
      "case": "robot-idle-1",
      "group": "robot",
      "action": "idle",
      "attempt": 1,
      "usability": "direct",
      "source_frame_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24,
        25,
        26,
        27,
        28,
        29,
        30,
        31,
        32,
        33,
        34,
        35,
        36,
        37,
        38,
        39,
        40,
        41,
        42,
        43,
        44,
        45,
        46,
        47,
        48,
        49,
        50,
        51,
        52,
        53,
        54,
        55,
        56,
        57,
        58,
        59,
        60,
        61,
        62,
        63,
        64,
        65,
        66,
        67,
        68,
        69,
        70,
        71,
        72,
        73,
        74,
        75,
        76,
        77,
        78,
        79,
        80,
        81,
        82,
        83,
        84,
        85,
        86,
        87,
        88,
        89,
        90,
        91,
        92,
        93,
        94,
        95,
        96
      ],
      "durations_ms": [
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0
      ],
      "duration_ms": 4042.0,
      "frame_count": 97,
      "frame_size": [
        640,
        640
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          144,
          67,
          499,
          583
        ],
        "display_scale": 0.44573643410852715,
        "filter": "lanczos",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "0aadff923e1a6d94145215c4fe446222900389433cc93e9a0d12fdbd8da61fe6",
        "728ee0097bf828b93102caa6f322e16bf4cd573f1a0eeb2fabea6f6235053564"
      ],
      "note": "Preserves the input costume and proportions with subtle breathing in a raised-fist guard. Feet remain in place and the alpha edge is clean in the reviewed backgrounds.",
      "video": {
        "container_fps": 60,
        "seconds": 12.133333333333333,
        "frames": 728,
        "motion_interpolation": false
      },
      "video_sha256": "b3b2b98b322089e6f4a2cab1cd138401c645529392f88e4fc274f1a81a111bd1",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 1.852,
      "human_edit_minutes": null
    },
    {
      "id": "animgen/robot-run-1",
      "tool": "animgen",
      "case": "robot-run-1",
      "group": "robot",
      "action": "run",
      "attempt": 1,
      "usability": "edited",
      "source_frame_indices": [
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24,
        25,
        26,
        27,
        28,
        29,
        30
      ],
      "durations_ms": [
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0,
        41.0,
        42.0,
        42.0
      ],
      "duration_ms": 625.0,
      "frame_count": 15,
      "frame_size": [
        640,
        640
      ],
      "speed_multiplier": 1,
      "display_transform": {
        "fixed_union_crop": [
          89,
          53,
          513,
          587
        ],
        "display_scale": 0.4307116104868914,
        "filter": "lanczos",
        "per_frame_alignment": false
      },
      "source_hashes": [
        "e889a1b0c952b3b56c188d8c5f59eb6e99960a41b7ac29ee65dcaaa9a262fa2e",
        "728ee0097bf828b93102caa6f322e16bf4cd573f1a0eeb2fabea6f6235053564"
      ],
      "note": "Clear alternating strides. Trim the standing start and select a 15-frame cycle at the original 41/42 ms durations. Raw later frames include a faint green/ghosted foot artifact (for example 51); selected pixels are otherwise unchanged.",
      "video": {
        "container_fps": 60,
        "seconds": 1.8833333333333333,
        "frames": 113,
        "motion_interpolation": false
      },
      "video_sha256": "3ac414ad831a3b61d8279f7b6a0e7dc8b6a6f6e659eccbd71de3d0489049d5d0",
      "rgba_pixel_changes": false,
      "automated_build_seconds": 0.631,
      "human_edit_minutes": null
    }
  ],
  "processed_panels": [
    {
      "file": "pixel-idle-reviewed-compare.mp4",
      "sha256": "598942dd86f55aa0cd1cb641ba9ab5ce3f3646da85c7d022be9fdf0eff2b7419",
      "bytes": 2327713,
      "poster": "pixel-idle-reviewed-compare.jpg",
      "poster_sha256": "86196836d3c859831a9f230ba3d8d3e80002166c40e4f9dfc8012b6264da4bc1",
      "seconds": 12,
      "container_fps": 60,
      "records": [
        "autosprite/pixel-idle-1",
        "ludo/pixel-idle-1",
        "spriteflow/pixel-idle-1",
        "pixellab/pixel-idle-1",
        "sprite-ai/pixel-idle-1",
        "animgen/pixel-idle-1"
      ],
      "rule": "DIRECT, EDITED, or RAW - NOT ACCEPTED labels; never substituted into original comparison."
    },
    {
      "file": "pixel-run-reviewed-compare.mp4",
      "sha256": "354243425dd20adcd8229055f1ec8cb689c266314e9c738f26690957fb43d9e2",
      "bytes": 3910458,
      "poster": "pixel-run-reviewed-compare.jpg",
      "poster_sha256": "591d16c445c75c75ea14fef360c19a7c36347a0243b0b23087c97c5833d8785b",
      "seconds": 12,
      "container_fps": 60,
      "records": [
        "autosprite/pixel-run-1",
        "ludo/pixel-run-1",
        "spriteflow/pixel-run-1",
        "pixellab/pixel-run-1",
        "sprite-ai/pixel-run-1",
        "animgen/pixel-run-1"
      ],
      "rule": "DIRECT, EDITED, or RAW - NOT ACCEPTED labels; never substituted into original comparison."
    },
    {
      "file": "robot-idle-reviewed-compare.mp4",
      "sha256": "ce1188dff8a3100820e49c0bf056454f8cbaf759b3df6104d1fc53bb0f59f4d8",
      "bytes": 1879348,
      "poster": "robot-idle-reviewed-compare.jpg",
      "poster_sha256": "0a77f730f856a9345d902ec3642a0440d9602a12644ff863b1ee85a60b33c0b9",
      "seconds": 12,
      "container_fps": 60,
      "records": [
        "autosprite/robot-idle-2",
        "ludo/robot-idle-1",
        "spriteflow/robot-idle-1",
        "animgen/robot-idle-1"
      ],
      "rule": "DIRECT, EDITED, or RAW - NOT ACCEPTED labels; never substituted into original comparison."
    },
    {
      "file": "robot-run-reviewed-compare.mp4",
      "sha256": "3135dd90e80378f522e739f496866fbb0b689f466bacc04e9c9317448e9de30b",
      "bytes": 3203916,
      "poster": "robot-run-reviewed-compare.jpg",
      "poster_sha256": "5674ad7d0bd20244bdb2e37a9ed2f37ce6052c48e3185f8e54afbd8766e8cf52",
      "seconds": 12,
      "container_fps": 60,
      "records": [
        "autosprite/robot-run-1",
        "ludo/robot-run-1",
        "spriteflow/robot-run-1",
        "animgen/robot-run-1"
      ],
      "rule": "DIRECT, EDITED, or RAW - NOT ACCEPTED labels; never substituted into original comparison."
    },
    {
      "file": "robot-attack-reviewed-compare.mp4",
      "sha256": "4e7b0de940bb36cc1e53de4f6723601f4e171b3afe1e80f5ce416c709b17541a",
      "bytes": 1538406,
      "poster": "robot-attack-reviewed-compare.jpg",
      "poster_sha256": "64301fa6b40e8722b1a9f7557b47e8b6e3d757bc02efda80414effe960eaa753",
      "seconds": 12,
      "container_fps": 60,
      "records": [
        "autosprite/robot-attack-1",
        "ludo/robot-attack-1",
        "spriteflow/robot-attack-1",
        "animgen/robot-attack-1"
      ],
      "rule": "DIRECT, EDITED, or RAW - NOT ACCEPTED labels; never substituted into original comparison."
    }
  ],
  "selected_engine_check": {
    "engine": "4.7.2-stable (official)",
    "animations": 20,
    "rgba_frames_matched": 439,
    "passed": true,
    "scope": "Same local Godot scene and atlas adapter; not native vendor plugins or all-platform certification."
  },
  "limitations": [
    "Reviewer judgments are provisional until user review; three borderline cases have separate sensitivity counts.",
    "Human active-edit time was not recorded; automated per-output build time is separate and is not labor cost.",
    "USD estimates allocate full monthly allowance at recorded prices; not per-export cash charges. Free credits remain included in gross unit use.",
    "AnimGen account billing basis not verified; no claimed actual USD per usable animation.",
    "Raw pixel input is tightly framed. Rejected clipping cases do not establish that an expanded-input retest would fail."
  ],
  "expand_canvas_supplement": {
    "file": "expand-canvas-evidence.json",
    "sha256": "bbff7e66b2d48c0383b6798c21411b77247d9113b92aa9ed455c0cc403e7e81f",
    "additional_attempts": 2,
    "combined_attempts": 33,
    "baseline_unchanged": true,
    "status": "supplement-ready-for-user-review"
  },
  "approved_attack_supplement": {
    "file": "approved-attack-evidence.json",
    "sha256": "ae3b4749cc2674e882e11acbb28ace796ecbbd96591b09769a274c40cce03407",
    "adopted_attempt": 5,
    "baseline_unchanged": true,
    "status": "approved-selected-and-engine-verified",
    "additional_generation_this_step": 0,
    "all_attempts_including_extra": 36
  },
  "latest_pixel_retest": {
    "date": "2026-10-20",
    "file": "safe-fit-retest-evidence.json",
    "sha256": "95abd5c2eb7457aca86a7ee9fe5b05134399eb7c41af3b5ecd8175047ad7b08a",
    "note": "Historical fields above remain unchanged. Current article uses this labeled retest for AnimGen pixel cells."
  }
}
