#3dprinting #prusa #coreone #buddy3d #camera #firmware
# Overview
**The Buddy3D camera firmware is closed source.** That applies to both the CORE One camera and the standalone pan/tilt "snowman." Prusa's open-source commitment covers printer firmware, printed parts, schematics and CAD. The camera isn't listed on their [open-source status page](https://www.prusa3d.com/page/open-source-at-prusa-research_236812/).
Don't confuse it with `Prusa-Firmware-Buddy` on GitHub. That's the **printer** firmware (named for the Buddy/xBuddy mainboard), licensed GPLv3. It has nothing to do with the camera.
Why it's closed:
- **It's a rebadged OEM camera.** Prusa's KB lists the device as a **Guardian PR1**, a Niceboy (Czech) model. Prusa says a third party produces it and Prusa's programmers "customized and tested" the firmware. Retailer copy says it was developed "under the strict supervision of both Niceboy and our team."
- **Prusa's stated reason is security.** They chose a manufacturer that let them flash custom firmware, after major camera brands wouldn't sign a no-third-party-data-sharing agreement (Prusa blog, 2025-07-08).
- **Licensing is the likely blocker.** Forum users think Niceboy holds rights to the firmware, which would block open-sourcing even if Prusa wanted to. That's speculation, but plausible. ==No Prusa statement found about ever opening it (as of 2026-09-28).==
# Design
## Hardware (CORE One version)
From the teardown in the tlchandler SD-overlay README:
| Component | Detail |
|---|---|
| OEM | Niceboy Guardian PR1 |
| SoC | Rockchip RV1103 (ARM Cortex-A7, single core) |
| OS | Linux 5.10.110, BusyBox 1.27.2, UBIFS |
| RAM | ~34 MB visible (~7 MB free at runtime) |
| Flash | Winbond W25N01GV 128 MB SPI NAND |
| Sensor | JX-F37P 2MP CMOS (1920x1080) |
| Wi-Fi | Realtek RTL8188FU (USB), 2.4 GHz 802.11n only |
| Power | USB-C, 5 V / 1 A |
The standalone snowman is reportedly the same Guardian PR1 platform with pan/tilt motors. ==Internals not independently confirmed.==
## What's open vs. closed
| Component | Status |
|---|---|
| Printer firmware (`Prusa-Firmware-Buddy`) | Open, GPLv3 |
| Camera app `/oem/usr/sbin/lp_app` (stripped ARM32 uClibc ELF) | Closed / proprietary. All camera behavior lives here |
| Linux kernel, BusyBox, U-Boot on the camera | GPL. ==No published source offer found from Prusa or Niceboy== |
| Rockchip bits (`RK_OTA_update.sh`, `librockit.so` MPI) | Vendor code, unclear license |
| Prusa Connect Camera API (`/c/snapshot`, `/c/info`) | Publicly documented OpenAPI spec |
| Live-view protocol (Socket.IO signaling + WebRTC) | Undocumented. Reverse-engineered by pibuddycam |
## Firmware distribution
- OTA packages are public tarballs: `https://connect-ota.prusa3d.com/file/cam-<version>.tar` (e.g. `cam-3.1.4.tar`, `cam-3.1.5.tar`).
- Each package contains a raw UBI `oem.img` (holds `lp_app`) and `boot.img`. It unpacks with `ubireader_extract_files`.
- The binaries are public, the source isn't.
- The camera auto-checks for updates (KB says every 24 h). Manual update is via the Prusa App.
- Known versions: 3.1.0 (2025-06/07, added LAN RTSP), 3.1.4, 3.1.5, 3.1.6 (latest seen in pibuddycam, 2026-09).
# Configuration
## Local RTSP stream (stock firmware)
```text
rtsp://<camera-ip>/live
```
- Unencrypted RTSP, LAN only. Works in VLC, Home Assistant (via go2rtc) and OctoPrint.
- RTSP has to be enabled once, normally through the Prusa App. After that you can firewall the camera off the internet and RTSP keeps working.
- Camera IPs: see [[Network IPs]] (Ganymede / Eros / Luna / Phobos cams, .80–.83).
## Pairing QR code (no Prusa Connect needed)
The pairing QR is plain-text JSON:
```json
{"ssid":"<SSID>","pwd":"<PASSWORD>","token":"none"}
```
- An empty `""` token was rejected ("Invalid QR code"). The string `"none"` works.
- Enter pairing mode by pressing RESET for 4 s (use an Allen key on the CORE One version).
- 2.4 GHz only, WPA/WPA2 (no WPA3). SSID max 26 chars. Firmware older than 3.1.0 can't handle hidden SSIDs or special characters in the password.
- Enabling RTSP without the app: see the Reddit thread "Buddy3D camera setup with no cloud or internet" (linked from the forum thread in References). A forum user confirmed on 2026-04-25 that it works on a camera never set up in Prusa Connect.
## Cloud endpoints (for firewall rules)
Hosts the camera contacts:
- `connect.prusa3d.com`: Prusa Connect API
- `webcam.connect.prusa3d.com`: snapshot / camera-info upload
- `camera-signaling.prusa3d.com`: Socket.IO / WebRTC signaling
- `camera-service-api.prusa3d.com`: WebRTC camera registry / ICE config
- `connect-ota.prusa3d.com`: firmware OTA
- `timezone.prusa3d.com`
- `prusa3d.pool.ntp.org`
Blocking these kills Connect/app features and OTA. LAN RTSP survives.
## SD-card overlay hook
- The stock init script `/oem/usr/bin/RkLunch.sh` checks for `/mnt/sdcard/lp_app.sh`. If it's there, the script runs it **instead of** launching `lp_app` directly.
- This is the hook every community mod uses. Nothing gets written to flash, so pulling the card and rebooting restores factory behavior.
- SD card must be FAT32; the camera won't read exFAT for this. Scripts run via `sh`, since FAT32 has no execute bit.
- The tlchandler overlay adds a local web UI, RTSP toggle, cloud/OTA blocking via `/etc/hosts`, an AP fallback (`Buddy3D-XXXX` at `192.168.4.1`), NTP, custom sounds, and an optional telnet root shell.
- Print-synced timelapse uses printer UDP metrics. Add to the end of Start G-code in PrusaSlicer:
```gcode
; === Camera Timelapse Setup ===
M334 <camera_ip> 8514 13514
M331 is_printing
M331 pos_z
```
## Security notes
- Telnet is off by default but can be started from `lp_app.sh`. ==Reported root password is hardcoded as `rockchip`.== That's a single forum report (2025-12), not verified on my cameras.
- The camera token lives in `xhr_config.ini`. Deleting it just regenerates it, and the camera phones home.
- Root is remounted read-only during init but can be remounted read-write.
- No HTTPS anywhere on the local side. Treat the cams as untrusted IoT and keep them on a restricted VLAN.
# Resources
Community projects and alternatives:
- [tlchandler/Improved-Buddy3D-Camera-for-Prusa-CORE-One](https://github.com/tlchandler/Improved-Buddy3D-Camera-for-Prusa-CORE-One): MIT SD-card overlay described above. Forks: [nebhale](https://github.com/nebhale/Improved-Buddy3D-Camera-for-Prusa-CORE-One), [Taxom](https://github.com/Taxom/Improved-Buddy3D-Camera-for-Prusa-CORE-One)
- [nebhale/snapshot-buddy](https://github.com/nebhale/snapshot-buddy): Apache-2.0 layer-triggered snapshots/timelapse via go2rtc
- [bullitt186/pibuddycam](https://github.com/bullitt186/pibuddycam): MIT. Reverse-engineered the Buddy3D cloud protocol (fw through 3.1.6). A Pi Zero 2 W + CSI camera registers to Connect as a genuine Buddy3D and adds local RTSP, ONVIF, MQTT/HA discovery and timelapse. Its `docs/reverse-engineering/` has the protocol spec
- [Prusa Connect Camera API](https://help.prusa3d.com/article/prusa-connect-camera-api_569012) ([OpenAPI docs](https://connect.prusa3d.com/docs/cameras/openapi/)): official route for any third-party camera ("Add new other camera" → token). Example: [jtee3d/prusa_connect_rtsp](https://github.com/jtee3d/prusa_connect_rtsp) pushes RTSP snapshots into Connect
- [Thingino](https://github.com/themactep/thingino-firmware): open camera firmware, but **Ingenic-only**. Doesn't apply here, since the Buddy3D is Rockchip. No complete open replacement firmware exists for this camera as of 2026-09-28
# References
- [Buddy3D Camera – Prusa product page](https://www.prusa3d.com/product/buddy3d-camera/)
- [Buddy3D Camera – Prusa Knowledge Base](https://help.prusa3d.com/article/buddy3d-camera_821264)
- [Prusa blog: A big update for the Buddy3D cameras and Prusa App (2025-07-08)](https://blog.prusa3d.com/a-big-update-for-the-buddy3d-cameras-and-prusa-app-is-here_117723/)
- [Open-source at Prusa Research](https://www.prusa3d.com/page/open-source-at-prusa-research_236812/)
- [Prusa-Firmware-Buddy (GitHub)](https://github.com/prusa3d/Prusa-Firmware-Buddy)
- [Printed Solid – Buddy3D listing (Niceboy firmware wording)](https://www.printedsolid.com/collections/all/products/original-prusa-buddy3d-camera)
- [Prusa Forum: Request to Open Buddy3D Camera](https://forum.prusa3d.com/forum/prusa-core-one-hardware-firmware-and-software-help/request-to-open-buddy3d-camera/): OEM discussion, QR format, "none" token, Reddit no-cloud RTSP link
- [Prusa Forum: Setup only for PrusaLink?](https://forum.prusa3d.com/forum/buddy3d/setup-only-for-prusalink/): cloud hosts, telnet/root password, kernel details
- [pibuddycam NOTICE.md](https://github.com/bullitt186/pibuddycam/blob/main/NOTICE.md) and [sources.md](https://github.com/bullitt186/pibuddycam/blob/main/docs/reverse-engineering/sources.md): firmware package contents, OTA URL pattern, endpoints
Related notes:
- [[Network IPs]]: camera IP reservations
- [[Print Farm]]: printer ↔ Buddy3D camera links
- [[Core One Mods]]
# Changelog
## 2026-09-28
- Note created from research into whether the Buddy3D firmware is open source. Covers licensing status, CORE One hardware teardown, OTA packaging, local/no-cloud setup, SD overlay hook, security notes and community alternatives.