--- title: "Server Overview" description: "Run ComfyUI as a server and interact with it programmatically via REST and WebSocket APIs" --- ComfyUI runs as an HTTP server on your machine by default. You can call it programmatically to submit workflows, upload files, download outputs, and monitor progress — all without opening the browser. ## Starting the Server When you launch ComfyUI, it automatically starts an HTTP server at `http://127.0.0.1:8188`. To run ComfyUI as a headless server (no browser): ```bash # Run without opening the browser python main.py --disable-auto-launch ``` ```bash # Specify a custom port python main.py --port 8288 ``` ```bash # Listen on all network interfaces (for remote access) python main.py --listen 0.0.0.0 ``` For a full list of startup flags, run `python main.py --help` or see the [Startup Flags reference](/development/comfyui-server/startup-flags). ## Key Pages in This Section Complete reference for all main.py command-line arguments. Available HTTP endpoints for submitting workflows, uploading files, and querying status. Code examples for calling the API: HTTP-only, WebSocket + History, and SaveImageWebsocket. WebSocket message types the server sends to the client during execution. Advanced: invert execution for custom control flows. ## Using Partner Nodes If your workflow contains paid Partner Nodes, you can include your API key in the payload. See the [Partner Node API Integration](/development/comfyui-server/api-key-integration) guide for details. --- ## How the Server Works The Comfy server runs on top of the [aiohttp framework](https://docs.aiohttp.org/), which in turn uses [asyncio](https://pypi.org/project/asyncio/). Messages from the server to the client are sent by socket messages through the `send_sync` method of the server, which is an instance of `PromptServer` (defined in `server.py`). They are processed by a socket event listener registered in `api.js`. See [messages](/development/comfyui-server/comms_messages). Messages from the client to the server are sent by the `api.fetchApi()` method defined in `api.js`, and are handled by HTTP routes defined by the server. See [routes](/development/comfyui-server/comms_routes). The client submits the whole workflow (widget values and all) when you queue a request. The server does not receive any changes you make after you send a request to the queue. If you want to modify server behavior during execution, you'll need routes.