🐟Camera Watermark
Stamp your gens with a fake camera info bar — model, GPS, timestamp and all
- IMAGE
At zero impressions you're probably the first person reading this, so: this node renders the little EXIF info bar you see at the bottom of phone photos - camera model, timestamp, lens settings, GPS coordinates - as a clean ComfyUI IMAGE. It's the "make your AI image look like it was actually shot on a phone" node, and honestly that's a niche with a real audience.
If you generate photorealistic images and want that "shot on iPhone by a person who was there" feel, a believable camera watermark does a lot of heavy lifting. You overlay the bar along the edge of a generated image and suddenly it reads as a real capture. It's also just fun to make fake "shot on" lines for a joke or a mockup.
How it works
Same Selenium engine as the rest of this pack, one template. The node renders templates/camera_watermark/template.html with your values, base64-encodes the HTML into a data:text/html URL, opens it in headless Chrome, and screenshots just the #preview-info element. So what you get is a wide, short bar - the height is baked into the template and scales with the width, which is why the only size input is width (64–2048). You set the width, the bar keeps its proportions.
The inputs (all required, all editable)
- model - the camera name, default
COMFYUI ULTRA. This is the line that shows in bold. - date - a timestamp string in
YYYY.MM.DD HH:MM:SSformat. Defaults to the current time when you load the node, so it goes stale if you leave the workflow open. - brand - a dropdown, and this one's clever: it's auto-generated from the logo files in the pack's
brand/folder. You get whatever's shipped: apple, canon, sony, leica, fujifilm, xiaomi, huawei, dji, nikon corporation, plus a couple of oddballs likeliuqianhong. The list rebuilds at startup from whatever files are there. - device - the settings line, default
23mm f/1.0 1/320 ISO1495. Pure text; the node doesn't validate it against anything. - gps - coordinates, default
51°30'00"N 0°10'00"E. Also pure text. Nobody checks.
Output
One IMAGE - the rendered bar. Composite it onto your photo with an Overlay/Composite node, position it along the bottom, done.
Customizing it
Want your own brand? Drop an SVG or PNG into the pack's brand/ directory (name it after the brand) and restart ComfyUI - the dropdown picks it up automatically. Want to change the layout, fonts, or colors? The template is plain HTML you can edit. Fair warning: the README tells you to look in template/camera_watermark/template.html, but the real path is templates/camera_watermark/template.html (with an s). Classic README rot.
Installing
Same as the whole pack: ComfyUI Manager → search "ComfyUI-Html2Image", or
cd ComfyUI/custom_nodes
git clone https://github.com/liuqianhonga/ComfyUI-Html2Image.git
pip install -r requirements.txt
then restart. Dependencies: selenium, webdriver_manager, jinja2, Pillow. And the pack-wide gotcha that applies here too: you need Google Chrome installed. Selenium launches a real Chrome binary - webdriver_manager only fetches the chromedriver, not the browser.
Troubleshooting
- A brand is missing from the dropdown - there's no matching logo file in
brand/, or you added one after startup (restart required). - Watermark renders tiny or cropped - it's a bar, not a full image; that's by design. If it looks off, drop
widthand composite at a smaller scale. - Date is wrong - you loaded the node yesterday and left it there; edit the field.
- First run is slow - one-time chromedriver download.
It's a one-trick pony, but it's a decent trick. If you've ever wanted to caption a generated photo "COMFYUI X1 ULTRA" with GPS coordinates for a place you've never been, this is your node.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| model | STRING | COMFYUI ULTRA | — |
| date | STRING | 2026.07.20 18:59:45 | — |
| brand | COMBO | liuqianhong | 11 options: xiaomi, huawei, fujifilm, unknow, apple, sony, +5 |
| device | STRING | 23mm f/1.0 1/320 ISO1495 | — |
| gps | STRING | 51°30'00"N 0°10'00"E | — |
| width | INT | 128064–2048 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |