addedOutput schema / properties / layout
Added value: +{
+ "description": "Where each cell sits on each sheet, in sheet pixels — same order as files, index-aligned with timecodes (cells[n] is the frame stamped timecodes[n]). Published because it cannot be derived: gutters, an outer margin and the branding band mean the grid does not fill the image, so dividing width/height by columns and rows is wrong. Crop by these rectangles to show a single frame. IMPORTANT: these describe the full-resolution sheets at files[], NOT the inline image block — that preview is re-encoded down a size ladder to fit the result budget, so it is often smaller. To crop the inline preview instead, scale every rectangle by (its decoded width / layout[0].width).",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "cells": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "blank": {
+ "description": "True when that frame could not be read and the cell was left black. Present on EVERY cell — a missing field means a server older than this contract, not a healthy sheet. Blankness is NOT detectable from the image: every cell is painted black before drawing, so a night shot or a cut to black is pixel-identical to a failed read.",
+ "type": "boolean"
+ },
+ "h": {
+ "type": "number"
+ },
+ "w": {
+ "type": "number"
+ },
+ "x": {
+ "type": "number"
+ },
+ "y": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "x",
+ "y",
+ "w",
+ "h",
+ "blank"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "height": {
+ "type": "number"
+ },
+ "width": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "width",
+ "height",
+ "cells"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+}
changedOutput schema / required
Previous value: -[
- "input",
- "duration",
- "frames",
- "sheets",
- "files",
- "sheet_ttl_hours",
- "warnings",
- "timecodes",
- "job_id",
- "contract"
-]New value: +[
+ "input",
+ "duration",
+ "frames",
+ "sheets",
+ "files",
+ "sheet_ttl_hours",
+ "warnings",
+ "timecodes",
+ "layout",
+ "job_id",
+ "contract"
+]