Skip to content

Instantly share code, notes, and snippets.

@nunofgs
Last active February 26, 2025 15:09
Show Gist options
  • Save nunofgs/84861ee453254823be6b069ebbce9ad2 to your computer and use it in GitHub Desktop.
Save nunofgs/84861ee453254823be6b069ebbce9ad2 to your computer and use it in GitHub Desktop.
Use any RTSP camera with Prusa Connect

I use a cheap Tapo C100 webcam to monitor my 3D prints. It supports RTSP.

Screenshot 2023-07-17 at 23 26 34

Instructions

  1. Go to the Cameras section at https://connect.prusa3d.com
  2. Add a new camera.
  3. Click the QR code link
  4. Click "Start Camera"
  5. Open your browser's inspector window and look for the "/snapshot" request.
  6. Copy the "Fingerprint" and "Token" headers into the docker-compose below.

The end result!

Screenshot 2023-07-17 at 23 13 10

prusa-camera:
image: linuxserver/ffmpeg
restart: always
entrypoint: /bin/bash
command: /upload.sh
environment:
RTSP_URL: "rtsp://<username>:<password>@<camera.ip.address>/stream1"
FINGERPRINT: "<fingerprint-from-prusa-connect>"
TOKEN: "<token-from-prusa-connect-link>"
volumes:
- ./upload.sh:/upload.sh
#!/bin/bash
# Set default values for environment variables
: "${HTTP_URL:=https://webcam.connect.prusa3d.com/c/snapshot}"
: "${DELAY_SECONDS:=10}"
: "${LONG_DELAY_SECONDS:=60}"
while true; do
# Grab a frame from the RTSP stream using FFmpeg (timeout at 5s)
ffmpeg \
-timeout 5000000 \
-loglevel quiet \
-stats \
-y \
-rtsp_transport tcp \
-i "$RTSP_URL" \
-f image2 \
-vframes 1 \
-pix_fmt yuvj420p \
output.jpg
# If no error, upload it.
if [ $? -eq 0 ]; then
# POST the image to the HTTP URL using curl
curl -X PUT "$HTTP_URL" \
-H "accept: */*" \
-H "content-type: image/jpg" \
-H "fingerprint: $FINGERPRINT" \
-H "token: $TOKEN" \
--data-binary "@output.jpg" \
--no-progress-meter \
--compressed
# Reset delay to the normal value
DELAY=$DELAY_SECONDS
else
echo "FFmpeg returned an error. Retrying after ${LONG_DELAY_SECONDS}s..."
# Set delay to the longer value
DELAY=$LONG_DELAY_SECONDS
fi
sleep "$DELAY"
done
@calexandre
Copy link

calexandre commented May 13, 2024

If anyone is interested to make this work on octoprint, I've forked the gist and modified the script to get image snapshot from the rpi camera api.

@TheChiefSmeg
Copy link

Is there perhaps a video somewhere on how I can install the Tapo C100 in Prusa Cennect? I have tried the above, but I can't figure it out myself. The camera itself works and I can access it via RTSP. I'm a total novice and I have no idea how to install this.

Did you ever find out how to do this? I have no idea what to do with the docker stuff once I’ve added the info to it (total novice)

@s31teg
Copy link

s31teg commented Jul 16, 2024

[ChiefPoints] above has done all the work and a guide.

@ChiefPoints
Copy link

Is there perhaps a video somewhere on how I can install the Tapo C100 in Prusa Cennect? I have tried the above, but I can't figure it out myself. The camera itself works and I can access it via RTSP. I'm a total novice and I have no idea how to install this.

Did you ever find out how to do this? I have no idea what to do with the docker stuff once I’ve added the info to it (total novice)

jtee3d set up a docker for it, and it does work: https://gist.github.com/nunofgs/84861ee453254823be6b069ebbce9ad2?permalink_comment_id=4793596#gistcomment-4793596

@DK-1989
Copy link

DK-1989 commented Nov 11, 2024

Could you add the x2 delays as variables also to play with this?

I have added the following optional environment variables: FRAME_CAPTURE_DELAY, CAMERA_CYCLE_DELAY and CONNECTION_TIMEOUT_DELAY

My wish would be support for MJPEG in addition to RTSP.

I have added MJPEG stream support.

Where can I put the delay lines? in the docker compose.yml or do I need to make another file? I have everything working but want the snapshots faster than the standard 10 sec?

@xssociety
Copy link

Ich bekomme ständig die Fehlermeldung "Invalid Fingerprint" ist das Problem bekannt, was mache ich falsch?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment