Simple Readable Metadata (VIDEO)-SG
Read prompts and seeds out of an mp4, not just a PNG
- Simple_Readable_Metadata
- frames
- mask
- frame_count
- fps
- filename_text
- metadata_raw
- Positive_Prompt
- Negative_Prompt
- seed
Video generation broke the "workflow included" promise for a while. Images carry their recipe in PNG chunks, but mp4 containers weren't designed for that - the workflow gets stashed in an obscure metadata tag, and nobody reads it because nobody knows where to look. SimpleReadableMetadataVideoSG knows where to look. It's the pack's image-metadata reader, extended to mp4 and webm: load a video, get a readable summary of the prompt, model, LoRA, seed, steps, CFG, sampler, and scheduler, plus the frames themselves.
How it works - this one's genuinely interesting
The video node runs two tools in tandem. First, it shells out to ffprobe (the metadata companion to ffmpeg) to read the container's format and stream tags, hunting for keys like comment, prompt, workflow, description, or user_data - this is where ComfyUI video outputs (and Wan/LTX pipelines that save via ffmpeg) stash the workflow JSON. Whatever it finds gets parsed into the same readable format as the image nodes. Second, it uses OpenCV (cv2.VideoCapture) to actually open the file and extract frames, converting them to ComfyUI IMAGE tensors. The PIL-based fallback in the source also means it can pull metadata out of webp/apng/gif too, if you throw one at it.
That's why the node's four inputs exist. force_rate (target FPS, 0 = original) lets you downsample frame extraction by stepping instead of reading every frame. max_frames (0 = all) caps how many frames you load - a hard necessity on long videos, since every frame is a full image in RAM. resize_long_edge (0 = original) downscales the longest side so you don't blow up VRAM loading a 4K source just to read its seed. Leave all three at 0 for short clips; set them for anything long.
The outputs
The star is Simple_Readable_Metadata (STRING) - the readable summary. Alongside it: frames (an IMAGE sequence you can feed straight into img2vid or a frame-preprocessing chain), mask, frame_count and fps (INT), filename_text, metadata_raw, Positive_Prompt/Negative_Prompt, and seed. Same idea as the image node - read the recipe, and if you want, act on it.
Installing
One-time pack setup:
cd ComfyUI/custom_nodes
git clone https://github.com/ShammiG/ComfyUI-Simple_Readable_Metadata-SG.git
cd ComfyUI-Simple_Readable_Metadata-SG
pip install -r requirements.txt # opencv-python
Or Manager → Custom Nodes Manager → search Simple Readable Metadata-SG → install → restart.
The dependency trap: the pack's requirements file ships only opencv-python. ffprobe is invoked as an external command, which means it must be on your system PATH. Most ComfyUI installs have ffmpeg around somewhere - but if you run a stripped-down portable build or a container without it, the node will happily extract frames while silently failing to find any metadata. If you see frames but "no metadata," that's your first suspect: install ffmpeg (winget install ffmpeg on Windows, apt install ffmpeg on Linux, or pip install imageio-ffmpeg and put its binary on PATH), then restart.
Pitfalls
- The Node 2.0 warning applies here more than anywhere: on ComfyUI 0.3.76+, switch it OFF or the video display breaks.
- Long videos, big RAM.
max_framesisn't optional decoration - a 30-second clip at 30fps is 900 full-res tensors. Cap it if you only need metadata. - Not every video generator embeds a workflow in a way this node's key list covers. If a particular pipeline's output comes back empty, that's a tag-naming mismatch, not a broken install.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| video | COMBO | 1 options: example.png | |
| force_rate | INT | 00–60 | Target FPS. 0 = Original. |
| max_frames | INT | 00–10000 | Limit total frames. 0 = All. |
| resize_long_edge | INT | 00–4096 | Resize longest side. 0 = Original. |
| emoji_in_readable_text | BOOLEAN | true | — |
Outputs (10)
| Name | Type | Description |
|---|---|---|
| Simple_Readable_Metadata | STRING | — |
| frames | IMAGE | — |
| mask | MASK | — |
| frame_count | INT | — |
| fps | INT | — |
| filename_text | STRING | — |
| metadata_raw | STRING | — |
| Positive_Prompt | STRING | — |
| Negative_Prompt | STRING | — |
| seed | INT | — |