a4797227ea
Full documentation of Frigate NVR setup, cam-control webapp architecture, PTZ CGI command reference, OctoPrint timelapse storage, gotchas and lessons learned. Ready for cold pickup in a future session. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
5.6 KiB
5.6 KiB
SESSION.md — 3D Printing Project
Context Files
./CLAUDE.md— full project docs (printer, cameras, Pi, Frigate, cam-control, PTZ commands)./CONTEXT.md— raw hardware purchase inventory (Amazon order data)./GITEA_API.md— Gitea push credentials and commit convention
Project Summary
3D printing setup with one Creality Ender 3 V3 SE, remotely managed via OctoPrint on a Raspberry Pi 3 B+. Two TENVIS IP cameras on an isolated router subnet are proxied through the Pi (socat) and fed to Frigate NVR + a custom PTZ control webapp. Timelapses stored on tank (node-173) via SMB.
Memory Discipline
- Update
SESSION.mdimmediately when a durable fact, decision, or fix is discovered. - Before every final reply, run a memory check and append any missing durable notes.
- End every reply with one line:
Session memory: updatedorSession memory: no new durable facts.
Hardware
Printer
| Printer | Speed | Extruder | Auto-Level | Build Volume |
|---|---|---|---|---|
| Creality Ender 3 V3 SE | 250 mm/s | Sprite Direct Drive | CR Touch | 220 x 220 x 250 mm |
Filament Inventory
| Material | Color | Brand | Diameter |
|---|---|---|---|
| PLA | White | OVERTURE | 1.75 mm |
| PLA | Black | OVERTURE | 1.75 mm |
| PLA | Black | ELEGOO | 1.75 mm |
| PLA | Dark Blue | ELEGOO | 1.75 mm |
| PLA | Transparent | SUNLU | 1.75 mm |
| ABS | Black | Creality | 1.75 mm |
| PETG | Red | Creality | 1.75 mm |
| PETG | Black | Creality | 1.75 mm |
Accessories
- Creality Hardened Steel MK8 Nozzles (5-pack) — for abrasive filaments
Gitea
- Repo: https://git.sethpc.xyz/Seth/3d-printing
- Remote:
https://Seth:REDACTED_GITEA_TOKEN@git.sethpc.xyz/Seth/3d-printing.git - API key: see
./GITEA_API.md
Session Notes
Initial setup (2026-03-17)
- Created SESSION.md from template in SESSION.default.md
- Organized CONTEXT.md inventory data into structured hardware/filament tables
Camera/Pi discovery (2026-03-24)
- Pi 3B+ (
seth-pi) found at 192.168.0.102 (wlan0) / 192.168.0.101 (eth0) - eth0 connects to isolated router with 2 IP cameras (192.168.0.100, 192.168.0.103)
- 6 socat proxy services bridge camera HTTP/RTSP/ONVIF to main network
- go2rtc v1.9.14 restreams both cameras (H.264 hw + MJPEG)
- OctoPrint running on port 5000
- Camera creds: admin/admin (default, isolated subnet)
- Created CLAUDE.md with full infrastructure documentation
- Document OctoPrint setup — done, documented in CLAUDE.md
- Camera make: TENVIS (both cameras)
Frigate NVR setup (2026-03-24)
- Added both cameras to Frigate 0.17 on CT 241 (192.168.0.220)
- Config at
/opt/frigate/config/config.yml, docker-compose at/opt/frigate/docker-compose.yml - Added port 1984 mapping to docker-compose (go2rtc API, needed for cam-control)
- Streams:
printer_cam1,printer_cam2— pulled from Pi socat RTSP proxies - Object tracking disabled, CPU detector only
- Gotcha: Frigate 0.17 changed record config schema — no
retain.daysorevents, usecontinuous.days/motion.days
Camera control panel (2026-03-24)
- Built single-page PTZ control webapp (
cam-control/server.py) - Deployed to Frigate CT 241 at http://192.168.0.220:8090
- systemd service
cam-control.serviceenabled and running - Features: snapshot-polled live feeds (~5fps), PTZ D-pad, speed, flip/mirror
- Uses Frigate's go2rtc frame.jpeg endpoint (not MJPEG stream — MJPEG proxy through Python urllib doesn't work reliably)
- Must use ThreadingMixIn — single-threaded HTTPServer blocks on stream connections
- cam2 flipped 180 (flip=on, mirror=on)
OctoPrint timelapse fix (2026-03-24)
- Pi fstab pointed to pve197 for tank SMB — updated to node-173 post-migration
- Created octoprint Samba user on node-173 (creds: octoprint/octoprint)
- Timelapses dir at /tank/Timelapses now accessible, OctoPrint restarted
Gotchas & Lessons Learned
- Pi's go2rtc API binds to
127.0.0.1only — not accessible remotely. Use Frigate's go2rtc instead. - Pi's wlan0 is DHCP (192.168.0.102 last seen) — may change. Use
nmap -sn 192.168.0.0/24 | grep Raspberryfrom a node to find it. - Pi SSH is key-only as
seth— reachable viassh seth-pifrom steel141, or hop through pve197. - MJPEG streaming through Python urllib is unreliable (0 bytes returned) — use snapshot polling (frame.jpeg) instead.
- Frigate 0.17 config schema differs from older docs online — query the Python schema if unsure:
docker exec frigate python3 -c 'from frigate.config import FrigateConfig; ...' - OctoPrint SMB mount must point to wherever tank lives (currently node-173 at .173). If tank moves again, update Pi fstab.
- Caddy config for
octopi.sethpc.xyzis on CT 600 (192.168.0.185) at/etc/caddy/Caddyfile— includes camera stream rewrites at/cam1.mjpeg,/cam2.mjpeg,/cam1.jpg,/cam2.jpg.
Open threads
- Add slicer profiles and recommended print settings per filament type
- Change default camera passwords (admin/admin) — update in: go2rtc.yaml (Pi), Frigate config, cam-control server.py
- Make Pi wlan0 IP static (currently DHCP, could change)
- Fix Pi's go2rtc to bind to 0.0.0.0 if remote MJPEG streaming is ever needed
- OctoPrint config location unknown — not at default
/home/seth/.octoprint/. Find with:find / -name config.yaml -path '*octoprint*'— it's at/home/octoprint/.octoprint/(runs asoctoprintuser, venv at/home/octoprint/venv/)
Completed
- Document OctoPrint setup
- Identify cameras: TENVIS, model C9F0SeZ0N0P4L0 (Hi3510 SoC), firmware V9.1.6.1.24-20170925
- Set up Gitea repo — https://git.sethpc.xyz/Seth/3d-printing
- Add cameras to Frigate NVR
- Build PTZ camera control webapp
- Fix OctoPrint timelapse mount (pve197 → node-173)