100 lines
6.7 KiB
Plaintext
100 lines
6.7 KiB
Plaintext
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=<
|
|
<table border="0" cellborder="1" cellspacing="0" color="#1e2a4a" bgcolor="#121829">
|
|
<tr><td colspan="2" bgcolor="#0d1a33"><font color="#0066ff" face="JetBrains Mono"><b>MediaAsset</b></font></td></tr>
|
|
<tr><td><font color="#8892a8">id</font></td><td><font color="#e8eaf0">UUID PK</font></td></tr>
|
|
<tr><td><font color="#8892a8">filename</font></td><td><font color="#e8eaf0">str</font></td></tr>
|
|
<tr><td><font color="#8892a8">file_path</font></td><td><font color="#e8eaf0">str (relative)</font></td></tr>
|
|
<tr><td><font color="#8892a8">duration / fps / size</font></td><td><font color="#e8eaf0">probe metadata</font></td></tr>
|
|
</table>
|
|
>]
|
|
|
|
Profile [label=<
|
|
<table border="0" cellborder="1" cellspacing="0" color="#1e2a4a" bgcolor="#121829">
|
|
<tr><td colspan="2" bgcolor="#0d1a33"><font color="#0066ff" face="JetBrains Mono"><b>Profile</b></font></td></tr>
|
|
<tr><td><font color="#8892a8">name</font></td><td><font color="#e8eaf0">str</font></td></tr>
|
|
<tr><td><font color="#8892a8">pipeline</font></td><td><font color="#e8eaf0">JSONB topology</font></td></tr>
|
|
<tr><td><font color="#8892a8">configs</font></td><td><font color="#e8eaf0">JSONB per-stage</font></td></tr>
|
|
</table>
|
|
>]
|
|
|
|
Timeline [label=<
|
|
<table border="0" cellborder="1" cellspacing="0" color="#1e2a4a" bgcolor="#121829">
|
|
<tr><td colspan="2" bgcolor="#0d1a33"><font color="#0066ff" face="JetBrains Mono"><b>Timeline</b></font></td></tr>
|
|
<tr><td><font color="#8892a8">id</font></td><td><font color="#e8eaf0">UUID PK</font></td></tr>
|
|
<tr><td><font color="#8892a8">source_asset_id</font></td><td><font color="#e8eaf0">FK MediaAsset</font></td></tr>
|
|
<tr><td><font color="#8892a8">chunk_paths</font></td><td><font color="#e8eaf0">str[]</font></td></tr>
|
|
<tr><td><font color="#8892a8">profile_name</font></td><td><font color="#e8eaf0">str</font></td></tr>
|
|
<tr><td><font color="#8892a8">fps / status</font></td><td><font color="#e8eaf0">cached, ready, ...</font></td></tr>
|
|
</table>
|
|
>]
|
|
|
|
Job [label=<
|
|
<table border="0" cellborder="1" cellspacing="0" color="#1e2a4a" bgcolor="#121829">
|
|
<tr><td colspan="2" bgcolor="#0d1a33"><font color="#0066ff" face="JetBrains Mono"><b>Job</b></font></td></tr>
|
|
<tr><td><font color="#8892a8">id</font></td><td><font color="#e8eaf0">UUID PK</font></td></tr>
|
|
<tr><td><font color="#8892a8">timeline_id</font></td><td><font color="#e8eaf0">FK Timeline</font></td></tr>
|
|
<tr><td><font color="#8892a8">parent_id</font></td><td><font color="#e8eaf0">FK Job (replay tree)</font></td></tr>
|
|
<tr><td><font color="#8892a8">profile_name</font></td><td><font color="#e8eaf0">str</font></td></tr>
|
|
<tr><td><font color="#8892a8">config_overrides</font></td><td><font color="#e8eaf0">JSONB</font></td></tr>
|
|
<tr><td><font color="#8892a8">run_type</font></td><td><font color="#e8eaf0">initial / replay / retry</font></td></tr>
|
|
<tr><td><font color="#8892a8">status / current_stage</font></td><td><font color="#e8eaf0">runtime</font></td></tr>
|
|
</table>
|
|
>]
|
|
|
|
Checkpoint [label=<
|
|
<table border="0" cellborder="1" cellspacing="0" color="#1e2a4a" bgcolor="#121829">
|
|
<tr><td colspan="2" bgcolor="#0d1a33"><font color="#0066ff" face="JetBrains Mono"><b>Checkpoint</b></font></td></tr>
|
|
<tr><td><font color="#8892a8">id</font></td><td><font color="#e8eaf0">UUID PK</font></td></tr>
|
|
<tr><td><font color="#8892a8">timeline_id</font></td><td><font color="#e8eaf0">FK Timeline</font></td></tr>
|
|
<tr><td><font color="#8892a8">job_id</font></td><td><font color="#e8eaf0">FK Job (nullable)</font></td></tr>
|
|
<tr><td><font color="#8892a8">parent_id</font></td><td><font color="#e8eaf0">FK Checkpoint (tree)</font></td></tr>
|
|
<tr><td><font color="#8892a8">stage_name</font></td><td><font color="#e8eaf0">str</font></td></tr>
|
|
<tr><td><font color="#8892a8">config_overrides / stats</font></td><td><font color="#e8eaf0">JSONB (no blobs)</font></td></tr>
|
|
</table>
|
|
>]
|
|
|
|
StageOutput [label=<
|
|
<table border="0" cellborder="1" cellspacing="0" color="#1e2a4a" bgcolor="#121829">
|
|
<tr><td colspan="2" bgcolor="#0d1a33"><font color="#0066ff" face="JetBrains Mono"><b>StageOutput</b></font></td></tr>
|
|
<tr><td><font color="#8892a8">id</font></td><td><font color="#e8eaf0">UUID PK</font></td></tr>
|
|
<tr><td><font color="#8892a8">job_id</font></td><td><font color="#e8eaf0">FK Job</font></td></tr>
|
|
<tr><td><font color="#8892a8">timeline_id</font></td><td><font color="#e8eaf0">FK Timeline</font></td></tr>
|
|
<tr><td><font color="#8892a8">stage_name</font></td><td><font color="#e8eaf0">str</font></td></tr>
|
|
<tr><td><font color="#8892a8">checkpoint_id</font></td><td><font color="#e8eaf0">FK Checkpoint (nullable)</font></td></tr>
|
|
<tr><td><font color="#8892a8">output</font></td><td><font color="#e8eaf0">JSONB (flat upsert)</font></td></tr>
|
|
</table>
|
|
>]
|
|
|
|
Brand [label=<
|
|
<table border="0" cellborder="1" cellspacing="0" color="#1e2a4a" bgcolor="#121829">
|
|
<tr><td colspan="2" bgcolor="#0d1a33"><font color="#0066ff" face="JetBrains Mono"><b>Brand</b></font></td></tr>
|
|
<tr><td><font color="#8892a8">canonical_name</font></td><td><font color="#e8eaf0">str (indexed)</font></td></tr>
|
|
<tr><td><font color="#8892a8">aliases</font></td><td><font color="#e8eaf0">str[]</font></td></tr>
|
|
<tr><td><font color="#8892a8">source</font></td><td><font color="#e8eaf0">ocr / local_vlm / cloud_llm / manual</font></td></tr>
|
|
<tr><td><font color="#8892a8">airings</font></td><td><font color="#e8eaf0">JSONB[]</font></td></tr>
|
|
</table>
|
|
>]
|
|
|
|
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]
|
|
}
|