Files
Mortdecai a4797227ea docs: comprehensive session documentation for handoff
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>
2026-03-26 19:17:25 -04:00

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.md immediately 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: updated or Session 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

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.days or events, use continuous.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.service enabled 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.1 only — 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 Raspberry from a node to find it.
  • Pi SSH is key-only as seth — reachable via ssh seth-pi from 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.xyz is 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 as octoprint user, 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)