changedInput schema / properties / from_seconds / description
Previous value: -"Only what ends after this media time: transcript words, beats, face and look frames"New value: +"Only what ends after this media time: transcript words, beats, speaker turns, frames"
changedInput schema / properties / include / description
Previous value: -"Also return these analyses (otherwise only their summaries): in full, or the piece from_seconds, to_seconds, offset and limit choose"New value: +"Also return these analyses (otherwise only their summaries): in full, or the piece from_seconds, to_seconds, offset and limit choose. One never run on this media is absent, and warnings says so"
changedInput schema / properties / include / items / enum
Previous value: -[
- "transcript",
- "beats",
- "faces",
- "look",
- "speech",
- "sounds"
-]New value: +[
+ "transcript",
+ "beats",
+ "faces",
+ "look",
+ "speech",
+ "sounds",
+ "speakers",
+ "voice",
+ "colour",
+ "picture"
+]
addedOutput schema / properties / analyses / properties / colour
Added value: +{
+ "properties": {
+ "frames": {
+ "type": "number"
+ },
+ "regions": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "frames",
+ "regions"
+ ],
+ "type": "object"
+}
addedOutput schema / properties / analyses / properties / picture
Added value: +{
+ "properties": {
+ "frames": {
+ "type": "number"
+ },
+ "from": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "frames",
+ "from"
+ ],
+ "type": "object"
+}
addedOutput schema / properties / analyses / properties / speakers
Added value: +{
+ "properties": {
+ "model": {
+ "type": "string"
+ },
+ "speakers": {
+ "type": "number"
+ },
+ "turns": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "model",
+ "speakers",
+ "turns"
+ ],
+ "type": "object"
+}
addedOutput schema / properties / analyses / properties / voice
Added value: +{
+ "additionalProperties": {},
+ "description": "frames, and the summary media.analyze voice gives",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+}
changedOutput schema / properties / analysis / anyOf
Previous value: -[
- {
- "properties": {
- "loudness_lufs": {
- "description": "Integrated loudness at import",
- "type": [
- "number",
- "null"
- ]
- }
- },
- "required": [
- "loudness_lufs"
- ],
- "type": "object"
- },
- {
- "type": "null"
- }
-]New value: +[
+ {
+ "properties": {
+ "channels": {
+ "description": "Each channel at import",
+ "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"
+ },
+ "loudness_lufs": {
+ "description": "Integrated loudness at import",
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "loudness_lufs"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+]
addedOutput schema / properties / beats / properties / strengths
Added value: +{
+ "description": "Per beat: its onset strength, 0–1 of the strongest in the sound",
+ "items": {
+ "type": "number"
+ },
+ "type": "array"
+}
addedOutput schema / properties / colour
Added value: +{
+ "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"
+}
changedOutput schema / properties / error / properties / code / enum
Previous value: -[
- "bad_request",
- "no_audio",
- "not_found",
- "expired",
- "media_not_ready",
- "media_offline",
- "engine_error",
- "render_failed",
- "interrupted",
- "cancelled",
- "credential_required",
- "credential_invalid",
- "output_exists",
- "path_not_allowed",
- "limit_exceeded",
- "quota_exceeded",
- "subscription_required",
- "email_unverified",
- "service_unavailable",
- "server_busy"
-]New value: +[
+ "bad_request",
+ "no_audio",
+ "not_found",
+ "expired",
+ "media_not_ready",
+ "media_offline",
+ "engine_error",
+ "render_failed",
+ "interrupted",
+ "stalled",
+ "cancelled",
+ "credential_required",
+ "credential_invalid",
+ "output_exists",
+ "path_not_allowed",
+ "limit_exceeded",
+ "quota_exceeded",
+ "subscription_required",
+ "email_unverified",
+ "service_unavailable",
+ "server_busy"
+]
addedOutput schema / properties / faces / properties / frames / items / properties / faces / items / description
Added value: +"Top-left corner x, y and size w, h, fractions of the picture (centre: x + w/2, y + h/2); score 0–1"
addedOutput schema / properties / fingerprint
Added value: +{
+ "description": "Identity of the file (BLAKE3 of its size and first, middle and last 4 MB), as export.video gives",
+ "type": [
+ "string",
+ "null"
+ ]
+}
addedOutput schema / properties / job
Added value: +{
+ "description": "media.get, while importing or being made: the job doing it",
+ "properties": {
+ "job_id": {
+ "description": "Job handle; the same value is the MCP task id",
+ "pattern": "^j_[0-9a-z]{26}$",
+ "type": "string"
+ },
+ "progress": {
+ "type": "number"
+ },
+ "seconds_left": {
+ "type": "number"
+ },
+ "status": {
+ "enum": [
+ "working",
+ "completed",
+ "failed",
+ "cancelled"
+ ],
+ "type": "string"
+ },
+ "status_message": {
+ "type": "string"
+ },
+ "tool": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "job_id",
+ "tool",
+ "status"
+ ],
+ "type": "object"
+}
addedOutput schema / properties / origin / properties / frame
Added value: +{
+ "description": "still: the frame",
+ "type": "number"
+}
changedOutput schema / properties / origin / properties / from / description
Previous value: -"upload: a file the user sent; url: downloaded; path: a media root; render: an export.video; created: a create.* tool"New value: +"upload: a file the user sent; url: downloaded; path: a media root; render: an export.video; created: a create.* tool; still: a frame of a video or an edit"
changedOutput schema / properties / origin / properties / from / enum
Previous value: -[
- "upload",
- "url",
- "path",
- "render",
- "created"
-]New value: +[
+ "upload",
+ "url",
+ "path",
+ "render",
+ "created",
+ "still"
+]
addedOutput schema / properties / origin / properties / media_id
Added value: +{
+ "description": "still: the video the frame is from",
+ "pattern": "^m_[0-9a-z]{26}$",
+ "type": "string"
+}
changedOutput schema / properties / origin / properties / timeline_id / description
Previous value: -"render: the timeline that was exported"New value: +"render: the timeline that was exported; still: the edit the frame is from"
changedOutput schema / properties / pages / additionalProperties / properties / list / description
Previous value: -"The list paged: transcript.words, beats.beats, faces.frames, speech.probabilities (one per frame_seconds from `from`), or look runs[].frames (each run is cut the same way; first and the counts are the latest run's)"New value: +"The list paged: transcript.words, beats.beats, faces.frames, speech.probabilities (one per frame_seconds from `from`), speakers.turns, voice.frames, colour.frames, picture.columns (every column alike), or look runs[].frames (each run is cut the same way; first and the counts are the latest run's)"
changedOutput schema / properties / pages / propertyNames / enum
Previous value: -[
- "transcript",
- "beats",
- "faces",
- "look",
- "speech",
- "sounds"
-]New value: +[
+ "transcript",
+ "beats",
+ "faces",
+ "look",
+ "speech",
+ "sounds",
+ "speakers",
+ "voice",
+ "colour",
+ "picture"
+]
addedOutput schema / properties / picture
Added value: +{
+ "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"
+}
addedOutput schema / properties / sound_seconds
Added value: +{
+ "description": "How long the sound runs; under duration_seconds, the end is soundless",
+ "type": "number"
+}
addedOutput schema / properties / speakers
Added value: +{
+ "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"
+}
addedOutput schema / properties / transcript / properties / from
Added value: +{
+ "description": "The stretch transcribed, if not all",
+ "type": "number"
+}
addedOutput schema / properties / transcript / properties / until
Added value: +{
+ "type": [
+ "number",
+ "null"
+ ]
+}
changedOutput schema / properties / transcript / properties / words / description
Previous value: -"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"New value: +"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"
addedOutput schema / properties / transcript / properties / words / items / properties / speaker
Added value: +{
+ "description": "Who says it, from the latest speakers run",
+ "type": [
+ "number",
+ "null"
+ ]
+}
addedOutput schema / properties / voice
Added value: +{
+ "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"
+}