#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.