BytePlus Image Quality Enhance
An upscaler for the photos local models keep hallucinating
- image
- IMAGE
- original
- response
Upscaling is the one job where the local stack is genuinely split. A GAN upscaler (Real-ESRGAN and friends) is fast, predictable and adds nothing you didn't ask for - and it can't invent the detail that isn't there. A diffusion-style restorer like SeedVR2 or SUPIR can rebuild texture, but it also invents faces and invents text, and on a soft source you end up with a plausible lie. This node sits on the other side of that tradeoff: BytePlus's AI MediaKit performs super-resolution, denoising, deblurring and sharpening as a hosted call, and for AIGC post-processing, old-photo restoration or OCR input it will often beat what you'd get locally in one pass.
The honest caveat first: this is a paid API call and your image leaves your machine. It's the wrong tool for anything the closed model would refuse, and it's the wrong tool if you'd rather own the pipeline. It's the right tool when the alternative is a four-node local chain you have to babysit.
How it works
There's no sampler here and nothing to download. A connected image is encoded and uploaded to Comfy.org storage (needs a Comfy.org login), then MediaKit's synchronous enhance-image endpoint does the work and returns a URL, which the node downloads immediately - MediaKit links expire after 24 hours, so the node can't just hand you a link and walk away. A batch is processed per image, in parallel, and the results are restacked into one tensor; if the enhanced images come back at different sizes, later ones are resized to match the first so the batch survives.
The two inputs you actually set
tool_versionis the whole decision.standarddoes fast clean-up at up to 8x and always returns PNG - thumbnails, UGC, OCR input.professionalgoes up to 30x with fine texture, for AIGC fixes, product and portrait shots, old photos.maxis a generative model at up to 30x for badly degraded sources, and it's the slow one. Pickprofessionalormaxand two extra fields appear:generative_enhance_mode(generative_firstfor richer texture on compressed or blurry images,fidelity_firstto keep faces, text and texture close to the original) and, onmaxonly,enable_correct_color. The README is explicit that pricing differs per version, somaxon a batch of fifty is a budgeting decision.output_sizechooses between scaling by amultiple(default 2x) or naming atarget_width/target_height. Limits are checked before upload, which is the behaviour you want: you find out immediately instead of after a 30x bill.imageorimage_url- one or the other. The URL path is a public http(s) link to a png/jpg/jpeg/webp under 10 MB, and it skips the Comfy.org upload completely.
Outputs are IMAGE (the enhanced result), original (your input resized to the enhanced size) and response (MediaKit's JSON). The original output exists for one reason: feed it and IMAGE into ComfyUI's Compare Images slider and you can see what actually changed instead of squinting.
Install and key
cd ComfyUI/custom_nodes
git clone https://github.com/byteplus-sa/ComfyUI-BytePlus-ModelArk
pip install -r ComfyUI-BytePlus-ModelArk/requirements.txt
Restart (ComfyUI 0.31.0+), or install from Manager by searching BytePlus ModelArk. MediaKit has its own key, separate from the ModelArk key - create it in the AI MediaKit console and save it in Settings → BytePlus, or as BYTEPLUS_VOD_MEDIAKIT_API_KEY in user/.env. MediaKit runs in ap-southeast-1 only, so don't bother switching region for it.
Where people get burned
The Comfy.org login catches everyone who connects a local file the first time. If you don't want to log in, host the image and use image_url.
Then there's the conceptual trap: people wire this in expecting a general-purpose upscaler for generative output. It is very good at restoration - softening artefacts, recovering text, cleaning a JPEG - and it isn't a detail-invention engine the way a diffusion upscaler is. There's also a warning in the pack's own logging when max gets a large source: it's slow, and the recommendation is to keep sources sensible rather than throwing an 8K scan at it. For source material whose damage is the actual problem rather than its size, the local SeedVR2 + edit-model recipe is still cheaper per call; this node wins on one-pass convenience and on not knowing how to upscale at all.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| tool_version | COMBO | 'standard' (up to 8x, PNG output): fast clean-up for thumbnails, UGC and OCR input. 'professional' (up to 30x): fine texture for AIGC fixes, product and portrait photos, old photos. 'max' (up to 30x): a generative model for the most detail on low-quality images. Pricing differs per version. | |
| output_size | COMBO | Scale by a factor, or set a target width and/or height. | |
| imageopt | IMAGE | Image(s) to enhance; each image in a batch is enhanced separately. Uploaded to Comfy.org storage first (needs a Comfy.org login); or set image_url instead. | |
| image_urlopt | STRING | Public http(s) link to the image (png, jpg, jpeg or webp, up to 10 MB), instead of connecting an image. Nothing is uploaded to Comfy.org. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | The enhanced image(s). |
| original | IMAGE | The input resized to the enhanced size; connect it and the enhanced image to Compare Images for a slider. |
| response | STRING | The MediaKit result as JSON (a list for a batch). |