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
- Run the Diffusers server locally on the Windows machine (no remote host set) — local Windows serving is supported via the detached-process path.
- Point the remote host at a Linux server: clear the remote Windows target and re-run with a Linux SSH host.
- 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
- Force the platform selector to Linux/auto whenever a remote SSH host is configured.
- Disable the Diffusers serve button while remote+Windows is selected, with an explanatory tooltip.
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
- host is required
- Refusing to signal PID {req.pid} (<100, likely system proces
- signal must be TERM, KILL, or INT
- d && d.detail ? d.detail : ('HTTP ' + res.status)
- result.detail || 'Failed to rename session'
AI-assisted analysis of odysseus-dev/odysseus@f9235ebbf1 (2026-08-14).
Data as JSON: /api/errors/6c9787eb3d484708.
Report an issue: GitHub.