ES Translate
Restyle any single image with EbSynth's engine — ES Translate
- style_image
- source_image
- target_image
- src_imgs
- tgt_imgs
- result_img
- error_img
ES Translate is the image side of the ComfyUI-EbSynth pack - the single-frame cousin of ES Video Transfer. Where the video node propagates style across a clip, this one takes three images and returns one: the source image, restyled. It's the cleanest way to try the whole EbSynth idea without touching video, and it's a genuinely underrated tool for forcing two images into the same look.
What the three inputs mean
This is the classic EbSynth "ImageSynth" setup, and the naming trips people up, so get this straight:
- source_image - the original. This is the image your style actually matches.
- style_image - a version of the source that has the look you want: img2img output, a ControlNet stylized pass, a hand-paint job, whatever.
- target_image - the image you actually want transformed. EbSynth figures out how source became style and applies that same transformation to target.
The classic example is shading: you have a "full-gi" (global illumination) render as source, a painted version of it as style, and a second render as target - EbSynth carries the painted shading across. Same trick works for matching a character's face or outfit across two photos, or for stylizing one frame to match a video's keyframes.
How it works
Same engine as the video node, minus the flow: the bundled ebsynth.dll runs patch-based matching between source and style, guided by the optional guide pairs you feed in, and reconstructs the target. No diffusion model at runtime, no VRAM cliff, just a fast C library doing texture synthesis.
weight (default 0.9) is the master dial - how strongly the style dominates. The rest of the required inputs are the shared EbSynth generation params (uniformity, patch_size, pyramid_levels, search_vote_iters, patch_match_iters, extra_pass_3x3). Leave them alone; the author's own line is that defaults work for most cases.
Outputs and the optional guide inputs
You get result_img (the restyled image) and error_img (where it struggled - useful for judging quality at a glance).
The three optional inputs - src_imgs, tgt_imgs, wgts - are where this node becomes powerful. They take guide pairs, the "in this region, source should look like target" constraints that classic EbSynth users add as depth maps or directional light maps. You can hand-build them, or just wire them straight from the pack's ES Guides 7 node, which packages up to seven guide pairs into exactly these three outputs. Note wgts is a serialized string, not a number - don't try to plug a float into it.
Install and gotchas
Same pack as the rest: git clone --recurse-submodules https://github.com/FuouM/ComfyUI-EbSynth.git in ComfyUI/custom_nodes, then pip install -r requirements.txt. Or search "ComfyUI-EbSynth" in ComfyUI Manager. The --recurse-submodules is non-negotiable - the engine lives in the Ezsynth submodule.
Two things that will bite you: images need to be aligned and reasonably similar in structure, or the patch matching produces mush; and the physics-based edge detection can spit out NaN if an input is mostly zeros (a black frame), which is an upstream Ezsynth quirk, not something you're doing wrong. On Linux, remember the bundled binary is Windows-only - you'll need to build ebsynth.so before any node in this pack runs.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| style_image | IMAGE | — | |
| source_image | IMAGE | — | |
| target_image | IMAGE | — | |
| weight | FLOAT | 0.90 | — |
| uniformity | FLOAT | 3500.00500–15000 | — |
| patch_size | INT | 5 | — |
| pyramid_levels | INT | 6 | — |
| search_vote_iters | INT | 12 | — |
| patch_match_iters | INT | 6 | — |
| extra_pass_3x3 | BOOLEAN | true | — |
| src_imgsopt | IMAGE | — | |
| tgt_imgsopt | IMAGE | — | |
| wgtsopt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| result_img | IMAGE | — |
| error_img | IMAGE | — |