VALYDA AI PROTOCOL · EU AI Act · Project (all clips)
One node rolls every clip into a single record
Here's the odd one of the Valyda-Protocol pack: it has no cables. The Project node doesn't take your clip from the workflow and it doesn't touch your render. You run it once at the end of a production, and it reads the records your Creator/Broadcast nodes have been writing to disk all along, then combines every clip into a single document with a contact sheet. One run, one deliverable, the whole show.
That "read from disk" design is the point. Every per-clip run writes a .valyda-akte.json next to its PDF in ComfyUI/output/valyda/<production>/, so the Project node is the closest thing this pack has to a wrap report: it gathers those files, sorts them, and builds one protocol per production with an image overview so an editor can actually recognise the shots. Since Article 50 of the EU AI Act applied on 2 August 2026, having that bundled record is what a broadcaster or client will ask for - and what protects you if they do.
Inputs that matter
- Production - a dropdown of the existing folders under
output/valyda, newest first, defaulting to "- neuestes Projekt -". The list refreshes when you click the node; a fresh project missing from it means a browser hard-refresh (Ctrl+F5). - Producer - left empty, it's taken from the records if they agree unanimously, otherwise "not stated". Same logic for Co-Producer and Rights_Holder.
- Multiple_Runs - if a shot was rendered a few times, you get a few records.
newest clip per scenekeeps only the latest of each, provided the scene is spelled identically. - Output -
bothgives you the Creator sheet and the Broadcast record from the same material; pick one if you only need the one. - Reference_File - full path of the final master (usually the broadcast cut); if the file exists, its checksum gets taken and bound into the document. Version names the cut, e.g. "Sendefassung R3".
- External_1..5 - for items made outside ComfyUI: Photoshop, Topaz, DaVinci, or a cloud service run in its own web app instead of as a node. Format is
Scene | AI system | Reason | Timecode | disclosure yes/no- e.g.Scene 2 harbour | Kling 2.5 Pro | establishing shot | 00:04:12:07 | no. These appear clearly marked as MANUAL ENTRIES, not machine-verified. Good to know: the author deliberately doesn't have you re-enter Kling/Veo runs that were already captured as API nodes in the workflow.
The single output is pdf - the path to the combined document, written as PROJECT_VALYDA-AI-PROTOCOL_... into the production folder so it doesn't get confused with per-clip files. Internally it sorts clips by timecode (else by creation time), and where records disagree on broadcaster or publication channel, it names the dissent instead of quietly picking one.
Running it right
It has no inputs, so ComfyUI would normally skip it as "unchanged" - the node forces a re-run every time via its change-detection hook, so it always picks up newly arrived records. But don't put it in your generating workflow and hit the big Run button: your clips would re-render (costing you again) and the same clip would appear twice in the record. Instead, either give it its own tab and press its run button, or mute the generating nodes with Ctrl+M and run. The README is explicit: record at least one clip first, because the node needs a production folder to read.
Install and gotchas
ComfyUI Manager: search "Valyda-Protocol". Or clone + pip install -r Valyda-Protocol/requirements.txt (just reportlab and Pillow - no models, no GPU, no network). The pack's honest limits apply here too: it documents how you worked, it does not detect AI in other people's footage, and the sheet is a producer's self-declaration, not a proof of authenticity. If a clip shows up twice, open the production folder and delete the later valyda_<date>_<time>_<id> file stem, then re-run. And keep the JSON records next to the PDFs - they're the machine-readable half of the same evidence.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| Production | COMBO | The production whose records are combined into ONE document - the choices are the existing folders under output/valyda, newest first. The list refreshes itself when the node is clicked; if a fresh project is missing, press Ctrl+F5 in the browser. | |
| Producer | STRING | Production company. Left empty: taken from the records if they agree unanimously, otherwise 'not stated'. | |
| Co_Produceropt | STRING | Co-producing company, if any. Left empty: taken from the records if they agree unanimously; appears on the record only when filled. | |
| Rights_Holderopt | STRING | Rights holder of the PRODUCTION - not the software rights holder named in the footer. Left empty: taken from the records if they agree unanimously. | |
| Reference_Fileopt | STRING | Full path of the final master this record refers to - usually the broadcast cut. If the file exists, its checksum is taken. | |
| Versionopt | STRING | Which cut this record refers to, e.g. 'final cut v3' or 'broadcast cut R3'. | |
| Multiple_Runsopt | COMBO | keep all clips / alle behalten | If a shot was rendered several times, there are several records for it. 'newest clip per scene' keeps only the latest of each - provided the scene is spelled identically. |
| Outputopt | COMBO | both / beide | Which edition to write. 'both' delivers the Creator sheet AND the Broadcast record from the same material. |
| External_1opt | STRING | Items created OUTSIDE ComfyUI (Photoshop, Topaz, DaVinci - or one of the cloud services in its own web app instead of as a node). Format: Scene | AI system | Reason | Timecode | disclosure yes/no Example: Scene 2 harbour | Kling 2.5 Pro | establishing shot | 00:04:12:07 | no Appears in the document as a MANUAL ENTRY, not machine-verified. | |
| External_2opt | STRING | same as External_1 | |
| External_3opt | STRING | same as External_1 | |
| External_4opt | STRING | same as External_1 | |
| External_5opt | STRING | same as External_1 | |
| Records_Folderopt | STRING | Escape hatch for special cases: folder holding the records, as a relative sub-path underneath output/valyda (sub-folders and several levels are fine). Absolute paths, drive letters and ".." are refused. Leave empty - then the selection above applies. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | — |