Shot by Image - Custom Coordinates
Pixel-level product placement
- image
- ref_image
- output_image
ShotByImageCustomCoordinates (shown as Shot by Image - Custom Coordinates) is the most surgical node in the product-shot family. Where the Manual Placement nodes offer ten named positions, this one lets you type the product's exact size and location on the canvas as pixel values. If you need the product at precisely x=100, y=300, sized 400×400 on a 1000×1000 shot, this is the node.
It's the layout tool for when a composition is a spec, not a suggestion. Think brand guidelines: the logo/bottle/shoe has to sit in a specific zone of the frame, at a specific scale, for every asset in a campaign. Manual Placement gets you close; this gets you exact.
How it works
Inputs: image (product), ref_image (scene reference), and three strings that define the composition:
- shot_size (default
1000, 1000) - the output canvas,width, heightin pixels. - foreground_image_size (default
500, 500) - the rendered size of the product,width, height. - foreground_image_location (default
0, 0) - the position, asx, ycoordinates.
The node parses these comma-separated strings into integers and calls Bria's /v1/product/lifestyle_shot_by_image endpoint with the custom_coordinates placement type, then builds the scene around that pinned placement. Shared controls apply: enhance_ref_image (default true), ref_image_influence (0–1, default 1.0), force_rmbg, content_moderation. One output: output_image.
Installing it
Part of the BRIA AI API nodes pack (Bria-AI/ComfyUI-BRIA-API). ComfyUI Manager → search BRIA API → install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Bria-AI/ComfyUI-BRIA-API
Restart ComfyUI; it's under API Nodes. No models, no GPU - cloud call needing a BRIA API token from platform.bria.ai, billed per generation.
Practical notes
Three gotchas. First, the fields are comma-separated strings with a default of 0, 0 for location - and (0,0) is the top-left corner of the image, so an unedited location piles the product into the corner. Set it deliberately. Second, coordinates and size interact: a product sized larger than the canvas, or placed so it hangs off the edge, will get you a product that's partly out of frame. Third, the product can bleed into the background generation - if the model draws scene elements over your placement, flip force_rmbg on so the product stays a clean, composited cutout. When it works, though, it's the most reproducible node in the family: same coordinates, same seed, same layout, every time.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | BRIA_API_TOKEN | — |
| image | IMAGE | — | |
| ref_image | IMAGE | — | |
| shot_size | STRING | 1000, 1000 | — |
| foreground_image_size | STRING | 500,500 | — |
| foreground_image_location | STRING | 0, 0 | — |
| force_rmbgopt | BOOLEAN | false | — |
| content_moderationopt | BOOLEAN | false | — |
| enhance_ref_imageopt | BOOLEAN | true | — |
| ref_image_influenceopt | FLOAT | 1.000–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| output_image | IMAGE | — |