Nodes/ComfyUI-EbSynth/ES Translate
ComfyUI Node

ES Translate

Restyle any single image with EbSynth's engine — ES Translate

By FuouM·Created 2 years ago·Updated about a year ago· 111
ES Translate
  • style_image
  • source_image
  • target_image
  • src_imgs
  • tgt_imgs
  • result_img
  • error_img
weight0.90
uniformity3500.00
patch_size5
pyramid_levels6
search_vote_iters12
patch_match_iters6
extra_pass_3x3true
wgts

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.

CategoryEbSynth

Inputs (13)

NameTypeDefaultDescription
style_imageIMAGE
source_imageIMAGE
target_imageIMAGE
weightFLOAT0.90
uniformityFLOAT3500.00500–15000
patch_sizeINT5
pyramid_levelsINT6
search_vote_itersINT12
patch_match_itersINT6
extra_pass_3x3BOOLEANtrue
src_imgsoptIMAGE
tgt_imgsoptIMAGE
wgtsoptSTRING

Outputs (2)

NameTypeDescription
result_imgIMAGE
error_imgIMAGE