digraph data_model { rankdir=LR bgcolor="#0a0e17" fontname="Helvetica" node [fontname="Helvetica" fontsize=11 shape=plaintext] edge [fontname="Helvetica" fontsize=9 fontcolor="#8892a8" color="#4a5568"] label="Data Model" labelloc=t fontsize=16 fontcolor="#0066ff" MediaAsset [label=<
MediaAsset
idUUID PK
filenamestr
file_pathstr (relative)
duration / fps / sizeprobe metadata
>] Profile [label=<
Profile
namestr
pipelineJSONB topology
configsJSONB per-stage
>] Timeline [label=<
Timeline
idUUID PK
source_asset_idFK MediaAsset
chunk_pathsstr[]
profile_namestr
fps / statuscached, ready, ...
>] Job [label=<
Job
idUUID PK
timeline_idFK Timeline
parent_idFK Job (replay tree)
profile_namestr
config_overridesJSONB
run_typeinitial / replay / retry
status / current_stageruntime
>] Checkpoint [label=<
Checkpoint
idUUID PK
timeline_idFK Timeline
job_idFK Job (nullable)
parent_idFK Checkpoint (tree)
stage_namestr
config_overrides / statsJSONB (no blobs)
>] StageOutput [label=<
StageOutput
idUUID PK
job_idFK Job
timeline_idFK Timeline
stage_namestr
checkpoint_idFK Checkpoint (nullable)
outputJSONB (flat upsert)
>] Brand [label=<
Brand
canonical_namestr (indexed)
aliasesstr[]
sourceocr / local_vlm / cloud_llm / manual
airingsJSONB[]
>] MediaAsset -> Timeline [label="source_asset_id"] Timeline -> Job [label="timeline_id"] Job -> Job [label="parent_id\n(replay tree)" style=dashed] Profile -> Job [label="profile_name" color="#0066ff"] Job -> Checkpoint [label="job_id"] Timeline -> Checkpoint [label="timeline_id"] Checkpoint -> Checkpoint [label="parent_id\n(tree)" style=dashed] Job -> StageOutput [label="job_id"] Checkpoint -> StageOutput [label="checkpoint_id" style=dotted] }