{
 "schema": "s2s-bench-v1",
 "kind": "data-kit-index",
 "exhibit": "a-rig-your-friend-already-owns",
 "exhibit_title": "A rig your friend already owns",
 "exhibit_url": "https://research.strata2signal.com/a-rig-your-friend-already-owns/index.html",
 "licence": "CC BY 4.0",
 "attribution": "strata\u2192signal research, research.strata2signal.com",
 "contact": "hello@strata2signal.com",
 "runs": [
  {
   "run_id": "rematch-3090-0826",
   "rig": "the consumer desktop",
   "card": "RTX 3090 24G, single GPU (consumer desktop)",
   "opened_utc": "2026-08-26T05:07:06Z",
   "closed_utc": "2026-08-26T05:42:41Z",
   "rows": 171,
   "timed_renders": 165,
   "warmups": 6,
   "failures": 0
  },
  {
   "run_id": "rematch-rigB-0826",
   "rig": "the gaming laptop",
   "card": "RTX 5090 Laptop GPU 24G (gaming laptop)",
   "opened_utc": "2026-08-26T06:24:59Z",
   "closed_utc": "2026-08-26T06:56:58Z",
   "rows": 171,
   "timed_renders": 165,
   "warmups": 6,
   "failures": 0
  }
 ],
 "totals": {
  "renders": 342,
  "timed": 330,
  "warmups": 12,
  "failures": 0,
  "note": "171 rows per rig \u00d7 2 rigs; 165 timed + 6 untimed warm-ups each."
 },
 "graphs_shipped": "6 of 6",
 "images_published": false,
 "images_note": "NOT PUBLISHED in this kit \u2014 342 renders is a heavy download for a page about how long they took, and the manifests and logs are the receipts. Each row's `file` field still names the image the run wrote, because that is what the run recorded; the field is a name, not a link.",
 "not_a_standard": "Two consumer rigs re-rendering one game's own artwork, paired cell for cell against one archived workstation-card run \u2014 not a leaderboard and not a hardware review. Every median prints over its stated denominator, and every row carries the baseline it is divided by.",
 "counting_rules": {
  "baseline": "Not a run in this kit. Each row carries its own baseline_seconds \u2014 the 96G-class workstation card's recorded seconds for the identical cell, archived 2026-08-23. The desktop's baseline was measured in the same physical computer three days earlier, with only the graphics card changed between the dates; the laptop is a different machine.",
  "what_a_second_is": "The engine's own execution window \u2014 denoising, image decode and file save. NOT model load (the per-arm warm-ups absorb it and are excluded by seed 777333 and axis \"warmup\") and not network transport.",
  "rounding": "Medians rounded half-up to two decimals; multipliers are the ratio of the two PRINTED medians, rounded half-up the same way, so the table reconciles by hand. One tie: the laptop's kandinsky5-lite median falls at 24.455 and prints 24.46.",
  "ratio_of_medians": "Multipliers are ratio-of-medians. Median-of-paired-ratios agrees everywhere within 0.20\u00d7; the largest gap is krea2-turbo on the desktop (4.88\u00d7 against 4.68\u00d7). Both are computable from the rows here.",
  "denominators": "`axis` is the denominator. A per-model headline median is over ALL that model's timed renders, mixed axes; a resolution-ladder figure is res-ladder cells only (n=6). FLUX.2 klein-4B at 768 reads 1.37 s as a ladder cell and 1.39 s as its all-axes headline; both are correct.",
  "kept_cells": "A post-hoc reporting rule, disclosed as exactly that and not a pre-registration: keep every cell, report per-model medians, never a hand-picked render. Six archived baseline cells carry cold-load pollution and were KEPT; dropping all six would move every model's baseline median by at most 0.005 s and no multiplier by 0.01.",
  "thin_arm": "z-image-base has no resolution ladder \u2014 all 12 of its timed renders are 768\u00d7768."
 },
 "id_prefix_wart": "Every render id in BOTH manifests begins `r3090__`, and the laptop log's lines read `rematch-rigB-0826/r3090__\u2026`. That prefix is the harness's tag, not a rig label. The authority is each row's `card` field, which disagrees with the prefix on purpose; the filename is the second authority.",
 "sanitisation": "Sanitised at the pen, never copied raw. One rule, server-card-model-to-vram-class, named per file in provenance.json; both manifests were proved to round-trip byte-for-byte before it was applied.",
 "files": [
  {
   "file": "rematch-3090-0826-manifest.json",
   "role": "The consumer desktop's run (RTX 3090 24G, single GPU): 171 rows, one per render \u2014 the verbatim prompt, the seed, steps, sampler, scheduler, cfg, the bare checkpoint filename, width and height, the engine's own render_seconds, the paired baseline_seconds for the identical cell on the 96G-class card, the baseline_id it pairs to, the model's licence citation, the UTC instant, the arm, the axis, and the rig in its own `card` field.",
   "media_type": "application/json",
   "bytes": 363653,
   "sha256": "aa95171f9a14764d6a83f79f3611677b1f9e483f7f83fdf2425437f1d48316ca",
   "stripped": [
    "server-card-model-to-vram-class"
   ]
  },
  {
   "file": "rematch-rigB-0826-manifest.json",
   "role": "The gaming laptop's run (RTX 5090 Laptop GPU 24G): the same 171 cells in the same order, the same schema, its own `card` field, and the same 96G-class baselines in baseline_seconds \u2014 so the two rigs are comparable row for row.",
   "media_type": "application/json",
   "bytes": 362970,
   "sha256": "dfb67b0e7a7bd45d764f3a062549b2768c20ef32976c3f09d7147e3746dfbb2d",
   "stripped": [
    "server-card-model-to-vram-class"
   ]
  },
  {
   "file": "rematch-3090-0826.log",
   "role": "The desktop run's driver log as it printed, live: the seeded subject sample, the worklist, every warm-up announced, and every one of the 165 timed renders numbered [n/165] with its seconds and its ratio, closing on REMATCH COMPLETE. The artefact behind \u201czero failures\u201d \u2014 a failure prints `!!` or `XX`, and neither string appears.",
   "media_type": "text/plain",
   "bytes": 28370,
   "sha256": "ef1013cd94d6bf3a65a7077d77d3ba92f3798c460dcdf5e19c00dd006581c2fc",
   "stripped": [
    "server-card-model-to-vram-class"
   ]
  },
  {
   "file": "rematch-rigB-0826.log",
   "role": "The laptop run's driver log, same shape, same 165 numbered lines, same closing REMATCH COMPLETE.",
   "media_type": "text/plain",
   "bytes": 28352,
   "sha256": "86fad12c9038448de4077f553cd0e1a5c6e0406e61f588d0e300299a4f2f984a",
   "stripped": [
    "server-card-model-to-vram-class"
   ]
  },
  {
   "file": "graph-flux2-klein-4b.json",
   "role": "The ComfyUI API-format workflow graph for FLUX.2 klein-4B, as this bench submitted it: the harness's own template with its `_`-prefixed note keys dropped and its {prompt} / {width} / {height} / {seed} tokens substituted by the same code path the run used, at the settings of the standard 768\u00d7768 subject cell. Its prompt and seed are a fixture \u2014 the real values of the published row named in _fixture.fixture_row_id \u2014 which any other row's prompt and seed substitute into.",
   "media_type": "application/json",
   "bytes": 3531,
   "sha256": "a3509ba5d34f4d57a3ae117c9eae089e14fc4ea4c57b2cc2861d454ba8256a0a",
   "stripped": []
  },
  {
   "file": "graph-ctrl-z-image-turbo.json",
   "role": "The ComfyUI API-format workflow graph for z-image-turbo, as this bench submitted it: the harness's own template with its `_`-prefixed note keys dropped and its {prompt} / {width} / {height} / {seed} tokens substituted by the same code path the run used, at the settings of the standard 768\u00d7768 subject cell. Its prompt and seed are a fixture \u2014 the real values of the published row named in _fixture.fixture_row_id \u2014 which any other row's prompt and seed substitute into.",
   "media_type": "application/json",
   "bytes": 3237,
   "sha256": "a5173248654f0489e6e67b6fdf3ed2e0b48b37bdcbb97a2c4b810bfaa47602c0",
   "stripped": []
  },
  {
   "file": "graph-krea2-turbo.json",
   "role": "The ComfyUI API-format workflow graph for krea2-turbo, as this bench submitted it: the harness's own template with its `_`-prefixed note keys dropped and its {prompt} / {width} / {height} / {seed} tokens substituted by the same code path the run used, at the settings of the standard 768\u00d7768 subject cell. Its prompt and seed are a fixture \u2014 the real values of the published row named in _fixture.fixture_row_id \u2014 which any other row's prompt and seed substitute into.",
   "media_type": "application/json",
   "bytes": 3099,
   "sha256": "98502b344f87b804ee40265cbec6600a55357bbaa0b6f4cf37341190a51d3fdc",
   "stripped": []
  },
  {
   "file": "graph-hidream-o1-dev.json",
   "role": "The ComfyUI API-format workflow graph for hidream-o1-dev, as this bench submitted it: the harness's own template with its `_`-prefixed note keys dropped and its {prompt} / {width} / {height} / {seed} tokens substituted by the same code path the run used, at the settings of the standard 768\u00d7768 subject cell. Its prompt and seed are a fixture \u2014 the real values of the published row named in _fixture.fixture_row_id \u2014 which any other row's prompt and seed substitute into.",
   "media_type": "application/json",
   "bytes": 3391,
   "sha256": "f7a7c2e85464a4bd3fae991bd5656a55a9fa8bb084f67d99c4416c6bbe1c90c9",
   "stripped": []
  },
  {
   "file": "graph-kandinsky5-lite.json",
   "role": "The ComfyUI API-format workflow graph for kandinsky5-lite, as this bench submitted it: the harness's own template with its `_`-prefixed note keys dropped and its {prompt} / {width} / {height} / {seed} tokens substituted by the same code path the run used, at the settings of the standard 768\u00d7768 subject cell. Its prompt and seed are a fixture \u2014 the real values of the published row named in _fixture.fixture_row_id \u2014 which any other row's prompt and seed substitute into.",
   "media_type": "application/json",
   "bytes": 3313,
   "sha256": "0b7183f539f9eb7d078c9de15e50636e486928f41d1397ec242b7838d54351d2",
   "stripped": []
  },
  {
   "file": "graph-z-image-base.json",
   "role": "The ComfyUI API-format workflow graph for z-image-base, as this bench submitted it: the harness's own template with its `_`-prefixed note keys dropped and its {prompt} / {width} / {height} / {seed} tokens substituted by the same code path the run used, at the settings of the standard 768\u00d7768 subject cell. Its prompt and seed are a fixture \u2014 the real values of the published row named in _fixture.fixture_row_id \u2014 which any other row's prompt and seed substitute into.",
   "media_type": "application/json",
   "bytes": 3252,
   "sha256": "4ae2dfb2238f00261c2b65c90026557356eab33a7fa182e3ff6616c48e0512a4",
   "stripped": []
  },
  {
   "file": "provenance.json",
   "role": "every published file with both sha256s, the named rule applied to it, the two runs' windows and counts, and the graph templates' hashes at pack time",
   "media_type": "application/json",
   "bytes": 14660,
   "sha256": "3861794d4cab40ca9fb98647bc46e4d8f8c4216de89fe8be2d1339d38f280f16"
  },
  {
   "file": "README.md",
   "role": "the kit's own README: licence, what each file holds, the counting rules a reader needs before the numbers, the id-prefix wart, the licence table, the graph-reproduction steps, and the receipts",
   "media_type": "text/markdown",
   "bytes": 18163,
   "sha256": "3d7b56609328509aad7b5810f957e2bed8b668febdca1b9a1d922c60b5205097"
  }
 ],
 "self": {
  "file": "index.json",
  "note": "this listing; its own sha is not carried inside itself"
 }
}
