Nodes/comfyui-imgmake/ebsynth_process
ComfyUI Node

ebsynth_process

The node that writes EBSynth's homework — and then makes you run it

By dafeng012·Created 2 years ago·Updated 2 years ago· 17
ebsynth_process
    • info
    project_dir
    original_movie_path
    mask_mode
    is_invert_maskfalse

    ebsynth_process is the middle of the EBSynth pipeline wearing a smaller coat. Where ebsynth_main runs every stage from one node, this one does exactly one thing: it takes a project where the frames, masks, and keyframes already exist, and writes the .ebs project files that the EBSynth app needs. It's stage 5, isolated.

    So why reach for it? Because you don't always want the whole one-node pipeline. Maybe you built your keyframes by hand, or you used a different masking tool, or you're scripting a long batch and don't want to re-run frame extraction every time. ebsynth_process assumes the project folders are already populated and just hands the baton to EBSynth.

    How it works

    The node takes project_dir and original_movie_path, then assembles a project from the folders inside the project dir. It expects the standard layout the pack produces: video_frame/ (your frames), video_key/ (the original keyframes), and img2img_key/ (your painted keyframes) - with img2img_upscale_key/ preferred if present. It writes timestamped .ebs files, chunked so each one is manageable for EBSynth to chew.

    That's the whole node. It returns one STRING, info, with a dump of what it was given and which .ebs files it exported.

    The inputs that matter

    • project_dir - the project folder. Everything else is derived from it.
    • original_movie_path - the source video. EBSynth needs it to reconstruct the frames.
    • mask_mode - None or Invert. Invert means the masks get inverted and everything is written under an inv/ subfolder (the classic trick for masking the background instead of the subject).
    • is_invert_mask - same idea as a boolean; set either this or mask_mode = Invert, not both.

    Nothing fancy. If you already know EBSynth, this is the part of the old ebsynth_utility extension that exported projects.

    The critical catch

    This node does not run EBSynth. Python can't call the desktop app from here - the pack never shells out to an ebsynth binary anywhere. After ebsynth_process finishes, you open the generated .ebs files in the EBSynth app (ebsynth.com, free) and run them. EBSynth processes each project and writes an out-* folder into the project dir. Only then do you run ebsynth_hecheng (the merge/export node) to turn that output back into a video.

    People who treat this like a normal ComfyUI node hit a wall here: the graph finishes, "success", and nothing happened. That's by design - the actual style propagation happens in EBSynth's own GUI, between the two halves of this pack.

    Installing it

    Same pack install as everything else in comfyui-imgmake - ComfyUI Manager (search comfyui-imgmake) or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/dafeng012/comfyui-imgmake
    

    Restart, then remember the two non-Python requirements from the README: ffmpeg on your PATH and EBSynth installed. requirements.txt adds transformers and transparent_background, which you'll only actually need for the masking stages - this node itself barely imports anything heavy.

    Troubleshooting

    • "No .ebs files appeared" - check info for the paths it used. If img2img_key/ doesn't exist or the keyframes' dimensions don't match the frames, stage 5 bails with a message like no key frame. Run stage 1/2 first, or point it at a complete project.
    • EBSynth errors on open - the .ebs file references paths by relative directory names, so don't rename folders inside the project between export and run.
    • Everything's in inv/ - you left mask_mode at Invert. That's intentional for background-replacement workflows; the merge node must be told the same thing.
    CategoryIMAGEmake

    Inputs (4)

    NameTypeDefaultDescription
    project_dirSTRING
    original_movie_pathSTRING
    mask_modeSTRING
    is_invert_maskBOOLEANfalse

    Outputs (1)

    NameTypeDescription
    infoSTRING