odysseus-dev/odysseus · error · HTTPException

Remote Windows Diffusers serving is not supported yet; use l

Error message

Remote Windows Diffusers serving is not supported yet; use local Windows or a Linux remote server.

What it means

Raised (HTTP 400) by the cookbook run/session endpoint when the request targets a remote Windows host (is_windows=true combined with remote=true) and the command to launch contains 'diffusion_server.py'. The backend can start Diffusers serving locally on Windows or on a remote Linux box via SSH+tmux, but the combination 'remote + Windows + diffusion_server.py' is explicitly unsupported and rejected before any process is spawned. This is a hard preflight guard, not a runtime failure.

Source

Thrown at routes/cookbook_routes.py:2057

        # below still registers the stale 11434 default — which on a host with
        # a systemd ollama lands on the wrong (unreachable-from-docker) service.
        # Match "ollama serve" as a phrase (with optional flags after), not
        # any substring containing "ollama" — otherwise commands like
        # `docker exec ollama-test ollama-import …` get wrapped as if they
        # were native `ollama serve`, prepending OLLAMA_HOST=… and then
        # running the ollama-not-found preflight which exits 127.
        if re.search(r"\bollama\s+serve\b", req.cmd) and "OLLAMA_HOST=" not in req.cmd:
            _ollama_bind_host = "0.0.0.0" if remote else "127.0.0.1"
            _ollama_chosen_port = _pick_free_port_for_ollama(
                remote, req.ssh_port, start_port=11434, max_offset=10,
            )
            if _ollama_chosen_port:
                req.cmd = f"OLLAMA_HOST={_ollama_bind_host}:{_ollama_chosen_port} {req.cmd}"
        # LOCAL execution on a native-Windows host never uses tmux (detached
        # process path below), regardless of the UI-supplied platform.
        local_windows = IS_WINDOWS and not remote
        if is_windows and remote and "diffusion_server.py" in req.cmd:
            raise HTTPException(
                400,
                "Remote Windows Diffusers serving is not supported yet; use local Windows or a Linux remote server.",
            )

        if not is_windows and not local_windows and not await _binary_available("tmux", remote, req.ssh_port):
            return {
                "ok": False,
                "error": _missing_binary_message("tmux", remote or "local server"),
                "session_id": session_id,
            }
        if _needs_binary(req.cmd, "docker") and not await _binary_available("docker", remote, req.ssh_port, windows=is_windows):
            local_host_docker_blocked = (
                not remote
                and running_in_container()
                and not host_docker_access_enabled()
            )
            return {
                "ok": False,

View on GitHub (pinned to f9235ebbf1)

Solutions

  1. Run the Diffusers server locally on the Windows machine (no remote host set) — local Windows serving is supported via the detached-process path.
  2. Point the remote host at a Linux server: clear the remote Windows target and re-run with a Linux SSH host.
  3. If you maintain the calling UI, force the platform selector to Linux/auto whenever a remote host is set, so the request can never combine is_windows=true with remote=true.

Example fix

// before
const body = { cmd: 'python diffusion_server.py', remote: sshHost, is_windows: true };
await post('/api/cookbook/run', body); // 400

// after
const body = { cmd: 'python diffusion_server.py', remote: null }; // local Windows
await post('/api/cookbook/run', body);
Defensive patterns

Strategy: validation

Validate before calling

// Client-side guard before launching Diffusers serving
function assertDiffusersTargetSupported({ remote, is_windows, cmd }) {
  if (remote && is_windows && cmd.includes('diffusion_server.py')) {
    throw new Error('Remote Windows Diffusers serving is unsupported — run locally on Windows or use a Linux remote.');
  }
}

Try / catch

try { const res = await post('/api/cookbook/run', body); } catch (e) { if (e.status === 400 && /Remote Windows Diffusers/.test(e.message)) { showBanner('Switch to local Windows or a Linux remote host.'); } else throw e; }

Prevention

When it happens

Trigger: POST to the cookbook run/session endpoint with body fields selecting a remote host (remote=true, is_windows=true) and a cmd string that includes 'diffusion_server.py' (the Diffusers image-generation server launcher). Any UI state that remembers 'Windows' as the platform while an SSH host is configured will trip this on the next Diffusers serve request.

Common situations: User previously used a local Windows machine, then switched the cookbook target to a Linux SSH server but the UI still sends platform=windows; or a user tries to point the app at a remote Windows box over SSH to reuse its GPU. Both are rejected by design.

Related errors


AI-assisted analysis of odysseus-dev/odysseus@f9235ebbf1 (2026-08-14). Data as JSON: /api/errors/6c9787eb3d484708. Report an issue: GitHub.