summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--machines/fourmi/default.nix1
-rw-r--r--modules/go2rtc.nix36
-rw-r--r--modules/klipper.nix7
3 files changed, 44 insertions, 0 deletions
diff --git a/machines/fourmi/default.nix b/machines/fourmi/default.nix
index 091391a..b6b8712 100644
--- a/machines/fourmi/default.nix
+++ b/machines/fourmi/default.nix
@@ -7,6 +7,7 @@
./hardware.nix
./devices.nix
+ ../../modules/go2rtc.nix
../../modules/klipper.nix
];
diff --git a/modules/go2rtc.nix b/modules/go2rtc.nix
new file mode 100644
index 0000000..7ee7ae3
--- /dev/null
+++ b/modules/go2rtc.nix
@@ -0,0 +1,36 @@
+{ me, ... }:
+
+let
+ ffmpegDevice =
+ device: format: resolution: hz:
+ "ffmpeg:device?video=${device}&input_format=${format}&video_size=${resolution}&framerate=${hz}#video=h264#hardware";
+
+ go2rtcPort = 1984;
+ webrtcPort = 8555;
+in
+{
+ services.go2rtc = {
+ enable = true;
+
+ settings = {
+ api = {
+ listen = "${me.tailscale.ip}:${toString go2rtcPort}";
+ base_path = "/webcam";
+ origin = "*"; # stop cors annoyance!
+ };
+
+ webrtc =
+ let
+ address = "${me.tailscale.ip}:${toString webrtcPort}";
+ in
+ {
+ listen = address;
+ candidates = [ address ];
+ };
+
+ streams = {
+ webcam = ffmpegDevice "/dev/video0" "yuyv422" "1280x720" "30";
+ };
+ };
+ };
+}
diff --git a/modules/klipper.nix b/modules/klipper.nix
index 4f7be74..646969f 100644
--- a/modules/klipper.nix
+++ b/modules/klipper.nix
@@ -15,6 +15,8 @@ let
${../assets/printer/mainsail.cfg} \
> $out
'';
+
+ webcamPort = 1984;
in
{
users.users.klipper = {
@@ -80,6 +82,11 @@ in
forceSSL = true;
listenAddresses = [ me.tailscale.ip ];
+ locations."/webcam" = {
+ proxyPass = "http://${me.tailscale.ip}:${toString webcamPort}";
+ proxyWebsockets = true;
+ };
+
extraConfig = ''
access_log /var/log/nginx/3d.access.log json_combined;
'';