28 min read

Self-Host ComfyUI: Run Stable Diffusion From Anywhere (2026)

Install ComfyUI with Docker, generate your first image, and access it securely from any device with a Localtonet tunnel. No cloud fees, no port forwarding

A GPU workstation runs ComfyUI while a phone connects through a secure tunnel.
ComfyUI runs on the local GPU workstation and remains reachable from remote devices through a tunnel.
ComfyUI · Docker · NVIDIA GPU · Remote Access · Localtonet · 2026

Build a reproducible local image-generation host, then expose only the protected web entry point

ComfyUI can run diffusion workflows on hardware you control, but a reliable deployment involves more than starting a container and publishing port 8188. You need a compatible model, persistent storage, working GPU passthrough, a tested workflow, an upgrade plan, and authentication before remote access. This guide explains a Linux and NVIDIA Docker workflow, shows how to keep Docker's host port on loopback, and then connects that protected local service to a Localtonet HTTP tunnel without inbound router port forwarding. Hardware requirements, model compatibility, licensing, cost, and performance vary by model and workflow, so the procedure emphasizes verification instead of fixed promises.

🔒 Loopback-only Docker port and authenticated public entry point 🎨 Persistent models, inputs, outputs, workflows, settings, and custom nodes 🌐 Public HTTPS access through an outbound Localtonet connection

Scope, architecture, and installation choices

ComfyUI is a node-based interface for constructing image-generation workflows. A workflow connects model loaders, text encoders, samplers, decoders, image inputs, and output nodes in a graph. This makes the processing pipeline visible and reusable, but it also means that compatibility depends on the complete graph. A checkpoint alone does not guarantee that a workflow will run. The workflow may require a particular model family, text encoder, VAE, LoRA, ControlNet model, custom node, or precision.

This tutorial narrows the reproducible path to an x86-64 Linux host with an NVIDIA GPU, a working NVIDIA driver, Docker Engine, NVIDIA Container Toolkit, and a community ComfyUI container selected from its current upstream documentation. Localtonet runs on the same host as Docker, which lets us publish the container only to 127.0.0.1:8188. The instructions do not assume a specific GPU model, VRAM capacity, Linux distribution release, ComfyUI release, CUDA tag, or third-party container tag that has not been verified in the supplied evidence.

Do not copy an unverified ComfyUI image tag into production

ComfyUI does not provide the Localtonet-specific container contract used by this tutorial, and community image tags, internal paths, startup flags, and bundled extensions can change. The previously suggested yanwk/comfyui-boot:cu126-slim tag and its volume paths are therefore not presented here as current facts. Before deployment, obtain the current tag, internal ComfyUI directory, startup behavior, and supported mount points from the image's upstream repository. Pin the tested image by digest. If the upstream contract cannot be verified, use an official non-container ComfyUI installation path instead of guessing.

ComfyUI also has non-Docker installation paths. Depending on the current upstream release, those may include a desktop build, a portable package, or a manual Python installation. Those options can be preferable when you need direct access to a platform-specific GPU backend. Docker is useful when its isolation and declarative storage contract fit the host, but it is not inherently faster and does not make an incompatible workflow compatible.

Request path and trust boundaries

Remote browser
    |
    | Public HTTPS address
    v
[PUBLIC TRUST BOUNDARY]
    |
[Verified authentication and authorization control]
    |
Localtonet relay
    ^
    | Outbound client connection from the host
    |
Localtonet client on the Docker host
    |
    | HTTP target: 127.0.0.1:8188
    v
Docker host loopback: 127.0.0.1:8188
    |
    | Container port mapping
    v
ComfyUI container listening on its container interface
    |
    v
NVIDIA GPU

Two different bindings are involved. ComfyUI must listen on an interface reachable inside its container so Docker can forward traffic to it. Docker should then publish that container port only on the host's loopback interface. A mapping such as 127.0.0.1:8188:8188 permits software on the same host, including the Localtonet client, to reach ComfyUI without making port 8188 directly reachable from other LAN devices.

The Localtonet client establishes an outbound connection to our relay. No inbound router port forwarding, public IP address, firewall opening, or VPN setup is required for an HTTP tunnel. The tunnel remains available only while the selected Localtonet client is connected and the tunnel is running.

🧩 Workflow-level compatibility A usable deployment needs every model, node, encoder, decoder, and extension referenced by the selected workflow.
💾 Explicit persistence Models, inputs, outputs, workflows, user settings, and custom nodes must be stored outside the disposable container layer.
🎛️ Hardware-dependent capacity VRAM use changes with the model, precision, resolution, batch size, node graph, attention implementation, and offloading behavior.
🔒 Separate access control HTTPS protects traffic in transit. It does not make a public address private or decide who may use ComfyUI.

Prerequisites and capacity planning

Complete the following checks before downloading a large model or creating a public tunnel. This avoids confusing host, container, workflow, and networking failures.

Host and GPU requirements

  • An x86-64 Linux host supported by your chosen Docker Engine and NVIDIA Container Toolkit releases.
  • An NVIDIA GPU with a current driver that supports the CUDA runtime required by the selected container.
  • Enough system RAM for the operating system, Docker, ComfyUI, model loading, and any CPU offloading performed by the workflow.
  • Enough GPU memory for the exact model, precision, dimensions, batch size, and graph you plan to run.
  • Enough disk capacity for container layers, checkpoints, encoders, VAEs, LoRAs, custom nodes, inputs, outputs, backups, and temporary upgrade copies.

There is no universal VRAM minimum for SDXL, Flux, or another model family. A quantized or reduced-precision model may use less memory than a full-precision variant, while a high-resolution workflow with several conditioning networks may use much more. Start from the requirements published for the specific model and workflow. Leave capacity for runtime allocations rather than assuming that a model file fitting on disk means it will fit in GPU memory.

Install Docker Engine and NVIDIA Container Toolkit

Install Docker Engine using Docker's current instructions for your Linux distribution. Then install NVIDIA Container Toolkit using NVIDIA's current repository and configuration instructions for that same distribution. Repository URLs, package names, signing-key procedures, and runtime configuration can change, so this article does not reproduce a potentially stale installation script.

After installation, confirm that Docker is running and that your account has the intended permission to use it:

docker version
docker info
docker ps

Confirm that the host driver can see the GPU:

nvidia-smi

NVIDIA's toolkit documentation commonly uses a CUDA container to validate GPU passthrough. Use the exact current test image tag shown in the NVIDIA Container Toolkit documentation rather than copying a historical CUDA tag. The test should run nvidia-smi inside a container and show the same physical GPU before you proceed.

Separate the host-driver test from the container-runtime test

A successful host-side nvidia-smi proves that the operating system can reach the GPU. It does not prove that Docker has GPU access. Complete both checks. If the container test fails, fix NVIDIA Container Toolkit before diagnosing ComfyUI.

Choose a model and review its license

Download only models whose source, format, intended ComfyUI workflow, and license you understand. Different checkpoints and supporting files may have different terms for commercial use, redistribution, generated output, attribution, or prohibited uses. ComfyUI being available separately does not replace the license attached to a model, LoRA, VAE, text encoder, or custom node.

Keep a simple inventory containing the original download page, exact filename, file size, checksum if the publisher provides one, license, associated workflow, and date retrieved. This is useful for backup decisions and makes future troubleshooting far easier than a folder of anonymously renamed checkpoint files.

Prepare Localtonet and an authentication layer

Create a Localtonet account, obtain the device-specific AuthToken for the client that will run on this host, and keep it secret. Install the client from the Localtonet download page. Do not paste the token into Compose files, screenshots, shell history shared with others, or this article's example commands.

You must also provide a verified authentication and authorization control in front of ComfyUI before starting a public HTTP tunnel. This can be an authenticated reverse proxy or another access gateway whose behavior you have tested. The supplied Localtonet evidence does not confirm dashboard Basic Auth for HTTP tunnels, so this guide does not claim that setting exists.

Build a reproducible Docker deployment

Docker architecture with a ComfyUI container, GPU access, and persistent bind-mounted folders.
The container is replaceable, while models, workflows, custom nodes, inputs, and outputs persist on the host.

The safest deployment process begins with an explicit container contract. Record the exact image reference, digest, internal application path, listening port, launch arguments, user ID, and supported mount points from the chosen image's current upstream documentation.

1

Verify and pin the container image

Select a current upstream-supported image tag, pull it, inspect its metadata, and record its immutable digest. Do not rely on latest or assume that an old CUDA tag still exists.

2

Create persistent host directories

Create separate directories for models, input files, outputs, workflows, user configuration, and custom nodes. Adjust ownership to the user expected by the verified container image rather than making the directories world-writable.

3

Define the container without publishing to the LAN

Give the container GPU access, bind its verified persistent directories, and publish port 8188 as 127.0.0.1:8188:8188. Confirm that the image starts ComfyUI on an interface reachable from Docker's port forward.

4

Start the container and inspect its state

Start the pinned deployment, check container status, and read startup logs before opening the UI. Resolve missing mounts, invalid arguments, or GPU errors at this stage.

5

Confirm the loopback-only publication

Inspect Docker's published ports and the host's listening sockets. The host-side listener should be 127.0.0.1:8188, not 0.0.0.0:8188 or [::]:8188.

Create a predictable host layout:

sudo mkdir -p /srv/comfyui/models
sudo mkdir -p /srv/comfyui/input
sudo mkdir -p /srv/comfyui/output
sudo mkdir -p /srv/comfyui/workflows
sudo mkdir -p /srv/comfyui/user
sudo mkdir -p /srv/comfyui/custom_nodes

Do not run a blanket recursive chmod 777. Determine the UID and GID expected by the selected image and assign only the permissions it needs. If the image runs as root, review whether its documented configuration supports a less-privileged user. GPU access does not require every application file to be globally writable.

The following Compose fragment demonstrates the required security and persistence shape. It is intentionally a contract template, not a claim about unverified community-image paths. Replace every placeholder using the current upstream documentation for the image you selected.

services:
  comfyui:
    image: "VERIFIED_IMAGE_REFERENCE@sha256:VERIFIED_DIGEST"
    container_name: comfyui
    restart: unless-stopped
    ports:
      - "127.0.0.1:8188:8188"
    gpus: all
    volumes:
      - "/srv/comfyui/models:VERIFIED_CONTAINER_MODELS_PATH"
      - "/srv/comfyui/input:VERIFIED_CONTAINER_INPUT_PATH"
      - "/srv/comfyui/output:VERIFIED_CONTAINER_OUTPUT_PATH"
      - "/srv/comfyui/workflows:VERIFIED_CONTAINER_WORKFLOWS_PATH"
      - "/srv/comfyui/user:VERIFIED_CONTAINER_USER_PATH"
      - "/srv/comfyui/custom_nodes:VERIFIED_CONTAINER_CUSTOM_NODES_PATH"

Some images may persist workflows or user data under a combined directory rather than separate paths. Others may expect models in a different root or offer an environment variable for external model directories. Follow the verified contract exactly. A volume attached to the wrong internal directory creates the appearance of persistence while ComfyUI continues writing into the disposable container layer.

Start and inspect the deployment:

docker compose pull
docker compose up -d
docker compose ps
docker compose logs --tail=200 comfyui
docker port comfyui

Confirm the socket on the Linux host:

ss -ltn | grep 8188

The expected host-side result contains 127.0.0.1:8188. If it shows all interfaces, stop the deployment and correct the port mapping before continuing.

Install models, workflows, and custom nodes safely

A model-management interface, ComfyUI Manager, and manual checkpoint placement are different things. A manager may help install extensions or retrieve supported resources, but its availability and capabilities depend on the installed version and configuration. It does not guarantee that an arbitrary checkpoint matches an arbitrary workflow.

Manual model placement

For the most auditable approach, download the required files from their publisher, verify checksums where available, and copy them into the documented model subdirectories under /srv/comfyui/models. Common resource categories can include checkpoints, VAEs, text encoders, LoRAs, ControlNet models, embeddings, and upscalers. Use the category expected by the workflow and current ComfyUI version.

After adding a file, refresh the UI or restart ComfyUI if required by the installed version. If a loader node cannot see the model, first verify the mounted path from inside the container rather than repeatedly downloading the file:

docker inspect comfyui
docker compose logs --tail=200 comfyui

Use the verified internal path from your image contract when inspecting the container. Do not assume that all community images place ComfyUI under /root/comfy/ComfyUI.

Workflow compatibility

Start with a small workflow supplied for the exact model family and ComfyUI release you installed. Confirm that every referenced node is available and that each loader points to a file present on disk. A workflow created for one architecture cannot be made compatible merely by selecting a similarly named checkpoint.

If a workflow requires custom nodes, inspect each node's repository, maintainer activity, release history, dependencies, and requested behavior before installation. Custom nodes are executable Python code. They can read mounted files, consume GPU and CPU resources, initiate network requests, and introduce dependency conflicts.

Treat Manager and custom-node installation as administrative access

Do not expose extension installation to untrusted remote users. A convenient install button can add code to the host's persistent custom-node directory, and that code runs again when ComfyUI starts. Back up the current node set and record versions before adding or updating an extension.

Privacy is local only when the entire workflow is local

Core generation can occur on your host, but that does not prove that every extension is offline. API-backed nodes, telemetry, model downloaders, remote storage integrations, and other extensions may contact external services. Remote browser traffic also travels through the Localtonet tunnel path. Review each component and do not describe the deployment as fully private unless you have verified its network behavior and data handling.

Verify local generation, GPU use, and persistence

ComfyUI shows a completed workflow beside GPU activity and a saved output file.
A successful check confirms local generation, GPU activity, and output persistence.

Do not create a tunnel until ComfyUI works locally. Local verification gives you a clean dividing line: if the application fails on localhost, Localtonet is not the cause.

1

Open the loopback URL

From a browser on the Docker host, open http://127.0.0.1:8188. If the host has no desktop, use a local command-line HTTP check or an SSH session configured for local forwarding during administration.

2

Load a known-compatible workflow

Use a workflow supplied for the exact model files you installed. Begin with modest image dimensions and a batch size of one to reduce the number of variables during the first test.

3

Queue one generation and watch the logs

Keep the container logs open while generating. Confirm that model loading and inference complete without missing-node, missing-file, dependency, or out-of-memory errors.

4

Confirm GPU activity

Run nvidia-smi on the host during generation. The ComfyUI workload should appear and GPU memory or utilization should change. Logs should also identify the selected execution device.

5

Confirm output and workflow persistence

Verify that the output appears under /srv/comfyui/output and save a workflow under the persistent workflow or user-data location supported by the image.

6

Recreate the container and test again

Stop and recreate the container without deleting the host directories. Confirm that models, settings, workflows, custom nodes, inputs, and outputs remain available.

docker compose logs -f comfyui
nvidia-smi

docker compose down
docker compose up -d
docker compose ps
docker compose logs --tail=200 comfyui
Do not add -v to the shutdown command unless deletion is intentional

docker compose down -v removes Compose-managed named volumes. Host bind-mounted directories are not removed by that flag, but the command can still destroy other named-volume data in the project. Know which storage mechanism you selected before cleaning up.

Configure secure remote access with Localtonet

Remote devices reach local ComfyUI through a Localtonet tunnel without inbound port forwarding.
The Localtonet agent creates an outbound tunnel that maps a public endpoint to the local ComfyUI service.

Localtonet provides the public URL and forwards requests to the local target. It does not turn an unauthenticated application into a private application merely because the URL uses HTTPS. Before starting the tunnel, place and test a verified authentication layer in front of ComfyUI. Configure Localtonet to target that protected local entry point, not an unprotected administrative interface.

Do not publicly expose an unauthenticated ComfyUI instance

A public HTTPS address can be copied, logged, shared, or discovered. HTTPS protects transport between the browser and tunnel edge, but possession of the address is not authorization. An unauthorized user may consume GPU resources, access available workflows or files, or interact with powerful custom nodes. If you do not have a tested authentication control, stop here and keep ComfyUI local.

Once the protected local endpoint is ready, use the documented Localtonet sequence.

1

Install and run the Localtonet client

Install Localtonet on the machine that can reach the protected local service. Use the current package for Windows, macOS, Linux, Android, Docker, or another supported option shown on our download page.

2

Authenticate the device

Select the device-specific AuthToken in the application or start the client with that token. Keep the token private because it identifies the client device.

3

Select an available relay server

Choose a currently available server or region from the dashboard. Available values can vary and should not be hardcoded from an article.

4

Create the HTTP tunnel configuration

Set the local target to the authenticated local entry point. If that control intentionally listens on 127.0.0.1:8188, use local IP 127.0.0.1 and port 8188. If it listens on another loopback port, target that port instead.

5

Start the tunnel explicitly

Creating a tunnel does not make it run. Use the Start action and verify that the selected Localtonet client is connected and the tunnel status is running.

6

Use the assigned public HTTPS address

Copy the public address displayed for the running tunnel. Treat it as a public endpoint even when you intend to share it with only one person.

7

Verify from an independent network

Test from a phone using mobile data or another network. Confirm that authentication is required before ComfyUI loads, that the UI remains connected, and that a small known-compatible workflow can be queued and monitored.

For the current product workflow, consult the Localtonet documentation alongside the dashboard. HTTP tunnels may use a generated subdomain, a selected subdomain where supported, or a custom domain. A custom domain improves naming but is not an authorization, revocation, or authentication mechanism.

Run the Localtonet client directly

On supported desktop systems, you can run the application and paste the token into the screen that opens. The current download instructions also support:

localtonet --authtoken <YOUR_TOKEN>

This stores the token locally. Do not substitute a real token into documentation, screenshots, issue reports, or shared command output.

Optional Linux systemd service

On a Linux host with systemd, the current Localtonet download documentation provides these commands:

sudo localtonet --install-service --authtoken <YOUR_TOKEN>
sudo localtonet --start-service --authtoken <YOUR_TOKEN>

systemctl status localtonet
journalctl -u localtonet -f

Root privileges are required for service management. The unit is created at /etc/systemd/system/localtonet.service. The client also supports --stop-service, --status-service, and --remove-service.

Windows and macOS service support

On Windows, run the documented install and start commands in an Administrator Command Prompt or PowerShell session. The service is visible in services.msc. On macOS, the same service commands require administrator privileges and register a launchd job under ~/Library/LaunchAgents/. Always use the current platform instructions from the download page because executable locations and installation methods differ.

A connected background client does not by itself prove that a particular tunnel is running. Check both the device connection and tunnel state. Stop the tunnel when remote access is not needed.

Security and privacy boundaries

Self-hosting changes who operates the generation host, but it does not eliminate security responsibilities. ComfyUI is a powerful local application, and extensions can increase that power significantly.

🔐 Authenticate before forwarding Require a verified login and authorization decision before a request reaches ComfyUI. Test both successful and rejected requests.
🛡️ Apply least privilege Limit filesystem mounts, avoid privileged containers, restrict write access, and do not expose the Docker socket to ComfyUI.
🧪 Review executable extensions Pin custom-node versions, review dependencies, and test updates away from the main deployment whenever practical.
⏹️ Reduce exposure time Stop the Localtonet tunnel when remote access is unnecessary. Delete unused tunnels and revoke credentials that are no longer required.

Avoid mounting personal home directories, SSH keys, cloud credentials, or unrelated project data into the container. Store only the files ComfyUI needs. If multiple people use the service, decide which workflows, models, uploads, and outputs they are permitted to access instead of treating all authenticated users as administrators.

Monitor storage growth. Inputs and outputs may contain sensitive material, and generated assets can consume substantial space. Apply retention rules appropriate to your use case and include only necessary data in backups.

Routine operation, backups, upgrades, and rollback

Start, stop, inspect, and read logs

docker compose up -d
docker compose stop
docker compose start
docker compose ps
docker compose logs --tail=200 comfyui
docker compose logs -f comfyui
docker inspect comfyui

Stop the Localtonet tunnel before maintenance that could expose an error page, partially upgraded service, or unprotected fallback. Start it again only after local verification succeeds.

Back up the deployment

Back up the Compose file, the exact pinned image digest, configuration notes, model inventory, workflows, user configuration, custom nodes, and any irreplaceable inputs or outputs. Model files are often large and may be downloadable again, so your backup policy can distinguish reproducible downloads from unique data. Preserve model licenses and source records even if you choose not to back up every model binary.

For a consistent filesystem backup, stop ComfyUI first:

docker compose stop comfyui

sudo tar -C /srv -czf comfyui-data-backup.tar.gz comfyui

docker compose start comfyui

Store backups away from the primary disk and test restoration into a separate directory. A backup is not proven until you can restore the Compose configuration, persistent data, and a working generation.

Use a controlled upgrade procedure

  1. Stop the public tunnel.
  2. Record the current image reference and immutable digest.
  3. Export or save important workflows.
  4. Back up persistent configuration and custom nodes.
  5. Read the image and ComfyUI release notes for path, dependency, migration, and launch-option changes.
  6. Pull the candidate image without overwriting the known-good reference.
  7. Update the pinned digest in a copy of the Compose configuration.
  8. Start locally and inspect logs.
  9. Run the same small validation workflow used during initial setup.
  10. Confirm GPU inference, output persistence, settings, models, and custom nodes.
  11. Start the Localtonet tunnel and repeat the independent remote test.

Do not update ComfyUI, every custom node, the CUDA runtime, and all models in one uncontrolled change. Smaller changes make failure analysis and rollback practical.

Rollback

If the candidate release fails, stop it, restore the previous Compose configuration and data snapshot if a migration altered persistent files, then start the previous pinned digest. Read logs before reopening the tunnel. Keeping only a mutable tag makes rollback unreliable because the tag may no longer resolve to the old image.

Manage model storage deliberately

Large model collections can outgrow the container images themselves. Use stable filenames, maintain checksums where possible, and remove duplicates only after checking that saved workflows do not reference them. Before deleting a model, search your workflow inventory and confirm that a replacement uses the same architecture and required supporting files.

Self-hosted ComfyUI and hosted generators

Neither approach is categorically cheaper, faster, or more private. The result depends on the provider, local hardware, electricity price, model license, workflow, maintenance time, network path, and usage pattern.

Consideration Hosted generator Self-hosted ComfyUI
Setup and maintenance The provider operates the runtime, updates, capacity, and public access layer. You operate drivers, containers, models, storage, extensions, security, backups, and upgrades.
Cost May use free allowances, subscriptions, credits, or metered billing, depending on the provider. May involve hardware, electricity, replacement parts, storage, and administration time.
Privacy Requests are handled according to the provider's current service and privacy terms. Core inference can remain local, but tunnel traffic and external-service nodes introduce additional data paths.
Model choice Limited to models and controls made available by the provider. Limited by model licenses, ComfyUI support, workflow compatibility, hardware, and available storage.
Performance Depends on provider capacity, queueing, service tier, model, and network conditions. Depends on local GPU, precision, workflow, drivers, thermal limits, and configuration.
Remote availability Usually operated as an internet service by the provider. Requires the host, ComfyUI, authentication layer, Localtonet client, and tunnel to remain operational.

Self-hosting is most compelling when you value control over the runtime and are willing to maintain it. Hosted services remain attractive when operational simplicity matters more than controlling the execution environment.

Troubleshooting ComfyUI, Docker, and remote access

Symptom Checks Safe recovery
Docker cannot pull the image Check the repository name, tag, registry login requirements, architecture, and upstream release page. Do not substitute a guessed tag. Select a documented image and pin its digest after a successful pull.
Container exits immediately Run docker compose ps and inspect docker compose logs --tail=200 comfyui. Correct the documented command, mount paths, permissions, or required environment before restarting.
GPU is visible on the host but not in Docker Check NVIDIA Container Toolkit installation, Docker runtime configuration, and GPU device requests. Repeat NVIDIA's current container-runtime test before starting ComfyUI.
ComfyUI uses the CPU unexpectedly Review startup logs, container GPU configuration, driver compatibility, and the selected build. Stop generation and fix the runtime rather than assuming slow inference is normal.
Port 8188 is already in use Run ss -ltn | grep 8188 and inspect existing containers. Stop the conflicting service or choose another loopback host port and use the same port in the Localtonet target.
Port 8188 is exposed to the LAN Check docker port comfyui and the host socket list. Change the mapping to 127.0.0.1:8188:8188, recreate the container, and verify again.
Model does not appear in a loader Check the model category, filename, host directory, bind mount, container path, permissions, and workflow requirements. Move the file to the documented model subdirectory and refresh or restart as required.
CUDA out-of-memory error Review model precision, image dimensions, batch size, active nodes, and other GPU processes. Lower the workload using options supported by that model and workflow. Do not assume one optimization applies universally.
Custom node fails after an update Read startup logs for import errors, dependency conflicts, API changes, or missing packages. Restore the pinned node version or backup. Avoid updating all extensions together.
Local browser cannot open ComfyUI Check container state, logs, port mapping, and http://127.0.0.1:8188 from the host. Fix the application locally before investigating Localtonet.
Local access works but the tunnel does not Check that the Localtonet client is connected, the correct AuthToken device is selected, the relay is available, the target IP and port are correct, and the tunnel was explicitly started. Restart only the failed layer, then verify tunnel status and test from an independent network.
Remote UI loads but disconnects or stops updating Inspect browser errors, ComfyUI logs, authentication proxy logs, Localtonet state, and whether the UI's HTTP or WebSocket traffic is being handled correctly. Confirm the protected local endpoint works first, then retest the tunnel without weakening authentication.
Remote generation completes but previews are slow Compare local and remote behavior, output size, network quality, browser performance, and relay selection. Use smaller test outputs while diagnosing. Do not assume generation time and transfer time are the same measurement.
Service fails after a host reboot Check Docker, container restart status, Localtonet service status, device connection, and tunnel running state separately. Restore each layer in order: Docker, ComfyUI, authentication, Localtonet client, then the tunnel.

Troubleshoot from the inside out. First verify the GPU, then Docker, then ComfyUI, then the authentication layer, then the Localtonet client, then the tunnel, and finally the remote browser. This prevents a public networking symptom from hiding a local application failure.

Frequently asked questions

Why publish Docker port 8188 only on 127.0.0.1?

When Localtonet runs on the same host, it can reach the loopback listener directly. Binding to 127.0.0.1 avoids making ComfyUI directly reachable from every device on the LAN while still allowing Docker to forward traffic into the container.

Does a Localtonet HTTPS address make ComfyUI private?

No. HTTPS protects traffic in transit, but the address is a public endpoint. Use a verified authentication and authorization layer before starting the tunnel, apply least privilege, and stop the tunnel when it is not needed.

Which ComfyUI Docker image should I use?

Use a currently maintained image whose upstream documentation clearly states its supported GPU runtime, internal paths, startup options, persistence mounts, and update procedure. Test it locally and pin the resulting immutable digest. This article does not endorse an unverified moving tag.

How much VRAM does ComfyUI require?

There is no single requirement. VRAM use depends on the model architecture, precision, resolution, batch size, conditioning models, custom nodes, attention implementation, and offloading configuration. Follow the requirements for the exact model and workflow, then validate with a small generation.

Can ComfyUI Manager install every model I need?

Do not assume so. Manager features depend on the installed version and available integrations. Some resources may require manual download and placement. In every case, verify workflow compatibility and review the license for each model and extension.

Does the computer need to stay on for remote access?

Yes. The host, Docker, ComfyUI container, authentication layer, Localtonet client, and tunnel must all be operational. Creating a tunnel does not start it automatically, and the tunnel is unavailable when the selected client is disconnected or the tunnel is stopped.

Will the tunnel change image-generation speed?

Inference still runs on the host, but end-to-end experience includes interface traffic, uploaded inputs, previews, status updates, and downloaded outputs. Local GPU execution time and remote transfer time should be measured separately rather than assuming the tunnel has no effect on the overall session.

Can I use a custom domain to revoke access?

A custom domain is a naming and routing choice, not an authorization mechanism. Revoke access through the authentication system, rotate affected credentials, and stop or delete the tunnel when appropriate.

Connect your protected ComfyUI host with Localtonet

Verify generation and persistence locally, put an authentication control in front of ComfyUI, then create and explicitly start a Localtonet HTTP tunnel to that protected loopback endpoint.

Get Started Free →

Corrections & updates

Substantive changes approved by the Localtonet editorial team are listed transparently below.

Rebuild the body using the current lt-* structure: add a nonduplicative hero title, place a clickable guide navigation card directly after the hero, add stable IDs to every linked h2, remove the outer article wrapper, and replace unsupported lt-terminal markup with semantic pre and code blocks. Narrow the tutorial to a clearly tested Docker, operating-system, GPU, image-tag, and ComfyUI version combination while briefly identifying official alternative installation paths. Add prerequisites for Docker, NVIDIA drivers and Container Tool

Localtonet is a secure multi-protocol tunneling and proxy platform designed to expose localhost, devices, private services, and AI agents to the public internet supporting HTTP/HTTPS tunnels, TCP/UDP forwarding, mobile proxy infrastructure, file server publishing, latency-optimized game connectivity, and developer-ready AI agent endpoint exposure from a single unified control plane.

support