Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
# Agentic Sessions

Documentation and configuration for the **Elegoo OrangeStorm Giga** 3D printer remote setup.

## Guides

- [Printer Remote Setup](docs/printer-remote-setup.md) – Remote monitoring and control via Klipper/Mainsail, multiple cameras, and Tailscale VPN
385 changes: 385 additions & 0 deletions docs/printer-remote-setup.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,385 @@
# OrangeStorm Giga – Remote Setup Guide

This guide covers remote monitoring and control of the **Elegoo OrangeStorm Giga** 3D printer
using its built-in Klipper firmware, a Raspberry Pi for multi-camera streaming, and Tailscale
for secure remote access from anywhere in the world.

---

## Table of Contents

1. [Architecture Overview](#architecture-overview)
2. [OctoPrint vs Mainsail/Fluidd](#octoprint-vs-mainsailfluidd)
3. [Printer's Built-in Web Interface](#printers-built-in-web-interface)
4. [Raspberry Pi Setup](#raspberry-pi-setup)
5. [Camera Streaming: Crowsnest vs MotionEyeOS](#camera-streaming-crowsnest-vs-motioneyeos)
6. [Multi-Camera Setup with Crowsnest](#multi-camera-setup-with-crowsnest)
7. [Tailscale Remote Access](#tailscale-remote-access)
8. [Moonraker Configuration](#moonraker-configuration)
9. [Camera Placement Recommendations](#camera-placement-recommendations)
10. [Mobile Access](#mobile-access)
11. [References](#references)

---

## Architecture Overview

```
┌──────────────────────────────┐
│ OrangeStorm Giga Printer │
│ • Klipper firmware │
│ • Moonraker API (port 7125) │
│ • Mainsail web UI (port 80) │
└────────────┬─────────────────┘
│ LAN (Ethernet or WiFi)
┌────────────┴─────────────────┐
│ Raspberry Pi 4 / 5 │
│ • Crowsnest (multi-camera) │
│ • Camera 1 – filament view │
│ • Camera 2 – overview │
│ • Camera 3 – detail/nozzle │
│ • Tailscale node │
└────────────┬─────────────────┘
│ Tailscale VPN (WireGuard)
┌────────────┴─────────────────┐
│ Remote Device │
│ (phone, laptop, tablet) │
│ • Mainsail / Fluidd UI │
│ • Mobileraker app │
│ • Live camera feeds │
└──────────────────────────────┘
```

---

## OctoPrint vs Mainsail/Fluidd

> **Short answer: use Mainsail or Fluidd, not OctoPrint.**

The OrangeStorm Giga runs **Klipper** firmware (not Marlin). OctoPrint was designed primarily
for Marlin-based printers and, while it can be made to work with Klipper, it requires additional
plugins and misses many Klipper-specific features.

| Feature | OctoPrint + Klipper | Mainsail / Fluidd |
|---|---|---|
| Native Klipper support | ⚠️ via plugin | ✅ built-in |
| Moonraker API | ⚠️ partial | ✅ full |
| Pressure advance / input shaper | ⚠️ limited | ✅ full |
| Exclude objects mid-print | ❌ | ✅ |
| Plugin ecosystem | ✅ large | growing |
| Already on the printer | ❌ | ✅ |

The OrangeStorm Giga ships with Mainsail (or a compatible Klipper UI) accessible directly via
the printer's IP address. **No extra hardware or software is needed to get a full web-based
control panel.**

For advanced users who want a fully open-source stack without any Elegoo-specific services,
the community project [OpenOrangeStorm](https://github.com/OpenNeptune3D/OpenOrangeStorm)
installs vanilla Klipper + Moonraker + Fluidd/Mainsail.

---

## Printer's Built-in Web Interface

The printer supports WiFi and Ethernet (LAN) connections.

1. Connect the printer to your local network (WiFi or Ethernet cable).
2. Check the IP address shown on the printer's touchscreen display.
3. Open a browser on any device on the **same network** and navigate to:

```
http://<printer-ip>
```

Example: `http://192.168.1.100`

The Klipper web interface provides:

- **Temperature Display** – hotend and heated bed temperatures with preheating controls
- **Movement Control** – move the printhead along X/Y/Z axes; set compensation after levelling
- **Console** – send raw G-code commands; view executed commands
- **Task List** – drag-and-drop G-code files from ELEGOO Cura for printing
- **Fan and Output** – control part cooling fan and LED lights
- **Printer Limit** – maximum acceleration control (normally no need to change)

---

## Raspberry Pi Setup

A Raspberry Pi acts as:

- A **multi-camera streaming host** (Crowsnest service, USB cameras)
- A **Tailscale node** to bridge the local printer network to the internet

### Recommended Hardware

- Raspberry Pi 4 (2 GB RAM minimum) or Raspberry Pi 5
- MicroSD card (16 GB+) or USB SSD
- Powered USB hub (if connecting more than 2 cameras)
- 2–4 USB webcams (UVC-compatible, e.g. Logitech C270, C920, or similar)

### OS Installation

Flash [Raspberry Pi OS Lite (64-bit)](https://www.raspberrypi.com/software/) using the Raspberry
Pi Imager. Enable SSH and configure WiFi credentials in the imager before flashing.

Alternatively, flash [MainsailOS](https://docs-os.mainsail.xyz/) which includes Klipper,
Moonraker, Mainsail, and Crowsnest pre-installed — useful if you want the Pi to also act as a
secondary Klipper host or print server.

### Install Crowsnest (camera streaming)

```bash
# Update the system
sudo apt update && sudo apt upgrade -y

# Install Crowsnest
cd ~
git clone https://github.com/mainsail-crew/crowsnest.git
cd crowsnest
sudo make install
```

---

## Camera Streaming: Crowsnest vs MotionEyeOS

Two common solutions for multi-camera streaming on a Raspberry Pi are **Crowsnest** and
**MotionEyeOS**. Here is a comparison to help you choose.

| Feature | Crowsnest | MotionEyeOS |
|---|---|---|
| **Primary purpose** | 3D printer webcam streaming | General-purpose video surveillance |
| **Klipper / Mainsail integration** | ✅ Native — streams appear directly in the UI | ❌ Separate system, no Klipper awareness |
| **Stream latency** | Very low (mjpeg/ustreamer or WebRTC) | Higher — tuned for surveillance, not real-time |
| **Multi-camera support** | ✅ Multiple `[cam]` sections, separate ports | ✅ Multiple cameras via web dashboard |
| **Motion detection** | ❌ Not included | ✅ Built-in, configurable per camera |
| **Recording / snapshots** | Via timelapse plugins in Mainsail/Fluidd | ✅ Continuous or event-triggered recording |
| **Notifications / alerts** | ❌ | ✅ Email/push on motion events |
| **Cloud backup** | ❌ | ✅ Dropbox, Google Drive, NAS |
| **Resource usage on Pi** | Lightweight | Heavier — increases with camera count |
| **Runs alongside Klipper** | ✅ Same OS, single Pi | ⚠️ Separate OS image (or separate Pi) |
| **Active development** | ✅ Actively maintained | ⚠️ Slowed after 2020; new pre-releases in 2025 |
| **Setup complexity** | Simple (part of MainsailOS) | Moderate — separate image or install |

### Recommendation for this setup

**Crowsnest is the right choice** for the OrangeStorm Giga monitoring use case because:

- Streams integrate directly into the Mainsail/Fluidd web UI — no extra browser tabs or apps
needed to watch the print alongside the temperature graph and G-code console.
- It runs on the same Raspberry Pi OS as Tailscale and Moonraker — a single Pi handles
everything.
- Latency is lower, which is important when reacting to print problems (stringing, layer shifts)
in real time.
- Timelapse recording is available through the Mainsail timelapse plugin.

**Consider MotionEyeOS if you also need**:

- Motion-triggered recording and email/push alerts (e.g. detecting unauthorized access to the
printer room when not printing).
- Cloud backup of recorded footage.
- A dedicated surveillance setup independent of the 3D printing workflow.

A hybrid approach is possible: run Crowsnest on the main Pi for print monitoring, and set up a
second Pi (or a spare camera) with MotionEyeOS for room surveillance.

---

## Multi-Camera Setup with Crowsnest

### Identify Camera Devices

After plugging in USB cameras, list them using persistent paths (these do not change on reboot):

```bash
ls /dev/v4l/by-id/
```

Example output:
```
usb-Logitech_Webcam_C270_AABBCCDD-video-index0
usb-Logitech_HD_Webcam_C920_EEFF0011-video-index0
usb-Generic_USB_Camera_22334455-video-index0
```

### Configure Crowsnest

Edit `/etc/crowsnest/crowsnest.conf`:

```ini
[crowsnest]
log_level: verbose
log_path: /var/log/crowsnest/crowsnest.log
delete_log: false

# Camera 1 – overview (wide angle, full printer)
[cam overview]
mode: ustreamer
device: /dev/v4l/by-id/usb-Logitech_Webcam_C270_AABBCCDD-video-index0
port: 8080
resolution: 1280x720
max_fps: 15

# Camera 2 – filament view (spool / filament path)
[cam filament]
mode: ustreamer
device: /dev/v4l/by-id/usb-Logitech_HD_Webcam_C920_EEFF0011-video-index0
port: 8081
resolution: 1280x720
max_fps: 15

# Camera 3 – detail / nozzle view
[cam detail]
mode: ustreamer
device: /dev/v4l/by-id/usb-Generic_USB_Camera_22334455-video-index0
port: 8082
resolution: 640x480
max_fps: 10
```

Replace the `device` paths with the actual paths from your `ls /dev/v4l/by-id/` output.

### Restart Crowsnest

```bash
sudo systemctl restart crowsnest
sudo systemctl status crowsnest
```

### Add Camera Streams to Mainsail

In the Mainsail UI → **Settings → Webcams → Add Webcam** for each camera:

| Name | URL |
|---|---|
| Overview | `http://<pi-ip>:8080/?action=stream` |
| Filament | `http://<pi-ip>:8081/?action=stream` |
| Detail | `http://<pi-ip>:8082/?action=stream` |

Replace `<pi-ip>` with your Raspberry Pi's local IP address.

---

## Tailscale Remote Access

Tailscale creates a secure peer-to-peer WireGuard VPN, allowing you to access the printer and
camera streams from anywhere in the world — without exposing any ports to the internet.

### Install Tailscale on the Raspberry Pi

```bash
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
```

Follow the authentication link shown in the terminal to connect the Pi to your Tailscale account.

### Install Tailscale on Remote Devices

- **macOS / Windows**: download from [tailscale.com/download](https://tailscale.com/download)
- **iOS / Android**: install the Tailscale app from the App Store / Play Store

Sign in with the same Tailscale account on all devices.

### Find the Pi's Tailscale IP

```bash
tailscale ip -4
# Example output: 100.64.0.1
```

### Access the Printer Remotely

Once Tailscale is running on both the Pi and your remote device, access Mainsail:

```
http://<tailscale-pi-ip>
```

Access camera streams:
```
http://<tailscale-pi-ip>:8080/?action=stream # Overview
http://<tailscale-pi-ip>:8081/?action=stream # Filament
http://<tailscale-pi-ip>:8082/?action=stream # Detail
```

> **Security note**: Never forward printer ports directly to the internet via your router.
> Tailscale's VPN ensures all traffic is encrypted and authenticated.

---

## Moonraker Configuration

If the Pi also runs Moonraker (e.g. via MainsailOS), configure it to trust Tailscale IP ranges.
Edit `~/printer_data/config/moonraker.conf`:

```ini
[server]
host: 0.0.0.0
port: 7125

[authorization]
trusted_clients:
127.0.0.1
192.168.0.0/16 # local LAN (adjust to your subnet)
10.0.0.0/8 # local LAN alternative
100.64.0.0/10 # Tailscale subnet
cors_domains:
http://localhost
http://localhost:7136
http://*.local
http://*.lan
```

Restart Moonraker after changes:

```bash
sudo systemctl restart moonraker
```

---

## Camera Placement Recommendations

The OrangeStorm Giga has an 800 × 800 × 1000 mm build volume. Suggested camera positions:

| Camera | Position | Purpose |
|---|---|---|
| **Overview** | Front-top corner, wide angle | Full print bed and Z progress; print start/end check |
| **Filament** | Near the filament spool(s) | Monitor filament runout, tangles, or colour changes |
| **Detail / Nozzle** | Side of the printhead carriage (magnetic mount) | Close-up of the nozzle area; layer adhesion, stringing, blobs |

Tips:
- Use cameras with a manual focus ring or macro capability for the nozzle/detail camera.
- Ensure adequate lighting — the printer's built-in LED can be controlled via the web UI.
- Use flexible/gooseneck USB mounts to aim cameras precisely without permanent attachment.
- A powered USB hub on the Pi avoids power drop issues with multiple cameras.

---

## Mobile Access

**Mobileraker** is a mobile app for controlling Klipper printers, available for iOS and Android.

1. Install Mobileraker from the App Store / Play Store.
2. Add printer:
- **Host**: `<tailscale-pi-ip>` (when remote) or `<printer-ip>` (when on LAN)
- **Port**: `7125` (Moonraker default)
3. Mobileraker shows temperatures, print progress, camera feeds, and allows you to change
print speed and extrusion rate (flow) mid-print via the Klipper `SET_VELOCITY_LIMIT` and
`M220`/`M221` G-code commands.

---

## References

- [Elegoo OrangeStorm Giga Wiki](https://wiki.elegoo.com/orangeStorm-giga)
- [Elegoo OrangeStorm Giga User Manual (PDF)](https://download.elegoo.com/06%20FDM%20Printer/03%20OrangeStorm%20Giga/1.User%20Manual/OrangeStorm%20Giga-User%20Manual-V1.5-20240604.pdf)
- [OpenOrangeStorm – community open-source firmware](https://github.com/OpenNeptune3D/OpenOrangeStorm)
- [Moonraker documentation](https://moonraker.readthedocs.io/en/latest/configuration/)
- [Mainsail documentation](https://docs.mainsail.xyz/)
- [Crowsnest – webcam service for multiple cameras](https://github.com/mainsail-crew/crowsnest)
- [MotionEyeOS – surveillance-focused camera OS for Raspberry Pi](https://github.com/motioneye-project/motioneyeos/wiki)
- [Tailscale installation](https://tailscale.com/download)
- [Mobileraker app](https://github.com/Clon1998/mobileraker)