Smart Border & Frame
Give a generation a real frame — polaroid, film strip, the lot
- input_image
- framed_image
There's a moment in every image workflow where the output stops being "a render" and needs to look like a photo - for a portfolio, a post, or just to make the thing presentable. Smart Border & Frame is the Niutonian Smart Image Suite's answer: one node that wraps a single IMAGE in a border, and unlike the bare "add a few pixels of white" nodes, it has actual frame styles. Seven of them, from a plain border to a film strip with perforations.
It's pure Pillow under the hood - no models, no API, nothing to download. It's also the rare node in this suite where the fancier features genuinely work, not just render as nameplates.
How it works
frame_style is the headline control. simple, classic, modern, and vintage vary the border construction (classic adds an inner line, vintage layers in a subtle texture). polaroid gives the classic big-bottom-border look with the image sitting in the top portion. film draws a strip with perforation holes along the sides - the "I shot this on film" aesthetic. none passes the image through untouched.
From there you tune it: border_width (0–200, step 2) and border_color (white/black/gray/custom, with custom_color_r/g/b sliders when you pick custom). corner_style gives square, rounded, or beveled corners - rounded and beveled use corner_radius to control the cut. classic draws a matted double border and picks up inner_border_width and inner_border_color (white/black/gold/silver); modern is a minimalist asymmetric frame with a thicker bottom edge; vintage layers a brown inner line with gold corner dots.
Shadows are where this node pulls ahead of a plain border. shadow_enabled adds a drop shadow sized by shadow_blur, offset by shadow_offset, and faded by shadow_opacity. It's a soft, blurred-copy shadow - fine for presenting a single image, not a print-accurate one. The output is framed_image (IMAGE), ready for a Save Image.
Inputs that matter for a beginner
frame_style- pickpolaroidorfilmfirst; they look the most "done."border_widthandborder_color- the everyday knobs.shadow_enabled- the single highest-impact toggle after the style itself.corner_radius- only visible/needed whencorner_styleisn'tsquare.
Everything else is optional tuning; the defaults are sane.
Installing and gotchas
Standard pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/Niutonian/comfyui-niutonian-smart-image
Restart, and it lives under Niutonian/Image Processing. No extra dependencies - this node is pure Pillow, so it works even if you haven't installed the pack's optional OpenCV dependency.
Two honest caveats. The suite is young (single initial commit, early 2026), so the "vintage" texture is a simple effect rather than a print-quality finish. And because the node takes one input image, if you want to frame a batch you either loop it or pair it with Smart Batch Processor's add_borders mode from the same pack. For a single hero image that needs to look finished, this is the quickest path from "generated" to "posted."
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| input_image | IMAGE | — | |
| frame_style | COMBO | simple | 7 options: none, simple, classic, modern, vintage, polaroid, +1 |
| border_width | INT | 200–200 | — |
| border_color | COMBO | white | 4 options: white, black, gray, custom |
| corner_style | COMBO | square | 3 options: square, rounded, beveled |
| shadow_enabled | BOOLEAN | false | — |
| shadow_blur | INT | 100–50 | — |
| shadow_offset | INT | 50–30 | — |
| shadow_opacity | FLOAT | 0.50–1 | — |
| custom_color_ropt | INT | 1280–255 | — |
| custom_color_gopt | INT | 1280–255 | — |
| custom_color_bopt | INT | 1280–255 | — |
| corner_radiusopt | INT | 100–50 | — |
| inner_border_widthopt | INT | 50–50 | — |
| inner_border_coloropt | COMBO | gold | 4 options: white, black, gold, silver |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| framed_image | IMAGE | — |