diff --git a/repos/gems/sculpt/deploy/webcam b/repos/gems/sculpt/deploy/webcam
new file mode 100644
index 0000000000..68d3a4f02b
--- /dev/null
+++ b/repos/gems/sculpt/deploy/webcam
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/repos/gems/sculpt/launcher/test-capture b/repos/gems/sculpt/launcher/test-capture
new file mode 100644
index 0000000000..708b5f98a5
--- /dev/null
+++ b/repos/gems/sculpt/launcher/test-capture
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/repos/gems/sculpt/launcher/test-vfs_capture b/repos/gems/sculpt/launcher/test-vfs_capture
new file mode 100644
index 0000000000..7aaaeb09a6
--- /dev/null
+++ b/repos/gems/sculpt/launcher/test-vfs_capture
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/repos/gems/sculpt/usb/webcam b/repos/gems/sculpt/usb/webcam
new file mode 100644
index 0000000000..d940f995e6
--- /dev/null
+++ b/repos/gems/sculpt/usb/webcam
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/repos/gems/sculpt/webcam-pc.sculpt b/repos/gems/sculpt/webcam-pc.sculpt
new file mode 100644
index 0000000000..4a6427c561
--- /dev/null
+++ b/repos/gems/sculpt/webcam-pc.sculpt
@@ -0,0 +1,6 @@
+drivers: pc
+ram_fs: depot
+import: pkg/sculpt_drivers-pc pkg/test-capture pkg/test-vfs_capture
+deploy: webcam
+usb: webcam
+launcher: test-capture test-vfs_capture
diff --git a/repos/libports/recipes/pkg/usb_webcam/archives b/repos/libports/recipes/pkg/usb_webcam/archives
index 1b2091cf70..57eaa345ef 100644
--- a/repos/libports/recipes/pkg/usb_webcam/archives
+++ b/repos/libports/recipes/pkg/usb_webcam/archives
@@ -1,5 +1,4 @@
_/src/usb_webcam
-_/raw/usb_webcam
_/src/init
_/src/jpeg
_/src/libc
diff --git a/repos/libports/recipes/pkg/usb_webcam/runtime b/repos/libports/recipes/pkg/usb_webcam/runtime
index 2548b7083e..aaf9eae234 100644
--- a/repos/libports/recipes/pkg/usb_webcam/runtime
+++ b/repos/libports/recipes/pkg/usb_webcam/runtime
@@ -1,4 +1,4 @@
-
+
@@ -15,9 +15,120 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/repos/libports/recipes/raw/usb_webcam/content.mk b/repos/libports/recipes/raw/usb_webcam/content.mk
deleted file mode 100644
index 6c8427df24..0000000000
--- a/repos/libports/recipes/raw/usb_webcam/content.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-content: usb_webcam.config
-
-usb_webcam.config:
- cp $(REP_DIR)/recipes/raw/usb_webcam/$@ $@
diff --git a/repos/libports/recipes/raw/usb_webcam/hash b/repos/libports/recipes/raw/usb_webcam/hash
deleted file mode 100644
index 23c0ba55c5..0000000000
--- a/repos/libports/recipes/raw/usb_webcam/hash
+++ /dev/null
@@ -1 +0,0 @@
-2024-10-29 47a96974acde8af769295aaf7f4de1ea4d5a7f15
diff --git a/repos/libports/recipes/raw/usb_webcam/usb_webcam.config b/repos/libports/recipes/raw/usb_webcam/usb_webcam.config
deleted file mode 100644
index 44af89888e..0000000000
--- a/repos/libports/recipes/raw/usb_webcam/usb_webcam.config
+++ /dev/null
@@ -1,113 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/repos/libports/run/webcam.inc b/repos/libports/run/webcam.inc
deleted file mode 100644
index ea3ec65a76..0000000000
--- a/repos/libports/run/webcam.inc
+++ /dev/null
@@ -1,221 +0,0 @@
-assert_spec x86
-
-# fuji4
-proc libuvc_vendor_id {} { return "0x04f2" }
-proc libuvc_product_id {} { return "0xb564" }
-
-# c270
-#proc libuvc_vendor_id {} { return "0x046d" }
-#proc libuvc_product_id {} { return "0x0825" }
-
-# quickcam
-#proc libuvc_vendor_id {} { return "0x046d" }
-#proc libuvc_product_id {} { return "0x09c1" }
-
-# t470
-#proc libuvc_vendor_id {} { return "0x0bda" }
-#proc libuvc_product_id {} { return "0x58db" }
-
-
-create_boot_directory
-
-import_from_depot [depot_user]/src/[base_src] \
- [depot_user]/pkg/usb_webcam \
- [depot_user]/src/acpi \
- [depot_user]/src/dynamic_rom \
- [depot_user]/src/init \
- [depot_user]/src/nitpicker \
- [depot_user]/src/pc_usb_host \
- [depot_user]/src/pci_decode \
- [depot_user]/src/platform \
- [depot_user]/src/report_rom \
- [depot_user]/src/rom_reporter \
- [depot_user]/src/vesa_fb
-
-import_from_depot $test_imports
-
-append config {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
-append config $test_vfs_config
-append config {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-}
-
-install_config $config
-
-build_boot_image { }
-
-append qemu_args { -usb -device usb-host,vendorid=[libuvc_vendor_id],productid=[libuvc_product_id] }
-
-run_genode_until forever
diff --git a/repos/libports/run/webcam.run b/repos/libports/run/webcam.run
deleted file mode 100644
index 0dc358af92..0000000000
--- a/repos/libports/run/webcam.run
+++ /dev/null
@@ -1,7 +0,0 @@
-set test_imports "[depot_user]/src/test-capture"
-
-set test_binary "test-capture"
-
-set test_vfs_config { }
-
-source ${genode_dir}/repos/libports/run/webcam.inc
diff --git a/repos/libports/run/webcam_vfs.run b/repos/libports/run/webcam_vfs.run
deleted file mode 100644
index 2fc6ff0032..0000000000
--- a/repos/libports/run/webcam_vfs.run
+++ /dev/null
@@ -1,8 +0,0 @@
-set test_imports "[depot_user]/src/test-vfs_capture \
- [depot_user]/src/vfs_capture"
-
-set test_binary "test-vfs_capture"
-
-set test_vfs_config { }
-
-source ${genode_dir}/repos/libports/run/webcam.inc
diff --git a/repos/os/recipes/pkg/test-vfs_capture/README b/repos/os/recipes/pkg/test-vfs_capture/README
new file mode 100644
index 0000000000..350afd5dad
--- /dev/null
+++ b/repos/os/recipes/pkg/test-vfs_capture/README
@@ -0,0 +1,2 @@
+
+ Test for the VFS capture session plugin
diff --git a/repos/os/recipes/pkg/test-vfs_capture/archives b/repos/os/recipes/pkg/test-vfs_capture/archives
new file mode 100644
index 0000000000..073845e71d
--- /dev/null
+++ b/repos/os/recipes/pkg/test-vfs_capture/archives
@@ -0,0 +1,3 @@
+_/src/test-vfs_capture
+_/src/vfs
+_/src/vfs_capture
diff --git a/repos/os/recipes/pkg/test-vfs_capture/hash b/repos/os/recipes/pkg/test-vfs_capture/hash
new file mode 100644
index 0000000000..115ce4be5f
--- /dev/null
+++ b/repos/os/recipes/pkg/test-vfs_capture/hash
@@ -0,0 +1 @@
+2024-12-10-c f3182fa61f59571b2a102df0b5e1278ecfedecb1
diff --git a/repos/os/recipes/pkg/test-vfs_capture/runtime b/repos/os/recipes/pkg/test-vfs_capture/runtime
new file mode 100644
index 0000000000..6dd1345baa
--- /dev/null
+++ b/repos/os/recipes/pkg/test-vfs_capture/runtime
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+