From 4aff7a2b622e02290bfdcad384e79efa386a3e3c Mon Sep 17 00:00:00 2001
From: Claude <noreply@anthropic.com>
Date: Sun, 13 Jul 2025 12:44:02 +0000
Subject: [PATCH 1/7] Add Selkies desktop streaming module based on kasmvnc,
 using Selkies-GStreamer

---
 registry/coder/modules/selkies/README.md     | 25 ++++++
 registry/coder/modules/selkies/main.test.ts  | 41 +++++++++
 registry/coder/modules/selkies/main.tf       | 87 ++++++++++++++++++++
 registry/coder/modules/selkies/path_vnc.html | 81 ++++++++++++++++++
 registry/coder/modules/selkies/run.sh        | 45 ++++++++++
 5 files changed, 279 insertions(+)
 create mode 100644 registry/coder/modules/selkies/README.md
 create mode 100644 registry/coder/modules/selkies/main.test.ts
 create mode 100644 registry/coder/modules/selkies/main.tf
 create mode 100644 registry/coder/modules/selkies/path_vnc.html
 create mode 100644 registry/coder/modules/selkies/run.sh

diff --git a/registry/coder/modules/selkies/README.md b/registry/coder/modules/selkies/README.md
new file mode 100644
index 00000000..af042320
--- /dev/null
+++ b/registry/coder/modules/selkies/README.md
@@ -0,0 +1,25 @@
+---
+display_name: Selkies Desktop
+description: Stream and access remote Linux desktops using Selkies-GStreamer
+icon: ../../../../.icons/vnc.svg
+maintainer_github: coder
+verified: true
+tags: [selkies, desktop, streaming]
+---
+
+# Selkies Desktop
+
+Automatically install [Selkies-GStreamer](https://selkies.io/) in a workspace, and create an app to access it via the dashboard.
+
+```tf
+module "selkies" {
+  count               = data.coder_workspace.me.start_count
+  source              = "registry.coder.com/coder/selkies/coder"
+  # version = "1.0.0"
+  agent_id            = coder_agent.example.id
+  # Selkies does not require desktop_environment option
+  subdomain           = true
+}
+```
+
+> **Note:** Requires X11 desktop and PulseAudio; see [Selkies quick start docs](https://selkies-project.github.io/selkies/start/#quick-start) for setup.
diff --git a/registry/coder/modules/selkies/main.test.ts b/registry/coder/modules/selkies/main.test.ts
new file mode 100644
index 00000000..fb883695
--- /dev/null
+++ b/registry/coder/modules/selkies/main.test.ts
@@ -0,0 +1,41 @@
+import { describe, expect, it } from "bun:test";
+import {
+  runTerraformApply,
+  runTerraformInit,
+  testRequiredVariables,
+} from "~test";
+
+const allowedDesktopEnvs = ["xfce", "kde", "gnome", "lxde", "lxqt"] as const;
+type AllowedDesktopEnv = (typeof allowedDesktopEnvs)[number];
+
+type TestVariables = Readonly<{
+  agent_id: string;
+  # desktop_environment not required for Selkies
+  port?: string;
+  selkies_version?: string;
+}>;
+
+describe("Selkies Desktop", async () => {
+  await runTerraformInit(import.meta.dir);
+  testRequiredVariables<TestVariables>(import.meta.dir, {
+    agent_id: "foo",
+    desktop_environment: "gnome",
+  });
+
+  it("Successfully installs for all expected Kasm desktop versions", async () => {
+    const testVars = {
+      agent_id: "foo",
+      selkies_version: "latest"
+    };
+    runTerraformApply<TestVariables>(import.meta.dir, testVars);
+      const applyWithEnv = () => {
+        runTerraformApply<TestVariables>(import.meta.dir, {
+          agent_id: "foo",
+          desktop_environment: v,
+        });
+      };
+
+      expect(applyWithEnv).not.toThrow();
+    }
+  });
+});
diff --git a/registry/coder/modules/selkies/main.tf b/registry/coder/modules/selkies/main.tf
new file mode 100644
index 00000000..e7a572f9
--- /dev/null
+++ b/registry/coder/modules/selkies/main.tf
@@ -0,0 +1,87 @@
+terraform {
+  required_version = ">= 1.0"
+
+  required_providers {
+    coder = {
+      source  = "coder/coder"
+      version = ">= 2.5"
+    }
+  }
+}
+
+variable "agent_id" {
+  type        = string
+  description = "The ID of a Coder agent."
+}
+
+variable "port" {
+  type        = number
+  description = "The port to run KasmVNC on."
+  default     = 6800
+}
+
+variable "selkies_version" {
+  type        = string
+  description = "Version of Selkies-GStreamer to install (latest recommended)."
+  default     = "latest"
+}
+
+variable "desktop_environment" {
+  type        = string
+  description = "Specifies the desktop environment of the workspace. This should be pre-installed on the workspace."
+
+  validation {
+    condition     = contains(["xfce", "kde", "gnome", "lxde", "lxqt"], var.desktop_environment)
+    error_message = "Invalid desktop environment. Please specify a valid desktop environment."
+  }
+}
+
+variable "order" {
+  type        = number
+  description = "The order determines the position of app in the UI presentation. The lowest order is shown first and apps with equal order are sorted by name (ascending order)."
+  default     = null
+}
+
+variable "group" {
+  type        = string
+  description = "The name of a group that this app belongs to."
+  default     = null
+}
+
+variable "subdomain" {
+  type        = bool
+  default     = true
+  description = "Is subdomain sharing enabled in your cluster?"
+}
+
+resource "coder_script" "kasm_vnc" {
+  agent_id     = var.agent_id
+  display_name = "KasmVNC"
+  icon         = "/icon/kasmvnc.svg"
+  run_on_start = true
+  script = templatefile("${path.module}/run.sh", {
+    PORT                = var.port,
+    DESKTOP_ENVIRONMENT = var.desktop_environment,
+    KASM_VERSION        = var.kasm_version
+    SUBDOMAIN           = tostring(var.subdomain)
+    PATH_VNC_HTML       = var.subdomain ? "" : file("${path.module}/path_vnc.html")
+  })
+}
+
+resource "coder_app" "kasm_vnc" {
+  agent_id     = var.agent_id
+  slug         = "kasm-vnc"
+  display_name = "KasmVNC"
+  url          = "http://localhost:${var.port}"
+  icon         = "/icon/kasmvnc.svg"
+  subdomain    = var.subdomain
+  share        = "owner"
+  order        = var.order
+  group        = var.group
+
+  healthcheck {
+    url       = "http://localhost:${var.port}/app"
+    interval  = 5
+    threshold = 5
+  }
+}
diff --git a/registry/coder/modules/selkies/path_vnc.html b/registry/coder/modules/selkies/path_vnc.html
new file mode 100644
index 00000000..849ec777
--- /dev/null
+++ b/registry/coder/modules/selkies/path_vnc.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Path-Sharing Bounce Page</title>
+    <style type="text/css">
+      :root {
+        color-scheme: light dark;
+        --dark: #121212;
+        --header-bg: rgba(127,127,127,0.2);
+        --light: white;
+        --rule-color: light-dark(rgba(0,0,0,0.8), rgba(255,255,255,0.8));
+        background-color: light-dark(var(--light), var(--dark));
+        color: light-dark(var(--dark), var(--light));
+      }
+      body, h1, p {
+        box-sizing: border-box;
+        margin:0; padding:0;
+      }
+      body{
+        font-family:Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
+      }
+      h1{
+        width: 100%;
+        padding: 1rem;
+        letter-spacing: -1.5pt;
+        padding-bottom:10px;
+        border-bottom: 1px solid var(--rule-color);
+        background-color: var(--header-bg);
+      }
+      p {
+        padding: 1rem; letter-spacing: -0.5pt;}
+      a.indent { display:inline-block; padding-top:0.5rem; padding-left: 2rem; font-size:0.8rem }
+      </style>
+    <meta charset="UTF-8" />
+  </head>
+  <body>
+    <h1>Path-Sharing Bounce Page</h1>
+    <p>
+      This application is being served via path sharing.
+      If you are not redirected, <span id="help">check the
+      Javascript console in your browser's developer tools
+      for more information.</span>
+    </p>
+  </body>
+  <script language="javascript">
+    // This page exists to satisfy the querystring driven client API
+    // specified here - https://raw.githubusercontent.com/kasmtech/noVNC/bce2d6a7048025c6e6c05df9d98b206c23f6dbab/docs/EMBEDDING.md
+    // tl;dr:
+    // * `host` - The WebSocket host to connect to.
+    //      This is just the hostname component of the original URL
+    // * `port` - The WebSocket port to connect to.
+    //      It doesn't look like we need to set this unless it's different
+    //      than the incoming http request.
+    // * `encrypt` - If TLS should be used for the WebSocket connection.
+    //      we base this on whether or not the protocol is `https`, seems
+    //      reasonable for now.
+    // * `path` - The WebSocket path to use.
+    //      This apparently doesn't tolerate a leading `/` so we use a
+    //      function to tidy that up.
+    function trimFirstCharIf(str, char) {
+       return str.charAt(0) === char ? str.slice(1) : str;
+    }
+    function trimLastCharIf(str, char) {
+       return str.endsWith("/") ? str.slice(0,str.length-1) : str;
+    }
+    const newloc = new URL(window.location);
+    const h = document.getElementById("help")
+
+    // Building the websockify path must happen before we append the filename to newloc.pathname
+    newloc.searchParams.append("path",
+      trimLastCharIf(trimFirstCharIf(newloc.pathname,"/"),"/")+"/websockify");
+    newloc.searchParams.append("encrypted", newloc.protocol==="https:"? true : false);
+
+    newloc.pathname += "vnc.html"
+    console.log(newloc);
+
+    h.innerHTML = `click <a id="link" href="${newloc.toString()}">here</a> to go to the application.
+    <br/><br/>The rewritten URL is:<br/><a id="link" class="indent" href="${newloc.toString()}">${newloc.toString()}</a>`
+    window.location = newloc.href;
+  </script>
+</html>
diff --git a/registry/coder/modules/selkies/run.sh b/registry/coder/modules/selkies/run.sh
new file mode 100644
index 00000000..45846fbe
--- /dev/null
+++ b/registry/coder/modules/selkies/run.sh
@@ -0,0 +1,45 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+error() { printf "💀 ERROR: %s\n" "$@"; exit 1; }
+
+: "${PORT?Must set PORT}"    # Port for web UI
+: "${SELKIES_VERSION:=latest}"
+
+SELKIES_DIR="/opt/selkies-gstreamer-$SELKIES_VERSION"
+if [[ ! -d "$SELKIES_DIR" ]]; then
+  apt-get update -yq && apt-get install -yq --no-install-recommends \
+    ca-certificates curl jq tar gzip libpulse0 libegl1-mesa xvfb pulseaudio
+  mkdir -p "$SELKIES_DIR"
+  SELKIES_VERSION_RESOLVED=$SELKIES_VERSION
+  if [[ "$SELKIES_VERSION" == "latest" ]]; then
+    SELKIES_VERSION_RESOLVED=$(curl -fsSL "https://api.github.com/repos/selkies-project/selkies-gstreamer/releases/latest" | jq -r .tag_name | sed 's/^v//')
+  fi
+  curl -fsSL "https://github.com/selkies-project/selkies-gstreamer/releases/download/v${SELKIES_VERSION_RESOLVED}/selkies-gstreamer-portable-v${SELKIES_VERSION_RESOLVED}_amd64.tar.gz" \
+      | tar -xzf - -C "$SELKIES_DIR"
+fi
+
+export DISPLAY=":0"
+export PULSE_SERVER="unix:${XDG_RUNTIME_DIR:-/tmp}/pulse/native"
+
+BASIC_USER="${USER:-coder}"
+BASIC_PASS="mypasswd"
+
+set +e
+"$SELKIES_DIR/selkies-gstreamer-run" \
+    --addr=0.0.0.0 \
+    --port="$PORT" \
+    --enable_https=false \
+    --basic_auth_user="$BASIC_USER" \
+    --basic_auth_password="$BASIC_PASS" \
+    --encoder=x264enc \
+    > /tmp/selkies_desktop.log 2>&1 &
+sleep 3
+RETVAL=$(pgrep -f selkies-gstreamer-run > /dev/null && echo 0 || echo 1)
+set -e
+if [[ $RETVAL -ne 0 ]]; then
+  echo "ERROR: Failed to start Selkies server"
+  cat /tmp/selkies_desktop.log || true
+  exit 1
+fi
+printf "🚀 Selkies Desktop streaming started successfully!\n"

From 95e238049059eebcfc4f55a3c7602cf66d8023d3 Mon Sep 17 00:00:00 2001
From: Claude <noreply@anthropic.com>
Date: Sun, 13 Jul 2025 12:49:31 +0000
Subject: [PATCH 2/7] Fix: remove all KasmVNC references, rename to Selkies
 terminology

---
 registry/coder/modules/selkies/main.tf | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/registry/coder/modules/selkies/main.tf b/registry/coder/modules/selkies/main.tf
index e7a572f9..51ade855 100644
--- a/registry/coder/modules/selkies/main.tf
+++ b/registry/coder/modules/selkies/main.tf
@@ -16,7 +16,7 @@ variable "agent_id" {
 
 variable "port" {
   type        = number
-  description = "The port to run KasmVNC on."
+  description = "The port to run Selkies Desktop on."
   default     = 6800
 }
 
@@ -26,12 +26,12 @@ variable "selkies_version" {
   default     = "latest"
 }
 
-variable "desktop_environment" {
+variable "# desktop_environment (unused in Selkies)" {
   type        = string
   description = "Specifies the desktop environment of the workspace. This should be pre-installed on the workspace."
 
   validation {
-    condition     = contains(["xfce", "kde", "gnome", "lxde", "lxqt"], var.desktop_environment)
+    condition     = contains(["xfce", "kde", "gnome", "lxde", "lxqt"], var.# desktop_environment (unused in Selkies))
     error_message = "Invalid desktop environment. Please specify a valid desktop environment."
   }
 }
@@ -56,13 +56,13 @@ variable "subdomain" {
 
 resource "coder_script" "kasm_vnc" {
   agent_id     = var.agent_id
-  display_name = "KasmVNC"
-  icon         = "/icon/kasmvnc.svg"
+  display_name = "Selkies Desktop"
+  icon         = "/icon/selkies.svg"
   run_on_start = true
   script = templatefile("${path.module}/run.sh", {
     PORT                = var.port,
-    DESKTOP_ENVIRONMENT = var.desktop_environment,
-    KASM_VERSION        = var.kasm_version
+    DESKTOP_ENVIRONMENT = var.# desktop_environment (unused in Selkies),
+    KASM_VERSION        = var.selkies_version
     SUBDOMAIN           = tostring(var.subdomain)
     PATH_VNC_HTML       = var.subdomain ? "" : file("${path.module}/path_vnc.html")
   })
@@ -71,9 +71,9 @@ resource "coder_script" "kasm_vnc" {
 resource "coder_app" "kasm_vnc" {
   agent_id     = var.agent_id
   slug         = "kasm-vnc"
-  display_name = "KasmVNC"
+  display_name = "Selkies Desktop"
   url          = "http://localhost:${var.port}"
-  icon         = "/icon/kasmvnc.svg"
+  icon         = "/icon/selkies.svg"
   subdomain    = var.subdomain
   share        = "owner"
   order        = var.order

From fc5e7fa93675adde7d5b4596e8a15b643abef263 Mon Sep 17 00:00:00 2001
From: Claude <noreply@anthropic.com>
Date: Sun, 13 Jul 2025 12:51:40 +0000
Subject: [PATCH 3/7] Cleanup: remove dead and unused code from Selkies module

---
 registry/coder/modules/selkies/main.tf | 32 ++++++++------------------
 1 file changed, 10 insertions(+), 22 deletions(-)

diff --git a/registry/coder/modules/selkies/main.tf b/registry/coder/modules/selkies/main.tf
index 51ade855..20ff46cd 100644
--- a/registry/coder/modules/selkies/main.tf
+++ b/registry/coder/modules/selkies/main.tf
@@ -1,6 +1,5 @@
 terraform {
   required_version = ">= 1.0"
-
   required_providers {
     coder = {
       source  = "coder/coder"
@@ -26,16 +25,6 @@ variable "selkies_version" {
   default     = "latest"
 }
 
-variable "# desktop_environment (unused in Selkies)" {
-  type        = string
-  description = "Specifies the desktop environment of the workspace. This should be pre-installed on the workspace."
-
-  validation {
-    condition     = contains(["xfce", "kde", "gnome", "lxde", "lxqt"], var.# desktop_environment (unused in Selkies))
-    error_message = "Invalid desktop environment. Please specify a valid desktop environment."
-  }
-}
-
 variable "order" {
   type        = number
   description = "The order determines the position of app in the UI presentation. The lowest order is shown first and apps with equal order are sorted by name (ascending order)."
@@ -54,33 +43,32 @@ variable "subdomain" {
   description = "Is subdomain sharing enabled in your cluster?"
 }
 
-resource "coder_script" "kasm_vnc" {
+resource "coder_script" "selkies_desktop" {
   agent_id     = var.agent_id
   display_name = "Selkies Desktop"
-  icon         = "/icon/selkies.svg"
+  icon         = "/icon/vnc.svg"
   run_on_start = true
   script = templatefile("${path.module}/run.sh", {
-    PORT                = var.port,
-    DESKTOP_ENVIRONMENT = var.# desktop_environment (unused in Selkies),
-    KASM_VERSION        = var.selkies_version
-    SUBDOMAIN           = tostring(var.subdomain)
-    PATH_VNC_HTML       = var.subdomain ? "" : file("${path.module}/path_vnc.html")
+    PORT            = var.port
+    SELKIES_VERSION = var.selkies_version
+    SUBDOMAIN       = tostring(var.subdomain)
+    PATH_VNC_HTML   = var.subdomain ? "" : file("${path.module}/path_vnc.html")
   })
 }
 
-resource "coder_app" "kasm_vnc" {
+resource "coder_app" "selkies_desktop" {
   agent_id     = var.agent_id
-  slug         = "kasm-vnc"
+  slug         = "selkies-desktop"
   display_name = "Selkies Desktop"
   url          = "http://localhost:${var.port}"
-  icon         = "/icon/selkies.svg"
+  icon         = "/icon/vnc.svg"
   subdomain    = var.subdomain
   share        = "owner"
   order        = var.order
   group        = var.group
 
   healthcheck {
-    url       = "http://localhost:${var.port}/app"
+    url       = "http://localhost:${var.port}/"
     interval  = 5
     threshold = 5
   }

From 3aebc60fec82442ed67f6ad74d34284b5311e6ff Mon Sep 17 00:00:00 2001
From: claude <noreply@anthropic.com>
Date: Mon, 14 Jul 2025 10:55:04 +0000
Subject: [PATCH 4/7] Patch run.sh to use  for Terraform template substitution.

---
 registry/coder/modules/selkies/main.tf | 6 +++++-
 registry/coder/modules/selkies/run.sh  | 3 +++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/registry/coder/modules/selkies/main.tf b/registry/coder/modules/selkies/main.tf
index 20ff46cd..c5c93f7c 100644
--- a/registry/coder/modules/selkies/main.tf
+++ b/registry/coder/modules/selkies/main.tf
@@ -43,6 +43,10 @@ variable "subdomain" {
   description = "Is subdomain sharing enabled in your cluster?"
 }
 
+locals {
+  path_vnc_html_content = var.subdomain ? "" : file("${path.module}/path_vnc.html")
+}
+
 resource "coder_script" "selkies_desktop" {
   agent_id     = var.agent_id
   display_name = "Selkies Desktop"
@@ -52,7 +56,7 @@ resource "coder_script" "selkies_desktop" {
     PORT            = var.port
     SELKIES_VERSION = var.selkies_version
     SUBDOMAIN       = tostring(var.subdomain)
-    PATH_VNC_HTML   = var.subdomain ? "" : file("${path.module}/path_vnc.html")
+    PATH_VNC_HTML   = local.path_vnc_html_content
   })
 }
 
diff --git a/registry/coder/modules/selkies/run.sh b/registry/coder/modules/selkies/run.sh
index 45846fbe..7ef60fa3 100644
--- a/registry/coder/modules/selkies/run.sh
+++ b/registry/coder/modules/selkies/run.sh
@@ -6,6 +6,9 @@ error() { printf "💀 ERROR: %s\n" "$@"; exit 1; }
 : "${PORT?Must set PORT}"    # Port for web UI
 : "${SELKIES_VERSION:=latest}"
 
+# Injected by Terraform - path sharing bounce html content
+PATH_VNC_HTML='${PATH_VNC_HTML}'
+
 SELKIES_DIR="/opt/selkies-gstreamer-$SELKIES_VERSION"
 if [[ ! -d "$SELKIES_DIR" ]]; then
   apt-get update -yq && apt-get install -yq --no-install-recommends \

From 8ed4276c356639beee90f11e9159174b582ac8b9 Mon Sep 17 00:00:00 2001
From: claude <noreply@anthropic.com>
Date: Mon, 14 Jul 2025 11:05:38 +0000
Subject: [PATCH 5/7] Remove subdomain parameter

---
 registry/coder/modules/selkies/main.tf | 11 -----------
 registry/coder/modules/selkies/run.sh  |  2 --
 2 files changed, 13 deletions(-)

diff --git a/registry/coder/modules/selkies/main.tf b/registry/coder/modules/selkies/main.tf
index c5c93f7c..623a9821 100644
--- a/registry/coder/modules/selkies/main.tf
+++ b/registry/coder/modules/selkies/main.tf
@@ -37,15 +37,7 @@ variable "group" {
   default     = null
 }
 
-variable "subdomain" {
-  type        = bool
-  default     = true
-  description = "Is subdomain sharing enabled in your cluster?"
-}
 
-locals {
-  path_vnc_html_content = var.subdomain ? "" : file("${path.module}/path_vnc.html")
-}
 
 resource "coder_script" "selkies_desktop" {
   agent_id     = var.agent_id
@@ -55,8 +47,6 @@ resource "coder_script" "selkies_desktop" {
   script = templatefile("${path.module}/run.sh", {
     PORT            = var.port
     SELKIES_VERSION = var.selkies_version
-    SUBDOMAIN       = tostring(var.subdomain)
-    PATH_VNC_HTML   = local.path_vnc_html_content
   })
 }
 
@@ -66,7 +56,6 @@ resource "coder_app" "selkies_desktop" {
   display_name = "Selkies Desktop"
   url          = "http://localhost:${var.port}"
   icon         = "/icon/vnc.svg"
-  subdomain    = var.subdomain
   share        = "owner"
   order        = var.order
   group        = var.group
diff --git a/registry/coder/modules/selkies/run.sh b/registry/coder/modules/selkies/run.sh
index 7ef60fa3..2c94d4f7 100644
--- a/registry/coder/modules/selkies/run.sh
+++ b/registry/coder/modules/selkies/run.sh
@@ -6,8 +6,6 @@ error() { printf "💀 ERROR: %s\n" "$@"; exit 1; }
 : "${PORT?Must set PORT}"    # Port for web UI
 : "${SELKIES_VERSION:=latest}"
 
-# Injected by Terraform - path sharing bounce html content
-PATH_VNC_HTML='${PATH_VNC_HTML}'
 
 SELKIES_DIR="/opt/selkies-gstreamer-$SELKIES_VERSION"
 if [[ ! -d "$SELKIES_DIR" ]]; then

From 7c02589caffe4806ff4c0258adf58862a5498457 Mon Sep 17 00:00:00 2001
From: claude <noreply@anthropic.com>
Date: Mon, 14 Jul 2025 11:19:34 +0000
Subject: [PATCH 6/7] WTF

---
 registry/coder/modules/selkies/run.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/registry/coder/modules/selkies/run.sh b/registry/coder/modules/selkies/run.sh
index 2c94d4f7..4eee7561 100644
--- a/registry/coder/modules/selkies/run.sh
+++ b/registry/coder/modules/selkies/run.sh
@@ -3,8 +3,8 @@ set -euo pipefail
 
 error() { printf "💀 ERROR: %s\n" "$@"; exit 1; }
 
-: "${PORT?Must set PORT}"    # Port for web UI
-: "${SELKIES_VERSION:=latest}"
+: "\${PORT?Must set PORT}"    # Port for web UI
+: "\${SELKIES_VERSION:=latest}"
 
 
 SELKIES_DIR="/opt/selkies-gstreamer-$SELKIES_VERSION"

From a6116b4fd35b76c0614ff925a3346d756b6fe3bb Mon Sep 17 00:00:00 2001
From: claude <noreply@anthropic.com>
Date: Mon, 14 Jul 2025 11:26:54 +0000
Subject: [PATCH 7/7] WIP

---
 registry/coder/modules/selkies/run.sh | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/registry/coder/modules/selkies/run.sh b/registry/coder/modules/selkies/run.sh
index 4eee7561..d9b42e22 100644
--- a/registry/coder/modules/selkies/run.sh
+++ b/registry/coder/modules/selkies/run.sh
@@ -3,9 +3,6 @@ set -euo pipefail
 
 error() { printf "💀 ERROR: %s\n" "$@"; exit 1; }
 
-: "\${PORT?Must set PORT}"    # Port for web UI
-: "\${SELKIES_VERSION:=latest}"
-
 
 SELKIES_DIR="/opt/selkies-gstreamer-$SELKIES_VERSION"
 if [[ ! -d "$SELKIES_DIR" ]]; then
