Dispatching Blender to the Studio.
Every number on this page is wall-clock from a run made on 16 August 2026. Two estimates made earlier the same day were wrong — one by more than double, one by fourteen times — and both are kept here, because the way they were wrong is the useful part.
1 · The route that doesn't work
Canon said the Cowork sandbox could SSH to the Studio through
skills/sandbox-bootstrap/. In a cloud session it cannot, and the reason
is not the tunnel. Sandbox bash is killed at roughly two seconds of wall clock.
| command | result |
|---|---|
sleep 1 | returns |
sleep 3 | killed, exit 143 |
sleep 12, sleep 20, backgrounded nohup | killed, exit 143 |
bootstrap.sh needs about ten seconds to bring up tailscaled and a SOCKS5
proxy. It can never finish inside a two-second ceiling. Three attempts died before
printing one line, and the failure surfaces as “timed out after 0s” —
which reads like a hang but means the process was reaped before it started.
The desktop bridge is no better: device_bash has no network access at all.
ssh: connect to host 192.168.1.246 — Network is unreachable.
The wasted hour here was spent debugging the tunnel. The tunnel was never the problem. Probe the substrate before the symptom.
2 · The route that does
The Blender MCP bridge runs arbitrary Python inside Blender on the MacPro, and
that Python has full OS access — including subprocess. The MacPro is on the
tailnet. So the MacPro becomes the jump host, and the sandbox never needs to reach
anything.
subprocess.run(["ssh", "-o", "BatchMode=yes", "anthonybooth@100.82.41.69",
f"bash -lc {shlex.quote(cmd)}"], capture_output=True, text=True)
Two traps, both of which cost a run:
- Quote the remote command.
ssh host bash -lc cmdlets the remote shell re-split the arguments, somkdir -p /some/patharrives asmkdirwith no arguments at all. Wrap it inshlex.quote. - The bridge caps a single call at about 60 seconds. Split long remote work across calls, or detach it.
And the fault that had been sitting there all along: the Studio's LAN address is dead.
| address | result |
|---|---|
192.168.1.246 — LAN | No route to host |
100.82.41.69 — tailnet | works |
~/.ssh/config on the MacPro pointed Host studio at the dead LAN address,
so every ssh studio failed. Repointed to the tailnet; the LAN entry is kept as
studio-lan. Backup at ~/.ssh/config.bak-day3-studio.
3 · The Studio, measured
| model | Mac16,9 — Mac Studio M4 Max |
| GPU | 32 cores, Metal, confirmed enabled and selected |
| RAM | 36 GB |
| Blender | 5.1.2 |
| ffmpeg | /opt/homebrew/bin/ffmpeg |
| free disk | 54 Gi |
4 · Speed, and two wrong estimates
Single-frame renders mislead badly. Each one pays full Blender startup plus shader compilation. An animation run pays that once, at the start, and then never again.
Single frame, 1920×1080
| machine | EEVEE | Cycles |
|---|---|---|
| MacPro — M3 Pro, 14 GPU cores | 11.9 s | 19.3 s |
| Studio — M4 Max, 32 GPU cores | 11.6 s | 16.3 s |
Animation run on the Studio, EEVEE, 40 frames
The two estimates, and how they failed
Wrong by 2.5×: the Studio has 32 GPU cores against the MacPro's 14, so a 2.3–2.9× speed-up was inferred. Measured, it is 1.03× on EEVEE and 1.18× on Cycles. This scene is overhead-bound, not throughput-bound. A core-count ratio is not a speed ratio.
Wrong by 14×: a 300-frame job was quoted at 60 minutes by multiplying a single-frame timing. The real figure is 4.3 minutes, because 299 of those frames never recompile the shaders.
So the Studio's value on this class of scene is not speed. It is that the job runs off the workstation, leaving the live Blender session free, and that frames can be split across both machines at once.
5 · cwrender
Claude/scripts/cwrender ships the .blend, renders the range headless on the
Studio, rsyncs the frames back, and optionally encodes with ffmpeg.
cwrender <file.blend> <start> <end> [--engine BLENDER_EEVEE|CYCLES]
[--out DIR] [--split] [--encode] [--fps 30]
--split renders odd frames on the MacPro and even frames on the Studio
concurrently. The script preflights the tailnet connection and fails in the first
second rather than forty minutes in.
Verified on 16 August 2026 with a three-frame run and then a forty-frame run, both
returning complete frame sets. Full canon: Claude/render-farm.md.