WorldForge / dev_server.py
openfree's picture
WorldForge: prompt-driven region plan, semantic layout map and composite height field
ddcb2ee verified
Raw
History Blame Contribute Delete
1.88 kB
"""Static server for local checks, plus POST /capture to save a canvas frame.
The browser can render a WebGL scene but cannot hand the pixels back to this
machine, and its downloads land somewhere unreachable. So the page posts the data
URL here and the frame lands on disk, where it can actually be looked at.
python dev_server.py [port]
fetch('/capture', {method:'POST', body: canvas.toDataURL('image/jpeg', 0.6)})
"""
import base64
import os
import sys
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
ROOT = os.path.dirname(os.path.abspath(__file__))
OUT = os.path.join(ROOT, "captures")
class Handler(SimpleHTTPRequestHandler):
def do_POST(self):
if self.path.split("?")[0] != "/capture":
self.send_error(404)
return
length = int(self.headers.get("Content-Length", 0))
body = self.rfile.read(length).decode("utf-8", "replace")
header, _, payload = body.partition(",")
ext = "png" if "png" in header else "jpg"
name = self.headers.get("X-Name") or "capture"
os.makedirs(OUT, exist_ok=True)
path = os.path.join(OUT, f"{name}.{ext}")
with open(path, "wb") as f:
f.write(base64.b64decode(payload))
print(f"[capture] {path} ({os.path.getsize(path)} bytes)", flush=True)
self.send_response(200)
self.send_header("Content-Type", "text/plain")
self.end_headers()
self.wfile.write(path.encode())
def end_headers(self):
self.send_header("Cache-Control", "no-store")
super().end_headers()
def log_message(self, *args):
pass
if __name__ == "__main__":
port = int(sys.argv[1]) if len(sys.argv) > 1 else 8140
os.chdir(ROOT)
print(f"serving {ROOT} on http://127.0.0.1:{port}", flush=True)
ThreadingHTTPServer(("127.0.0.1", port), Handler).serve_forever()