Install
openclaw skills install clawbox-media-serverBidirectional LAN file sharing for AI agents. Provides a static file server (port 18801) for serving files to users, and an upload server (port 18802) with d...
openclaw skills install clawbox-media-serverLightweight HTTP servers for bidirectional file sharing between an AI agent and users on the local network.
All files are stored in ~/projects/shared-media and instantly accessible to the agent.
From your login session (with systemd user bus):
bash ~/.openclaw/workspace/skills/clawbox-media-server/scripts/install-all.sh
That's it! The installer:
~/projects/shared-media if neededAccess URLs (replace 192.168.68.75 with your host's LAN IP):
http://192.168.68.75:18802/http://192.168.68.75:18801/If you prefer to start manually:
1. Start Media Server (serves files):
node ~/.openclaw/workspace/skills/clawbox-media-server/scripts/server.js
# Listens on 0.0.0.0:18801
2. Start Upload Server (accepts uploads):
UPLOAD_PORT=18802 python3 ~/.openclaw/workspace/skills/clawbox-media-server/scripts/upload-server.py
# Serves UI on / and upload endpoint at POST /upload
Both read from/write to ~/projects/shared-media by default.
Agent copies a file to the shared directory:
cp /path/to/output.pdf ~/projects/shared-media/
Then sends the user a link:
http://192.168.68.75:18801/output.pdf
The user can also browse all files at http://192.168.68.75:18801/.
User opens http://192.168.68.75:18802/ in any browser, drags files in. ✅ Done.
Agent sees the files immediately in ~/projects/shared-media/ and can read them.
http://192.168.68.75:18802/~/projects/shared-media/<filename>)http://192.168.68.75:18801/<result>Fully LAN-based, no internet.
| Variable | Default | Purpose |
|---|---|---|
MEDIA_PORT | 18801 | Media server port |
UPLOAD_PORT | 18802 | Upload server port |
MEDIA_ROOT / UPLOAD_ROOT | $HOME/projects/shared-media | Shared storage directory |
Set as environment variables before starting the servers, or edit the systemd service files.
Service names:
media-server.service — Node.js media serverupload-server.service — Python upload serverEnable auto-start (run once from your login session):
systemctl --user enable media-server.service upload-server.service
Start/stop/restart/check status:
systemctl --user start|stop|restart|status media-server.service
systemctl --user start|stop|restart|status upload-server.service
Endpoint: POST /upload (multipart/form-data, field name file)
Request:
curl -X POST -F "file=@/path/to/file.jpg" http://192.168.68.75:18802/upload
Response (JSON):
{
"filename": "file.jpg",
"size": 123456,
"download_url": "http://192.168.68.75:18801/file.jpg",
"view_url": "http://192.168.68.75:18801/file.jpg",
"saved_to": "/home/clawbox/projects/shared-media/file.jpg"
}
The file is immediately available in the shared directory and via the media server.
0.0.0.0 (all interfaces). To restrict to a specific LAN interface, set BIND_ADDR environment variable to your LAN IP (e.g., 192.168.68.75). Example:
BIND_ADDR=192.168.68.75 MEDIA_PORT=18801 node server.js
ufw, iptables). Allow only your LAN subnet to ports 18801/18802.:18801/) shows all filenames. This may leak information. If privacy is needed, disable directory listing by modifying server.js or block access via firewall.Before enabling systemd auto-start, run the servers manually to verify behavior:
# Terminal 1
cd ~/.openclaw/workspace/skills/clawbox-media-server/scripts
BIND_ADDR=192.168.68.75 node server.js
# Terminal 2
cd ~/.openclaw/workspace/skills/clawbox-media-server/scripts
BIND_ADDR=192.168.68.75 python3 upload-server.py
Then test upload/download from another device. Once satisfied, run install-all.sh to set up systemd services (with the same BIND_ADDR configured in the service files).
A previous instance is still running. Stop it first:
pkill -f server.js
pkill -f upload-server.py
Or change ports via environment variables.
The upload page is served from the same port as the upload endpoint (18802), so cross-origin issues shouldn't occur. Ensure you're accessing http://<host>:18802/ and not the old media-server copy.
Run systemctl --user enable ... from your normal login shell (not a cron or SSH non-interactive session without DBUS_SESSION_BUS_ADDRESS set). The install-all.sh script will start servers manually in any case.
skills/clawbox-media-server/
├── SKILL.md (this file)
├── server.js (media server)
├── upload-server.py (upload server)
├── upload.html (upload UI, served by upload server)
├── media-server.service (systemd unit)
├── upload-server.service (systemd unit)
└── install-all.sh (one-click installer)
All files are self-contained; no external npm/pip dependencies beyond Node.js and Python stdlib.
Open source. Feel free to modify and redistribute.