How to run IOPaint inpainting and object removal on a cloud GPU
Rent a GPU on Deploy, then open a terminal in JupyterLab or over SSH. Install IOPaint from the official Sanster/IOPaint repository the way the README prints, let the start command download the model it names, and open the web UI through an SSH tunnel. Copy the output images off the instance before you destroy it, because destroying the instance deletes its disk.
Background removal from a different repository, whose README prints 3.45GB, 3.5GB, 4.8GB, and 5.5G in separate sentences, is How to remove image backgrounds with BiRefNet on a cloud GPU. The Real-ESRGAN script, whose README prints no GB figure, is How to upscale images and video with Real-ESRGAN on a cloud GPU. A different upscaler, whose README comment prints 12G and 16G, is How to upscale images with SUPIR on a cloud GPU. The GFPGAN script, whose README also prints no GB figure, is How to restore faces with GFPGAN on a cloud GPU. The tunnel for port 8080 is How to use SSH port forwarding on a cloud GPU. If the process runs out of memory: How to fix CUDA out of memory on a cloud GPU.
The repository LICENSE file is the Apache License, Version 2.0, January 2004. The appendix copyright line is still the unfilled template Copyright [yyyy] [name of copyright owner]. setup.py sets version to 1.6.0, python_requires to >=3.7, and a classifier for the Apache Software License. The GitHub license field on 2026-11-13 was Apache-2.0. Read the file before you redistribute the program.
The commands below are copied from the upstream files named in each step. They were not run on a CloudGPU instance for this page. Anything this page adds around them is marked.
What the README says about memory
The README, iopaint/cli.py, iopaint/const.py, iopaint/schema.py, and iopaint/batch_processing.py print no GPU GB figure (read 2026-11-13). CPU_OFFLOAD_HELP says offloading a diffusion model’s weight to CPU RAM reduces vRAM usage and does not print a number. LOW_MEM_HELP says attention slicing and vae tiling save memory and does not print a number. The models page at https://www.iopaint.com/models, read the same day, has a sentence about saving memory during service startup. The same paragraph has a sentence about directory size. This page does not copy that sentence. This page did not remeasure any of those lines.
GET /v1/public/compute-capabilities does not list GPUs. It returns feature flags. The memory column is vram_gb from gpu-prices.json, updated_at 2026-11-13T11:07:05.801Z. GET /v1/public/gpu-catalog the same day (generated_at 2026-11-13T11:07:06.881Z) listed the same names and the same vram_gb values, plus Ascend 910B at 64, which is not in gpu-prices.json and is not listed here. The catalog response also includes an availability field. This page does not copy it. Every prices row has gpu_count 1. There is no upstream GB cutoff to match these values against. The smallest vram_gb in that file is 8, on RTX 2080. Catalog RTX 4090 is 24. This page did not run IOPaint and does not mark a row as enough. Which listing you can start is on Deploy.
The catalog template list had no IOPaint template.
| Catalog name | vram_gb |
|---|---|
| RTX 2080 | 8 |
| RTX 3080 | 10 |
| RTX 2080 Ti | 11 |
| RTX 3080 Ti | 12 |
| V100 16G | 16 |
| A30 | 24 |
| RTX 3090 | 24 |
| RTX 4090 | 24 |
| RTX 4090D | 24 |
| RTX 4080 SUPER 32G | 32 |
| RTX 5090 | 32 |
| RTX 5090D | 32 |
| V100 32G | 32 |
| A100 40G | 40 |
| A800 40G | 40 |
| A40 | 48 |
| RTX 4090 48G | 48 |
| RTX 4090D 48G | 48 |
| RTX A6000 | 48 |
| NVIDIA RTX PRO 5000 72G | 72 |
| RTX PRO 5000 72G | 72 |
| A100 80G | 80 |
| A800 80G | 80 |
| H800 | 80 |
| RTX 6000D | 83 |
| H20 96G | 96 |
| RTX PRO 6000 96G | 96 |
| RTX PRO 6000 Max-Q | 96 |
| H20-3e 141G | 141 |
Install
On Deploy, choose Raw GPU. The README’s install and start block, copied. The first comment says to install a CUDA build of PyTorch in order to use a GPU. The commented pin under it is torch==2.1.2 and torchvision==0.16.2 on the cu118 index. A second commented install names a different GPU vendor. This page does not copy that line.
# In order to use GPU, install cuda version of pytorch first.
# pip3 install torch==2.1.2 torchvision==0.16.2 --index-url https://download.pytorch.org/whl/cu118
pip3 install iopaint
iopaint start --model=lama --device=cpu --port=8080
iopaint/cli.py defaults host to 127.0.0.1 and port to 8080. schema.py defines Device as cpu, cuda, and mps. The start option device uses that enum and defaults to cpu. The README’s start line passes --device=cpu. The line below changes only that value. This line is this page’s. It was not run.
# schema.py Device includes cuda. The README start line passes cpu. This line is this page's.
iopaint start --model=lama --device=cuda --port=8080
The README says you can start using IOPaint by visiting http://localhost:8080. Forward port 8080 with how to use SSH port forwarding on a cloud GPU. The README says all models will be downloaded automatically at startup, and that --model-dir changes the download directory. DEFAULT_MODEL_DIR is under the user cache directory, or under XDG_CACHE_HOME when that variable is set. The commits API for the default branch main listed 61a759fb3f332bacdce8b2813f4837495c9b86e0, committed 2025-04-29T02:13:17Z. README.md was 04c031e10a2f577abd8a1e310e4a8045f2a9db16, committed 2024-08-16T09:05:37Z.
The RTX 5090 guide says that card is compute capability 12.0 (sm_120) and that PyTorch 2.7 and later, on a build for CUDA 12.8 or newer, is the line that announced support. The README’s commented torch pin is 2.1.2 on the cu118 index. This page did not re-test IOPaint on an RTX 5090. Catalog RTX 5090 and RTX 5090D are 32. That is the catalog number only.
Models the repository lists
DEFAULT_MODEL is lama. AVAILABLE_MODELS is lama, ldm, zits, mat, fcf, manga, cv2, and migan. The start help text calls that list the erase models. The README points erase models at https://www.iopaint.com/models#erase-models and says those models can remove an unwanted object, defect, watermark, or person from an image.
The README’s diffusion list names diffusers/stable-diffusion-xl-1.0-inpainting-0.1, andregn/Realistic_Vision_V3.0-inpainting, Lykon/dreamshaper-8-inpainting, Sanster/anything-4.0-inpainting, BrushNet, PowerPaintV2, Sanster/AnyText, and Fantasy-Studio/Paint-by-Example. That list also includes one Hugging Face repo id this page does not print. Copy that line from the README. DIFFUSION_MODELS in const.py names Uminosachi/realisticVisionV51_v51VAE-inpainting, redstonehero/dreamshaper-inpainting, Sanster/anything-4.0-inpainting, diffusers/stable-diffusion-xl-1.0-inpainting-0.1, Fantasy-Studio/Paint-by-Example, RunDiffusion/Juggernaut-XI-v11, SG161222/RealVisXL_V5.0, eienmojiki/Anything-XL, Sanster/PowerPaint-V1-stable-diffusion-inpainting, and Sanster/AnyText. That list also includes one Hugging Face repo id this page does not print. Copy that line from const.py. The two lists are not the same. The download command’s help text also names a repo id this page does not print.
The README’s plugin example, copied:
iopaint start --enable-interactive-seg --interactive-seg-device=cuda
start also has flags for remove-background, anime segmentation, RealESRGAN, GFPGAN, and RestoreFormer. REMOVE_BG_DEVICE_HELP says cuda only supports two models and prints their repo ids. Those ids are briaai/RMBG-1.4 and briaai/RMBG-2.0. ANIMESEG_HELP says that plugin always runs on CPU. This page did not start the plugins.
Batch processing
The README’s batch command, copied. It says --image is the folder of input images and --mask is the folder of mask images. When --mask is a file, all images use that mask.
iopaint run --model=lama --device=cpu \
--image=/path/to/image_folder \
--mask=/path/to/mask_folder \
--output=output_dir
batch_processing.py writes {stem}.png into the --output path. It creates that directory. The device option is the same Device enum as start. The README’s batch line passes --device=cpu. This page did not run it.
Where the web UI saves images
OUTPUT_DIR_HELP says result images will be saved to the output directory automatically. When --output-dir is set, start logs Image will be saved to that directory and creates it if it is missing. The README’s FileManager line says you can browse pictures and save them directly to the output directory. This page did not open the UI, so it does not add a filename the server code was not read for.
ComfyUI
The README does not document a ComfyUI install. The ComfyUI examples top-level directory list on 2026-11-13 had no directory named for this project. Examples HEAD was f9431bb000ce792094ff345446e22cac1ea6cef3, committed 2025-11-26T20:33:58Z. Installing ComfyUI itself is How to install ComfyUI and ComfyUI-Manager on a cloud GPU. This page does not add a ComfyUI install.
When it fails
CUDA out of memory. The files named above print no GPU GB figure. low_mem, cpu_offload, and cpu_textencoder are flags on start. Their help text does not print a GB number. If the process raises that error, use how to fix CUDA out of memory on a cloud GPU.
“CUDA error: no kernel image is available for execution on the device” on an RTX 5090. See the install section. This page did not re-test the package on that card.
Missing input. start exits if --input or --mask-dir is set and the path does not exist. It also exits if --input is a directory and --output-dir is not set. batch_processing.py exits if the image folder or the mask folder has no png, jpg, or jpeg file.
Save the images, then destroy
Batch output is {stem}.png in the directory you pass as --output. The web UI’s --output-dir is the directory start logs. Copy that directory before you destroy the instance. Save your work before you destroy a cloud GPU is the checklist. The terms say data on local instance storage is permanently deleted when the instance is destroyed.
The pricing page FAQ states the billing rule in these words:
Per-minute options have a 1-minute minimum; unused prepaid minutes are refunded when you destroy the instance. Some configurations use whole-hour billing with a 1-hour minimum; unused time within a charged hour is not refunded on voluntary stop. The billing period, minimum charge and initial prepayment are shown before confirmation. No subscription.
Frequently asked questions
What GPU memory figure does IOPaint document?
The README, cli.py, const.py, schema.py, batch_processing.py, and the models page this page read print no GPU GB figure. CPU_OFFLOAD_HELP says offloading weights to CPU RAM reduces vRAM usage and does not print a number. LOW_MEM_HELP says attention slicing and vae tiling save memory and does not print a number. The models page has a sentence about saving memory during service startup and a sentence about directory size. This page does not copy the directory-size sentence. The smallest vram_gb in gpu-prices.json (updated_at 2026-11-13T11:07:05.801Z) is 8, on RTX 2080. There is no upstream GB cutoff to match catalog rows against. This page did not run IOPaint and does not mark a row as enough. Which listing you can start is on https://cloudgpu.app/deploy.
Which command starts the web UI, and where are images saved?
The README start command is iopaint start --model=lama --device=cpu --port=8080. cli.py defaults host to 127.0.0.1 and port to 8080. schema.py Device is cpu, cuda, and mps. The README also prints iopaint start --enable-interactive-seg --interactive-seg-device=cuda. A start line that passes --device=cuda is added on this page, because the README start line passes cpu and the enum includes cuda. When --output-dir is set, start logs that images will be saved to that directory. OUTPUT_DIR_HELP says result images will be saved to the output directory automatically. The batch command is iopaint run with --model=lama, --device=cpu, --image, --mask, and --output. batch_processing.py writes the image stem plus .png into that output path. This page did not run the commands.
Which models does the repository list, and does it document ComfyUI?
AVAILABLE_MODELS is lama, ldm, zits, mat, fcf, manga, cv2, and migan. DEFAULT_MODEL is lama. The README diffusion list and DIFFUSION_MODELS in const.py each include one Hugging Face repo id this page does not print. Copy that line from the README and from const.py. The two lists are not the same. The README does not document ComfyUI. The ComfyUI examples top-level directory list on 2026-11-13 had no directory named for this project. Examples HEAD was f9431bb000ce792094ff345446e22cac1ea6cef3.
Which license covers IOPaint?
The repository LICENSE file is the Apache License, Version 2.0, January 2004. The appendix copyright line is still the unfilled template Copyright [yyyy] [name of copyright owner]. setup.py sets version 1.6.0, python_requires >=3.7, and a classifier for the Apache Software License. The GitHub license field on 2026-11-13 was Apache-2.0. Section 2 of that Apache file grants a no-charge, royalty-free copyright license. That wording is the upstream license, not a CloudGPU price and not a storage allowance. Read the file before you redistribute the program.
Sources (read 2026-11-13, Asia/Shanghai)
- IOPaint README (the CUDA torch comment,
pip3 install iopaint,iopaint start --model=lama --device=cpu --port=8080, the plugin line with--interactive-seg-device=cuda, the batch command, the diffusion names this page prints): https://github.com/Sanster/IOPaint/blob/main/README.md commit04c031e10a2f577abd8a1e310e4a8045f2a9db16. Repository HEAD61a759fb3f332bacdce8b2813f4837495c9b86e0, committed 2025-04-29T02:13:17Z iopaint/cli.py(host127.0.0.1,port8080,--output-dirlog line): commit99c5d6a8895a0fc406e1e8e80434908dc24d7997iopaint/schema.py(Devicecpu,cuda,mps): commit4b5f8b8995706b8f2f2a48fa815953ce5289083biopaint/const.py(DEFAULT_MODELlama,AVAILABLE_MODELS,DIFFUSION_MODELS,CPU_OFFLOAD_HELP,LOW_MEM_HELP,REMOVE_BG_DEVICE_HELP): commit4b5f8b8995706b8f2f2a48fa815953ce5289083biopaint/batch_processing.py({stem}.png): commit9afdbd1c0a818216a6fe25e908cfd611c61886f1setup.py(version1.6.0,python_requires>=3.7, Apache classifier): commit7ca4552241c7e2b6f1c4b4146d2f364af1d1dcbdLICENSE(Apache-2.0, unfilled copyright template): commit4e027f81e6ea2be382727bd1a22b340c9eb2ba67. GitHub license field Apache-2.0- Models page
https://www.iopaint.com/models(no GPU GB figure; one sentence about saving memory during service startup; a directory-size sentence this page does not copy), read 2026-11-13 - ComfyUI examples top-level directories (no IOPaint directory): https://github.com/comfyanonymous/ComfyUI_examples commit
f9431bb000ce792094ff345446e22cac1ea6cef3 - Public GPU memory: https://cloudgpu.app/gpu-prices.json (
updated_at2026-11-13T11:07:05.801Z) and https://cloudgpu.app/v1/public/gpu-catalog (generated_at2026-11-13T11:07:06.881Z).GET /v1/public/compute-capabilitiesreturned feature flags and no GPU list. The catalog had no IOPaint template
Cards you can start are on the Deploy page. Prices are on https://cloudgpu.app/pricing and are not repeated here.
Last updated: 2026-11-13 (Asia/Shanghai).