Skip to content
helmstudio
Contents

API types

Every schema a studio's requests and responses are made of.

AdoptRequest

FieldTypeAbout
duration_snumber
fpsnumber
heightinteger
kind requiredAssetKind
path requiredstringAbsolute, inside the caller's stage directory (unlinked after adopting) or its data directory (left in place, read-only).
pinnedboolean
widthinteger

Asset

FieldTypeAbout
bytes requiredinteger
created_at requiredstring
duration_s requirednumber | null
fps requirednumber | null
height requiredinteger | null
id requiredULID
kind requiredAssetKind
library_path requiredstring | nullThe readable hardlink, relative to the library root. Null when it could not be made (Q11), and null for any caller that is not the origin studio, since it names that studio, a month and a filename (M4 first review, #9).
mime requiredstring
origin_studio requiredstring | nullThe studio that first stored these bytes. Null for any caller that is not that studio, so a dedup hit or a shared read never reveals another studio (M4 first review, #9).
pinned requiredboolean
sha256 requiredstring
state requiredstring (ready | missing | corrupt)
thumb requiredstringThis API's path to the thumbnail, e.g. /api/v1/assets/{id}/thumb?w=320. Needs the Bearer header; a page prefixes /helm to go through its proxy (M6 Q10).
url requiredstringThis API's path to the bytes, e.g. /api/v1/assets/{id}. Needs the Bearer header; a page prefixes /helm to go through its proxy (M6 Q10).
warningsstring[]Present on an adopt or upload response when something short of failure happened, such as no library link.
width requiredinteger | null

AssetKind

One of image, video, audio, other.

Capability

One of kv, records, assets, gallery, timeline, jobs, gallery.read_all, kv.shared, handoff.send.

Error

FieldTypeAbout
detailsobject
error requiredstringA stable snake_case code a program branches on.
message requiredstringA sentence for a person.

ExportPlan

FieldTypeAbout
duration_s requirednumber
frames requiredinteger
mode requiredstring (copy | conform)`copy` copies the picture and re-encodes the sound; `conform` re-encodes both. Nothing copies sound (M8 Q13).
preset requiredExportPreset
reasons requiredExportReason[]
target requiredTimelineTarget

ExportPreset

Encoding only, never size or rate, which the target already states (M8 Q9). `h264` is yuv420p, High profile, MP4 with fast start, and AAC-LC at 192 kb/s.

One of h264.

ExportReason

Why an export cannot copy its picture, one per clip that stops it.

FieldTypeAbout
clipintegerThe clip's place in its track, counting from 1.
code requiredstringcontainer, codec, profile, level, size, aspect, field_order, pixel_format, time_base, frame_rate, colour, parameter_sets, trimmed, image, transition, not_probed, no_video.
message requiredstring
trackstring

ExportRequest

FieldTypeAbout
preset requiredExportPreset

GapEvent

FieldTypeAbout
reason requiredstringEvents were lost; re-read state rather than trusting the stream.

Handoff

FieldTypeAbout
created_at requiredstring
id requiredULID
item_id requiredULID
role requiredstring | null
to_studio requiredStudioIdValue

HandoffRequest

FieldTypeAbout
item_id requiredULID
rolestring
to_studio requiredStudioIdValue

InboxEntry

FieldTypeAbout
created_at requiredstring
from_studio requiredStudioIdValue
id requiredULID
item requiredItem | nullNull when the sender has since deleted the item.
item_id requiredULID
role requiredstring | null

InboxEvent

FieldTypeAbout
from_studio requiredStudioIdValue
inbox_id requiredULID
item_id requiredULID
rolestring | null

InboxPage

Everything in Page, and:

FieldTypeAbout
itemsInboxEntry[]

Item

FieldTypeAbout
asset requiredAsset
asset_id requiredULID
created_at requiredstring
id requiredULID
inputs requiredItemInput[]
kind requiredAssetKind
params requiredJSONObject
session_id requiredULID | null
starred requiredboolean
studio_id requiredStudioIdValue
tags requiredTag[]
timeline_id requiredULID | nullSet when this item is a sequence's export (R48, 02 §10). The gallery labels such an item "timeline" rather than by a studio (M8 Q17).
title requiredstring | null

ItemCreate

FieldTypeAbout
asset_id requiredULID
inputsItemInput[]
kind requiredAssetKind
params requiredJSONObject
session_idULID
tagsTag[]
titlestring

ItemEvent

FieldTypeAbout
change requiredstring (added | updated | deleted)
item requiredItem

ItemInput

FieldTypeAbout
asset_id requiredULID
role requiredstringe.g. first_frame, last_frame, reference, audio_bed, clip

ItemPage

Everything in Page, and:

FieldTypeAbout
itemsItem[]

ItemUpdate

FieldTypeAbout
starredboolean
tagsTag[]
titlestring | null

JSONObject

Job

FieldTypeAbout
cancel_requested_atstring
created_at requiredstring
finished_atstring
id requiredULID
kind requiredJobKind
last_errorJobError
progress_den requiredinteger
progress_num requiredinteger
started_atstring
state requiredJobState
stepsStepRun[]
studio_idStudioIdValue
subject_idstring
subject_kindstring
warningsstring[]

JobError

installations.last_failure and jobs.last_error (02 §4). Install codes: clone_failed, tool_missing, env_failed, step_failed, step_timeout, cancelled, interrupted, auth_required, disk_space, weights_failed, linked_missing, uninstall_failed. env_failed (creating a Python environment, docs/decisions.md M5 Q7) has no step_index. A task job's code is the studio's own.

FieldTypeAbout
code requiredstring
exit_codeinteger
log_file_idULID
message requiredstring
phasestring
step_indexinteger

JobEvent

FieldTypeAbout
job requiredJob

JobKind

One of install, build, download, update, export, uninstall, task.

JobLogEnd

FieldTypeAbout
last_errorJobError
state requiredJobState

JobLogLine

FieldTypeAbout
step_indexintegerAbsent for a task job.
text requiredstring

JobLogStep

FieldTypeAbout
command requiredstring
step_index requiredinteger
step_name requiredstring

JobPage

Everything in Page, and:

FieldTypeAbout
itemsJob[]

JobState

One of queued, running, succeeded, failed, cancelled, interrupted.

KVDoc

FieldTypeAbout
doc requiredJSONObject
etag requiredstring
key requiredstring
ns requiredstring
updated_at requiredstring

KVKey

FieldTypeAbout
bytes requiredinteger
key requiredstring
updated_at requiredstring

KVKeyPage

Everything in Page, and:

FieldTypeAbout
itemsKVKey[]

LogAppend

FieldTypeAbout
lines requiredstring[]

Me

FieldTypeAbout
api_version requiredstringThis document's info.version.
capabilities requiredCapability[]
daemon_version requiredstringThe daemon's or helm dev's build version.
paths requiredobject
provider requiredstring (daemon | embedded)
quota requiredobject
studio_id requiredStudioIdValue

Page

FieldTypeAbout
next_cursor requiredstring | nullNull on the last page.

QuotaUse

FieldTypeAbout
limit requiredinteger
used requiredinteger

Record

FieldTypeAbout
collection requiredstring
created_at requiredstring
doc requiredJSONObject
etag requiredstring
id requiredULID
updated_at requiredstring

RecordPage

Everything in Page, and:

FieldTypeAbout
itemsRecord[]

Session

FieldTypeAbout
created_at requiredstring
etag requiredstring
id requiredULID
name requiredstring
opened_at requiredstring | null
state requiredJSONObject
studio_id requiredStudioIdValue

SessionCreate

FieldTypeAbout
name requiredstring
stateJSONObject

SessionDuplicate

FieldTypeAbout
name requiredstring

SessionPage

Everything in Page, and:

FieldTypeAbout
itemsSession[]

SessionUpdate

A JSON merge patch over the session's writable fields. `state` members merge; a null member removes that key.

FieldTypeAbout
namestring
stateJSONObject

ShutdownEvent

FieldTypeAbout
reason requiredstring

StepRun

FieldTypeAbout
command requiredstring
exit_codeinteger
finished_atstring
log_file_idULID
started_atstring
state requiredstring (pending | running | succeeded | skipped | failed | interrupted | cancelled)
step_index requiredinteger
step_name requiredstring

StudioIdValue

A manifest id (schema/manifest.json `id`).

Tag

TaskCreate

FieldTypeAbout
progress_deninteger
progress_numinteger
statestring (queued | running)
subject_idstring
subject_kindstring

TaskUpdate

FieldTypeAbout
last_errorobject
progress_deninteger
progress_numinteger
statestring (running | succeeded | failed | cancelled)

ThemeEvent

FieldTypeAbout
theme requiredstring (system | light | dark)

Timeline

The framework's sequence document (R44, 05 §6). One video track, V1, contiguous from 0, and up to eight audio tracks.

FieldTypeAbout
created_at requiredstring
duration_s requirednumberV1's end, computed and never stored.
etag requiredstring
id requiredULID
name requiredstring
revision requiredintegerRises by one on every write. The ETag.
studio_id requiredstring | nullThe studio that created it; null for the launcher's own (M8 Q11).
target requiredTimelineTarget
tracks requiredTimelineTrack[]
updated_at requiredstring

TimelineAppend

FieldTypeAbout
asset_id requiredULID
timeline_idULID
trackstring

TimelineClip

A reference with in and out points; sources are never modified or copied (R44). `in` and `out` are times in the source, `at` is where it sits in the sequence, and an image clip uses `hold` instead.

FieldTypeAbout
asset_id requiredULID
atnumberWhere it sits in the sequence. Assigned when clips are laid end to end.
audiobooleanWhether a video clip's own sound plays under it. Defaults to true.
gain_dbnumberApplied to this clip's own sound. Defaults to 0.
holdnumberHow long an image is held. Images only, and never with in or out.
innumberWhere the clip starts in its source. Defaults to 0.
outnumberWhere it ends in its source. Defaults to the source's end.
studio_idstring | nullThe studio whose asset this is, for the clip's hue and name. Null when the caller could not learn it from an item it may read (M8 Q11). Set by the daemon, and ignored in a request.
transition_inTimelineTransition

TimelineCreate

FieldTypeAbout
clipsTimelineClip[]Laid end to end from 0, on V1 for video and images and on A1 for sound. Not with `tracks`.
name requiredstring
target requiredTimelineTargetInput
tracksTimelineTrack[]The whole document. Not with `clips`.

TimelineOpened

FieldTypeAbout
opened requiredboolean
surface requiredstringbrowser or app.

TimelinePage

Everything in Page, and:

FieldTypeAbout
itemsTimeline[]

TimelineRevert

FieldTypeAbout
revision requiredinteger

TimelineRevision

FieldTypeAbout
clip_count requiredinteger
duration_s requirednumber
revision requiredinteger
saved_at requiredstring

TimelineRevisionPage

Everything in Page, and:

FieldTypeAbout
itemsTimelineRevision[]

TimelineTarget

What every clip is conformed to (R44, R47). Geometry and rates only: the codec belongs to the export's preset, not the document (M8 Q9). Output is always stereo, and is tagged BT.709 limited range when it is re-encoded.

FieldTypeAbout
fps requirednumber (23.976 | 24 | 25 | 29.97 | 30 | 48 | 50 | 59.94 | 60)One of the rates the daemon knows exactly; 23.976, 29.97 and 59.94 are 24000/1001, 30000/1001 and 60000/1001, which no JSON number writes exactly.
height requiredintegerEven.
sample_rate requiredinteger (44100 | 48000)
width requiredintegerEven.

TimelineTargetInput

The target as a request gives it; `sample_rate` defaults to 48000.

FieldTypeAbout
fps requirednumber (23.976 | 24 | 25 | 29.97 | 30 | 48 | 50 | 59.94 | 60)
height requiredinteger
sample_rateinteger (44100 | 48000)
width requiredinteger

TimelineTrack

FieldTypeAbout
clips requiredTimelineClip[]
gain_dbnumber
kind requiredstring (video | audio)
namestringV1, A1, A2 — kind and position. Assigned by the daemon, and ignored in a request.

TimelineTransition

The one transition (01 §14). It is centred on the cut and takes half its duration of handle from each side, so adding one moves no clip.

FieldTypeAbout
duration requirednumber
type requiredstring (dissolve)

TimelineUpdate

FieldTypeAbout
namestring
targetTimelineTargetInput
tracksTimelineTrack[]

ULID