changedOutput schema / anyOf
Previous value: -[
- {
- "properties": {
- "beats": {
- "properties": {
- "beats": {
- "items": {
- "type": "number"
- },
- "type": "array"
- },
- "bpm": {
- "type": "number"
- },
- "downbeats": {
- "items": {
- "type": "number"
- },
- "type": "array"
- }
- },
- "required": [
- "bpm",
- "beats",
- "downbeats"
- ],
- "type": "object"
- },
- "faces": {
- "properties": {
- "frames": {
- "items": {
- "properties": {
- "faces": {
- "items": {
- "properties": {
- "h": {
- "type": "number"
- },
- "score": {
- "type": "number"
- },
- "w": {
- "type": "number"
- },
- "x": {
- "type": "number"
- },
- "y": {
- "type": "number"
- }
- },
- "required": [
- "x",
- "y",
- "w",
- "h",
- "score"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "time": {
- "type": "number"
- }
- },
- "required": [
- "time",
- "faces"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "rate": {
- "type": "number"
- }
- },
- "required": [
- "rate",
- "frames"
- ],
- "type": "object"
- },
- "frames": {
- "description": "look: frames asked about",
- "type": "number"
- },
- "kind": {
- "enum": [
- "transcript",
- "beats",
- "faces",
- "track",
- "look",
- "silence",
- "scenes",
- "speech",
- "loudness",
- "sounds"
- ],
- "type": "string"
- },
- "look": {
- "additionalProperties": {},
- "description": "look: this run (id, model, questions, frames with answers)",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "loudness": {
- "properties": {
- "from": {
- "description": "Seconds measured from",
- "type": "number"
- },
- "integrated_lufs": {
- "description": "EBU R128; null below its -70 LUFS gate",
- "type": [
- "number",
- "null"
- ]
- },
- "loudness_range_lu": {
- "description": "EBU R128 loudness range (LRA)",
- "type": [
- "number",
- "null"
- ]
- },
- "noise_floor_dbfs": {
- "description": "Level of the quietest moments (FFmpeg astats noise floor): room tone or hiss",
- "type": [
- "number",
- "null"
- ]
- },
- "rms_dbfs": {
- "description": "RMS level over the whole stretch",
- "type": [
- "number",
- "null"
- ]
- },
- "true_peak_dbtp": {
- "type": [
- "number",
- "null"
- ]
- },
- "until": {
- "description": "Seconds measured until; null: the end",
- "type": [
- "number",
- "null"
- ]
- }
- },
- "required": [
- "integrated_lufs",
- "true_peak_dbtp",
- "loudness_range_lu",
- "rms_dbfs",
- "noise_floor_dbfs",
- "from",
- "until"
- ],
- "type": "object"
- },
- "media_id": {
- "description": "Media handle from media.import or a create.* tool",
- "pattern": "^m_[0-9a-z]{26}$",
- "type": "string"
- },
- "model": {
- "description": "look: the Jev model",
- "type": "string"
- },
- "note": {
- "description": "In place of the analysis when it is too long to return: where to read it",
- "type": "string"
- },
- "scenes": {
- "description": "scenes: cut times, media seconds",
- "items": {
- "type": "number"
- },
- "type": "array"
- },
- "silences": {
- "description": "silence: media seconds",
- "items": {
- "properties": {
- "end": {
- "type": "number"
- },
- "start": {
- "type": "number"
- }
- },
- "required": [
- "start",
- "end"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "sounds": {
- "properties": {
- "min_probability": {
- "type": "number"
- },
- "model": {
- "type": "string"
- },
- "peaks": {
- "additionalProperties": {
- "type": "number"
- },
- "description": "Per sound reported: the highest probability it reaches anywhere",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "scores": {
- "description": "Every probability, for your own cut-off or arithmetic",
- "properties": {
- "start_seconds": {
- "description": "Where the first value starts: media seconds, or timeline seconds for a timeline",
- "type": "number"
- },
- "step_seconds": {
- "description": "Seconds each value covers: 0.04 (every frame) unless asked or too long",
- "type": "number"
- },
- "values": {
- "additionalProperties": {
- "items": {
- "type": "number"
- },
- "type": "array"
- },
- "description": "Per sound, the highest probability in each step, 0 to 1",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- }
- },
- "required": [
- "start_seconds",
- "step_seconds",
- "values"
- ],
- "type": "object"
- },
- "spans": {
- "additionalProperties": {
- "items": {
- "properties": {
- "end": {
- "description": "Where it ends, on the same clock",
- "type": "number"
- },
- "peak_probability": {
- "type": "number"
- },
- "peak_seconds": {
- "description": "The middle of the most likely frame",
- "type": "number"
- },
- "start": {
- "description": "Where the run of matching 40 ms frames starts: media seconds, or timeline seconds for a timeline",
- "type": "number"
- }
- },
- "required": [
- "start",
- "end",
- "peak_seconds",
- "peak_probability"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "description": "Per sound: the runs of 40 ms frames at or above min_probability, in time order; empty when it never is",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- }
- },
- "required": [
- "model",
- "min_probability",
- "spans",
- "peaks"
- ],
- "type": "object"
- },
- "speech": {
- "properties": {
- "frame_seconds": {
- "type": "number"
- },
- "from": {
- "type": "number"
- },
- "min_probability": {
- "type": "number"
- },
- "model": {
- "type": "string"
- },
- "probabilities": {
- "description": "Every frame, when short enough to return; media: also media.get include speech",
- "items": {
- "type": "number"
- },
- "type": "array"
- },
- "spans": {
- "description": "Runs of frames at or above min_probability, seconds",
- "items": {
- "properties": {
- "end": {
- "type": "number"
- },
- "start": {
- "type": "number"
- }
- },
- "required": [
- "start",
- "end"
- ],
- "type": "object"
- },
- "type": "array"
- }
- },
- "required": [
- "model",
- "min_probability",
- "spans",
- "frame_seconds",
- "from"
- ],
- "type": "object"
- },
- "summary": {
- "additionalProperties": {},
- "description": "The summary media.get gives under analyses; look: where each answer holds",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "timeline_id": {
- "description": "Timeline handle; every edit returns a new one",
- "pattern": "^tl_[0-9a-f]{32}$",
- "type": "string"
- },
- "track": {
- "properties": {
- "points": {
- "items": {
- "properties": {
- "found": {
- "type": "boolean"
- },
- "h": {
- "type": "number"
- },
- "time": {
- "type": "number"
- },
- "w": {
- "type": "number"
- },
- "x": {
- "type": "number"
- },
- "y": {
- "type": "number"
- }
- },
- "required": [
- "time",
- "x",
- "y",
- "w",
- "h",
- "found"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "rate": {
- "type": "number"
- }
- },
- "required": [
- "rate",
- "points"
- ],
- "type": "object"
- },
- "transcript": {
- "properties": {
- "aligned_by": {
- "description": "The model that moved word edges to where the letters sound (English); null: the times are whisper's own, up to about a second off",
- "type": [
- "string",
- "null"
- ]
- },
- "language": {
- "type": "string"
- },
- "model": {
- "type": "string"
- },
- "text": {
- "type": "string"
- },
- "words": {
- "description": "Media seconds. Aligned words start and end within about 0.05 s of where their letters sound; an end on a soft consonant (s, t, k, f) or a breath can ring on up to about 0.1 s more. Short ums are often missing from the words; kind speech finds them as speech",
- "items": {
- "properties": {
- "confidence": {
- "description": "0–1: how sure whisper is of the word itself",
- "type": "number"
- },
- "end": {
- "type": "number"
- },
- "start": {
- "type": "number"
- },
- "text": {
- "type": "string"
- },
- "timing_confidence": {
- "description": "0–1: how clearly the letters were heard between start and end; null: not aligned (digits, symbols, other languages), times fitted between neighbours",
- "type": [
- "number",
- "null"
- ]
- }
- },
- "required": [
- "text",
- "start",
- "end",
- "confidence"
- ],
- "type": "object"
- },
- "type": "array"
- }
- },
- "required": [
- "model",
- "language",
- "text",
- "words"
- ],
- "type": "object"
- }
- },
- "required": [
- "kind"
- ],
- "type": "object"
- },
- {
- "properties": {
- "hint": {
- "type": "string"
- },
- "job_id": {
- "description": "Job handle; the same value is the MCP task id",
- "pattern": "^j_[0-9a-z]{26}$",
- "type": "string"
- },
- "media_id": {
- "description": "The media it is making; usable in edits once processing",
- "pattern": "^m_[0-9a-z]{26}$",
- "type": "string"
- },
- "status": {
- "enum": [
- "working",
- "completed",
- "failed",
- "cancelled"
- ],
- "type": "string"
- },
- "status_uri": {
- "type": "string"
- }
- },
- "required": [
- "job_id",
- "status",
- "status_uri",
- "hint"
- ],
- "type": "object"
- }
-]New value: +[
+ {
+ "properties": {
+ "beats": {
+ "properties": {
+ "beats": {
+ "items": {
+ "type": "number"
+ },
+ "type": "array"
+ },
+ "bpm": {
+ "type": "number"
+ },
+ "downbeats": {
+ "items": {
+ "type": "number"
+ },
+ "type": "array"
+ },
+ "strengths": {
+ "description": "Per beat: its onset strength, 0–1 of the strongest in the sound",
+ "items": {
+ "type": "number"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "bpm",
+ "beats",
+ "downbeats"
+ ],
+ "type": "object"
+ },
+ "colour": {
+ "properties": {
+ "frames": {
+ "items": {
+ "properties": {
+ "regions": {
+ "additionalProperties": {
+ "properties": {
+ "b": {
+ "properties": {
+ "mean": {
+ "type": "number"
+ },
+ "percentiles": {
+ "additionalProperties": {
+ "type": "number"
+ },
+ "description": "Per percentile asked (\"5\", \"50\", \"95\"): the value",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ }
+ },
+ "required": [
+ "mean",
+ "percentiles"
+ ],
+ "type": "object"
+ },
+ "clipped_high": {
+ "description": "Share of pixels with a channel at 255",
+ "type": "number"
+ },
+ "clipped_low": {
+ "description": "Share of pixels black in every channel",
+ "type": "number"
+ },
+ "g": {
+ "properties": {
+ "mean": {
+ "type": "number"
+ },
+ "percentiles": {
+ "additionalProperties": {
+ "type": "number"
+ },
+ "description": "Per percentile asked (\"5\", \"50\", \"95\"): the value",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ }
+ },
+ "required": [
+ "mean",
+ "percentiles"
+ ],
+ "type": "object"
+ },
+ "luma": {
+ "description": "Rec. 709 luma of the encoded values: 0.2126 R + 0.7152 G + 0.0722 B",
+ "properties": {
+ "mean": {
+ "type": "number"
+ },
+ "percentiles": {
+ "additionalProperties": {
+ "type": "number"
+ },
+ "description": "Per percentile asked (\"5\", \"50\", \"95\"): the value",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ }
+ },
+ "required": [
+ "mean",
+ "percentiles"
+ ],
+ "type": "object"
+ },
+ "pixels": {
+ "description": "The region measured, in pixels of the picture",
+ "properties": {
+ "h": {
+ "type": "number"
+ },
+ "w": {
+ "type": "number"
+ },
+ "x": {
+ "type": "number"
+ },
+ "y": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "x",
+ "y",
+ "w",
+ "h"
+ ],
+ "type": "object"
+ },
+ "r": {
+ "properties": {
+ "mean": {
+ "type": "number"
+ },
+ "percentiles": {
+ "additionalProperties": {
+ "type": "number"
+ },
+ "description": "Per percentile asked (\"5\", \"50\", \"95\"): the value",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ }
+ },
+ "required": [
+ "mean",
+ "percentiles"
+ ],
+ "type": "object"
+ },
+ "white_point": {
+ "description": "Mean colour of the brightest 1% of its pixels, an estimate of the white point",
+ "properties": {
+ "b": {
+ "type": "number"
+ },
+ "g": {
+ "type": "number"
+ },
+ "r": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "r",
+ "g",
+ "b"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "pixels",
+ "r",
+ "g",
+ "b",
+ "luma",
+ "white_point",
+ "clipped_high",
+ "clipped_low"
+ ],
+ "type": "object"
+ },
+ "description": "frame: the whole picture; and each region you named",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "time": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "time",
+ "regions"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "percentiles": {
+ "items": {
+ "type": "number"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "percentiles",
+ "frames"
+ ],
+ "type": "object"
+ },
+ "faces": {
+ "properties": {
+ "frames": {
+ "items": {
+ "properties": {
+ "faces": {
+ "items": {
+ "description": "Top-left corner x, y and size w, h, fractions of the picture (centre: x + w/2, y + h/2); score 0–1",
+ "properties": {
+ "h": {
+ "type": "number"
+ },
+ "score": {
+ "type": "number"
+ },
+ "w": {
+ "type": "number"
+ },
+ "x": {
+ "type": "number"
+ },
+ "y": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "x",
+ "y",
+ "w",
+ "h",
+ "score"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "time": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "time",
+ "faces"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "rate": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "rate",
+ "frames"
+ ],
+ "type": "object"
+ },
+ "frames": {
+ "description": "look: frames asked about",
+ "type": "number"
+ },
+ "kind": {
+ "enum": [
+ "transcript",
+ "beats",
+ "faces",
+ "track",
+ "look",
+ "silence",
+ "scenes",
+ "speech",
+ "loudness",
+ "sounds",
+ "speakers",
+ "voice",
+ "colour",
+ "picture"
+ ],
+ "type": "string"
+ },
+ "look": {
+ "additionalProperties": {},
+ "description": "look: this run (id, model, questions, frames with answers)",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "loudness": {
+ "properties": {
+ "channels": {
+ "description": "Each channel on its own, in stream order (1 is left in stereo)",
+ "items": {
+ "properties": {
+ "channel": {
+ "exclusiveMinimum": 0,
+ "type": "integer"
+ },
+ "noise_floor_dbfs": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "peak_dbfs": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "rms_dbfs": {
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "channel",
+ "rms_dbfs",
+ "peak_dbfs",
+ "noise_floor_dbfs"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "from": {
+ "description": "Seconds measured from",
+ "type": "number"
+ },
+ "integrated_lufs": {
+ "description": "EBU R128; null below its -70 LUFS gate",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "loudness_range_lu": {
+ "description": "EBU R128 loudness range (LRA)",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "noise_floor_dbfs": {
+ "description": "Level of the quietest moments (FFmpeg astats noise floor): room tone or hiss",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "rms_dbfs": {
+ "description": "RMS level over the whole stretch",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "true_peak_dbtp": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "until": {
+ "description": "Seconds measured until; null: the end",
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "integrated_lufs",
+ "true_peak_dbtp",
+ "loudness_range_lu",
+ "rms_dbfs",
+ "noise_floor_dbfs",
+ "channels",
+ "from",
+ "until"
+ ],
+ "type": "object"
+ },
+ "media_id": {
+ "description": "Media handle from media.import or a create.* tool",
+ "pattern": "^m_[0-9a-z]{26}$",
+ "type": "string"
+ },
+ "model": {
+ "description": "look: the Jev model",
+ "type": "string"
+ },
+ "note": {
+ "description": "In place of the analysis when it is too long to return: where to read it",
+ "type": "string"
+ },
+ "picture": {
+ "properties": {
+ "columns": {
+ "additionalProperties": {
+ "items": {
+ "type": "number"
+ },
+ "type": "array"
+ },
+ "description": "One number per frame in each, in order: time, then FFmpeg signalstats in the picture's own bit depth (0–255 for 8-bit): ymin, ylow (10th percentile), yavg, yhigh (90th), ymax, the same for u and v, satmin…satmax, huemed, hueavg, ydif, udif, vdif (mean change from the frame before), and the bits each plane uses (ybitdepth…)",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "from": {
+ "type": "number"
+ },
+ "method": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "method",
+ "from",
+ "columns"
+ ],
+ "type": "object"
+ },
+ "picture_size": {
+ "description": "faces, track, colour: the picture measured, in pixels (a box times it is pixels)",
+ "properties": {
+ "height": {
+ "type": "number"
+ },
+ "width": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "width",
+ "height"
+ ],
+ "type": "object"
+ },
+ "scene_scores": {
+ "description": "scenes: how much the picture changed at each cut, on the threshold scale",
+ "items": {
+ "type": "number"
+ },
+ "type": "array"
+ },
+ "scenes": {
+ "description": "scenes: cut times, media seconds",
+ "items": {
+ "type": "number"
+ },
+ "type": "array"
+ },
+ "silences": {
+ "description": "silence: media seconds; a stretch after the sound stops (see sound_ends) counts as silent",
+ "items": {
+ "properties": {
+ "end": {
+ "type": "number"
+ },
+ "start": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "start",
+ "end"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "sound_ends": {
+ "description": "silence: where the sound stream stops, when it stops before the media ends: past it there is no sound at all",
+ "type": "number"
+ },
+ "sounds": {
+ "properties": {
+ "min_probability": {
+ "type": "number"
+ },
+ "model": {
+ "type": "string"
+ },
+ "peaks": {
+ "additionalProperties": {
+ "type": "number"
+ },
+ "description": "Per sound reported: the highest probability it reaches anywhere",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "scores": {
+ "description": "Every probability, for your own cut-off or arithmetic",
+ "properties": {
+ "start_seconds": {
+ "description": "Where the first value starts: media seconds, or timeline seconds for a timeline",
+ "type": "number"
+ },
+ "step_seconds": {
+ "description": "Seconds each value covers: 0.04 (every frame) unless asked or too long",
+ "type": "number"
+ },
+ "values": {
+ "additionalProperties": {
+ "items": {
+ "type": "number"
+ },
+ "type": "array"
+ },
+ "description": "Per sound, the highest probability in each step, 0 to 1",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ }
+ },
+ "required": [
+ "start_seconds",
+ "step_seconds",
+ "values"
+ ],
+ "type": "object"
+ },
+ "spans": {
+ "additionalProperties": {
+ "items": {
+ "properties": {
+ "end": {
+ "description": "Where it ends, on the same clock",
+ "type": "number"
+ },
+ "peak_probability": {
+ "type": "number"
+ },
+ "peak_seconds": {
+ "description": "The middle of the most likely frame",
+ "type": "number"
+ },
+ "start": {
+ "description": "Where the run of matching 40 ms frames starts: media seconds, or timeline seconds for a timeline",
+ "type": "number"
+ }
+ },
+ "required": [
+ "start",
+ "end",
+ "peak_seconds",
+ "peak_probability"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "description": "Per sound: the runs of 40 ms frames at or above min_probability, in time order; empty when it never is",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ }
+ },
+ "required": [
+ "model",
+ "min_probability",
+ "spans",
+ "peaks"
+ ],
+ "type": "object"
+ },
+ "speakers": {
+ "properties": {
+ "cluster_threshold": {
+ "description": "The cut-off you gave, or null",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "from": {
+ "description": "The stretch diarised, when not the whole media",
+ "type": "number"
+ },
+ "model": {
+ "type": "string"
+ },
+ "speakers": {
+ "description": "How many speakers were found",
+ "type": "number"
+ },
+ "speakers_asked": {
+ "description": "The count you gave, or null",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "turns": {
+ "description": "Each stretch of one voice, by start; two voices at once overlap",
+ "items": {
+ "properties": {
+ "confidence": {
+ "description": "0–1: how close this turn's voice sits to its speaker's other turns",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "end": {
+ "type": "number"
+ },
+ "speaker": {
+ "description": "0 is the first voice heard, 1 the next new one, …",
+ "type": "number"
+ },
+ "start": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "start",
+ "end",
+ "speaker",
+ "confidence"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "until": {
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "model",
+ "speakers_asked",
+ "cluster_threshold",
+ "speakers",
+ "turns"
+ ],
+ "type": "object"
+ },
+ "speech": {
+ "properties": {
+ "frame_seconds": {
+ "type": "number"
+ },
+ "from": {
+ "type": "number"
+ },
+ "min_probability": {
+ "type": "number"
+ },
+ "model": {
+ "type": "string"
+ },
+ "probabilities": {
+ "description": "Every frame, when short enough to return; media: also media.get include speech",
+ "items": {
+ "type": "number"
+ },
+ "type": "array"
+ },
+ "spans": {
+ "description": "Runs of frames at or above min_probability, seconds",
+ "items": {
+ "properties": {
+ "end": {
+ "type": "number"
+ },
+ "start": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "start",
+ "end"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "model",
+ "min_probability",
+ "spans",
+ "frame_seconds",
+ "from"
+ ],
+ "type": "object"
+ },
+ "summary": {
+ "additionalProperties": {},
+ "description": "The summary media.get gives under analyses; look: where each answer holds",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "timeline_id": {
+ "description": "Timeline handle; every edit returns a new one",
+ "pattern": "^tl_[0-9a-f]{32}$",
+ "type": "string"
+ },
+ "track": {
+ "properties": {
+ "points": {
+ "items": {
+ "properties": {
+ "found": {
+ "type": "boolean"
+ },
+ "h": {
+ "type": "number"
+ },
+ "time": {
+ "type": "number"
+ },
+ "w": {
+ "type": "number"
+ },
+ "x": {
+ "type": "number"
+ },
+ "y": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "time",
+ "x",
+ "y",
+ "w",
+ "h",
+ "found"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "rate": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "rate",
+ "points"
+ ],
+ "type": "object"
+ },
+ "transcript": {
+ "properties": {
+ "aligned_by": {
+ "description": "The model that moved word edges to where the letters sound (English); null: the times are whisper's own, up to about a second off",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "from": {
+ "description": "The stretch transcribed, if not all",
+ "type": "number"
+ },
+ "language": {
+ "type": "string"
+ },
+ "model": {
+ "type": "string"
+ },
+ "text": {
+ "type": "string"
+ },
+ "until": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "words": {
+ "description": "Media seconds. Aligned words start and end within about 0.05 s of where their letters sound; an end on a soft consonant (s, t, k, f) or a breath can ring on up to about 0.1 s more. Short ums are often missing from the words; kind speech finds them as speech. A word \"-\" (or one starting with it) is whisper marking a new speaker, as subtitles do: a hint only; kind speakers measures who speaks when",
+ "items": {
+ "properties": {
+ "confidence": {
+ "description": "0–1: how sure whisper is of the word itself",
+ "type": "number"
+ },
+ "end": {
+ "type": "number"
+ },
+ "speaker": {
+ "description": "Who says it, from the latest speakers run",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "start": {
+ "type": "number"
+ },
+ "text": {
+ "type": "string"
+ },
+ "timing_confidence": {
+ "description": "0–1: how clearly the letters were heard between start and end; null: not aligned (digits, symbols, other languages), times fitted between neighbours",
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "text",
+ "start",
+ "end",
+ "confidence"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "model",
+ "language",
+ "text",
+ "words"
+ ],
+ "type": "object"
+ },
+ "voice": {
+ "properties": {
+ "frame_seconds": {
+ "type": "number"
+ },
+ "frames": {
+ "items": {
+ "properties": {
+ "level_db": {
+ "description": "RMS, dBFS; null: digital silence",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "pitch_hz": {
+ "description": "Median of its voiced 10 ms steps; null: none",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "time": {
+ "type": "number"
+ },
+ "voiced": {
+ "description": "Share of it with a clear pitch, 0–1",
+ "type": "number"
+ }
+ },
+ "required": [
+ "time",
+ "pitch_hz",
+ "voiced",
+ "level_db"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "from": {
+ "type": "number"
+ },
+ "method": {
+ "type": "string"
+ },
+ "summary": {
+ "properties": {
+ "level_db": {
+ "properties": {
+ "p10": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "p90": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "rms": {
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "rms",
+ "p10",
+ "p90"
+ ],
+ "type": "object"
+ },
+ "pitch_hz": {
+ "anyOf": [
+ {
+ "properties": {
+ "median": {
+ "type": "number"
+ },
+ "p10": {
+ "type": "number"
+ },
+ "p90": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "median",
+ "p10",
+ "p90"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Over the voiced time"
+ },
+ "pitch_range_semitones": {
+ "description": "p10 to p90: how much the voice moves",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "seconds": {
+ "type": "number"
+ },
+ "voiced_seconds": {
+ "description": "Time with a clear pitch: voice, not noise or silence",
+ "type": "number"
+ },
+ "words": {
+ "description": "Transcript words in the stretch; null: no transcript",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "words_per_second": {
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "seconds",
+ "voiced_seconds",
+ "pitch_hz",
+ "pitch_range_semitones",
+ "level_db",
+ "words",
+ "words_per_second"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "method",
+ "frame_seconds",
+ "from",
+ "summary",
+ "frames"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "kind"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "hint": {
+ "type": "string"
+ },
+ "job_id": {
+ "description": "Job handle; the same value is the MCP task id",
+ "pattern": "^j_[0-9a-z]{26}$",
+ "type": "string"
+ },
+ "media_id": {
+ "description": "The media it is making; usable in edits once processing",
+ "pattern": "^m_[0-9a-z]{26}$",
+ "type": "string"
+ },
+ "status": {
+ "enum": [
+ "working",
+ "completed",
+ "failed",
+ "cancelled"
+ ],
+ "type": "string"
+ },
+ "status_uri": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "job_id",
+ "status",
+ "status_uri",
+ "hint"
+ ],
+ "type": "object"
+ }
+]