Nodes/ComfyUI-EasyOCR/Apply EasyOCR
ComfyUI Node

Apply EasyOCR

The node that actually reads the words in your image

By prodogape·Created 2 years ago·Updated 2 years ago· 53
Apply EasyOCR
  • image
  • IMAGE
  • MASK
  • JSON
gputrue
detectchoose
language_listEnglish
language_namech_sim,en

Most ComfyUI nodes move pixels around and hope. Apply EasyOCR is the rare one that reads: it detects every text region in your image, recognizes what the words say, and hands you three outputs - an annotated image, a mask, and the text as structured data. It's the whole EasyOCR Python library (the Jaided AI one) wrapped into a single node, and it ships in the prodogape/ComfyUI-EasyOCR pack.

The name isn't a lie and there's no API key or cloud call involved - everything runs locally. When would you reach for it? Most people find this node the way r/comfyui finds it: building an automated watermark/logo removal pipeline. OCR the image, grab the MASK, feed it into an inpainting node, and text disappears without you hand-masking hundreds of product photos. It's also genuinely useful for captioning pipelines (the JSON output is labelme-format, made for annotation datasets) and for cleaning scanned documents before they go through a detailer.

How it works

Under the hood it's textbook EasyOCR. The node takes your batch of images, converts each frame to a PIL/numpy array, spins up an easyocr.Reader for the languages you asked for, and calls readtext(). That call runs two stages: CRAFT detects text regions as boxes, then the recognition model reads the characters inside each box. Detection and recognition model files (craft_mlt_25k.pth, latin_g2.pth, zh_sim_g2.pth, …) download automatically on first use into ComfyUI/models/EasyOCR/ - that's why your first run hangs for a while. It's a portable, CPU-friendly library that also runs happily on GPU.

The inputs that matter

Only five inputs, and honestly two of them decide everything:

  • language_list / language_name - the two language controls. The dropdown (language_list) has 44 entries including 简体中文, 繁體中文, Japanese, Korean, Cyrillic, Thai and so on; the text field (language_name, default ch_sim,en) takes comma-separated EasyOCR language codes directly. The detect enum switches between them: set it to choose and it uses the dropdown, set it to input and it parses the code string. If you speak one language, leave it alone and it just works.
  • gpu - boolean, default true. Set it to false if you're on CPU-only or hitting VRAM pressure; EasyOCR runs fine on CPU, just slower.
  • image - any IMAGE tensor. It loops over every frame in the batch, so a batch of N images gets N OCR passes.

The outputs and where they go

The trio is the whole point:

  • IMAGE - your original image with red rectangles drawn around every detected text box, plus the recognized text and its confidence score painted above each box. This is the "show me it worked" output.
  • MASK - white rectangles on black, exactly covering the detected text. This is the output that makes the watermark-removal pipeline work: wire it into an inpainting node and the text regions get repainted.
  • JSON - labelme-format data with each shape's bounding box points, the recognized label, and the confidence. Pipe it into whatever tooling you use for annotations or captions.

Installing it

ComfyUI Manager - search "ComfyUI-EasyOCR" and install. Or do it by hand:

cd ComfyUI/custom_nodes
git clone https://github.com/prodogape/ComfyUI-EasyOCR

Then restart ComfyUI. The node auto-installs its Python dependencies on startup via requirements.txt (the pack's only real dependency is easyocr, but that pulls in opencv, scipy, shapely, pyclipper and friends, so the install is chunkier than it looks). If you installed outside Manager and the auto-install didn't fire, run pip install easyocr in ComfyUI's embedded Python yourself.

Gotchas worth knowing

  • Models re-download and reload on every execution. The Reader is constructed inside each call, not cached, so every run pays the model-load cost - and a batch of N images pays it N times. Fine for single images; slow for bulk cleanup. It's the node's biggest wart.
  • Detection isn't magic. As one r/comfyui watermark-removal thread put it: EasyOCR "works for detecting text, but sometimes it misses stylized logos or semi-transparent watermarks." If your logos are fancy or faint, the mask will have gaps and you'll be patching them manually. CRAFT is good at text, not at brandmarks.
  • First run feels broken. It isn't - it's downloading models. Watch ComfyUI/models/EasyOCR/ fill up. If you're behind a restrictive firewall, that download can silently stall, and this node doesn't expose EasyOCR's download_enabled flag, so the fix is fetching the .pth files manually.

Read the words, take the mask, inpaint, done. It's one of those small single-purpose nodes that quietly powers entire automated workflows.

CategoryComfyUI-EasyOCR

Inputs (5)

NameTypeDefaultDescription
imageIMAGE
gpuBOOLEANtrue
detectCOMBOchoose2 options: choose, input
language_listCOMBOEnglish44 options: English, 简体中文, 繁體中文, العربية, Azərbaycan, Euskal, +38
language_nameSTRINGch_sim,en

Outputs (3)

NameTypeDescription
IMAGEIMAGE
MASKMASK
JSONJSON