{"id":40733882,"url":"https://github.com/julianneswinoga/prusaslicer-web","last_synced_at":"2026-01-21T14:38:18.429Z","repository":{"id":325178958,"uuid":"1100150599","full_name":"julianneswinoga/prusaslicer-web","owner":"julianneswinoga","description":"Prusa Slicer in a web browser, using docker and VNC","archived":false,"fork":false,"pushed_at":"2025-12-19T17:20:48.000Z","size":3612,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-12-21T22:44:47.625Z","etag":null,"topics":["3d-printing","browser","docker","docker-compose","webapp"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/julianneswinoga/prusaslicer-web","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/julianneswinoga.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-19T22:48:41.000Z","updated_at":"2025-12-20T15:52:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/julianneswinoga/prusaslicer-web","commit_stats":null,"previous_names":["julianneswinoga/prusaslicer-web"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/julianneswinoga/prusaslicer-web","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julianneswinoga%2Fprusaslicer-web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julianneswinoga%2Fprusaslicer-web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julianneswinoga%2Fprusaslicer-web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julianneswinoga%2Fprusaslicer-web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/julianneswinoga","download_url":"https://codeload.github.com/julianneswinoga/prusaslicer-web/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julianneswinoga%2Fprusaslicer-web/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28634883,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T04:47:28.174Z","status":"ssl_error","status_checked_at":"2026-01-21T04:47:22.943Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d-printing","browser","docker","docker-compose","webapp"],"created_at":"2026-01-21T14:38:18.364Z","updated_at":"2026-01-21T14:38:18.417Z","avatar_url":"https://github.com/julianneswinoga.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Web-based (VNC) PrusaSlicer\n[![DockerHub Pulls](https://img.shields.io/docker/pulls/julianneswinoga/prusaslicer-web)](https://hub.docker.com/r/julianneswinoga/prusaslicer-web)\n\n![](./images/screenshot.png)\n\n## Quick start `docker-compose` examples\n### No GPU acceleration\n\nNote that without GPU acceleration, medium-to-large models will be unusable (especially the GCODE rendering).\n\n```yaml\nservices:\n  prusaslicer:\n    image: julianneswinoga/prusaslicer-web:latest\n    volumes:\n      - \u003chost config dir\u003e:/configs\n      - \u003chost print dir\u003e:/prints\n```\n\n|                                |                               |\n|:------------------------------:|:-----------------------------:|\n| ![](./images/sysinfo_menu.png) | ![](./images/sysinfo_cpu.png) |\n\n### GPU passthrough with multiple GPUs (AMD/Intel acceleration only)\n\nIf you have multiple GPUs on a system (i.e. integrated Intel graphics and a dedicated GPU) the graphics acceleration in the container could get confused if everything under `/dev/dri/` is passed through. Here's a short snippet of figuring out exactly what devices should be passed through to the container. Here I want to pass through the integrated Intel graphics, but I also have an NVidia GPU in the system.\n\n```console\n$ lspci\n\u003csnip\u003e\n00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07)\n01:00.0 3D controller: NVIDIA Corporation GP108M [GeForce MX150] (rev a1)\n\u003csnip\u003e\n```\n\nIn this case my intel GPU is on PCIe address `00:02.0`.\n\n```console\n$ ls -l /dev/dri/by-path/\nlrwxrwxrwx 1 root root  8 Dec 18 22:23 pci-0000:00:02.0-card -\u003e ../card1        # Intel GPU\nlrwxrwxrwx 1 root root 13 Dec 18 22:23 pci-0000:00:02.0-render -\u003e ../renderD128 # Intel GPU\nlrwxrwxrwx 1 root root  8 Dec 18 22:23 pci-0000:01:00.0-card -\u003e ../card0        # NVidia GPU\nlrwxrwxrwx 1 root root 13 Dec 18 22:23 pci-0000:01:00.0-render -\u003e ../renderD129 # NVidia GPU\n```\n\n`/dev/dri/by-path/pci-0000:00:02.0-*` point to `/dev/dri/card1` and `/dev/dri/renderD128`. These are the devices that I will pass through to the container.\n\n```console\n$ ls -l /dev/dri/\ndrwxr-xr-x 2 root root        120 Dec 18 22:23 by-path/\ncrw-rw---- 1 root video  226,   0 Dec 18 22:23 card0\ncrw-rw---- 1 root video  226,   1 Dec 18 22:23 card1\ncrw-rw---- 1 root render 226, 128 Dec 18 22:23 renderD128\ncrw-rw---- 1 root render 226, 129 Dec 18 22:23 renderD129\n```\n\n### AMD GPU acceleration\n```yaml\nservices:\n  prusaslicer:\n    image: julianneswinoga/prusaslicer-web:latest\n    environment:\n      ENABLEHWGPU: 'true'\n    devices:\n      # See above note for which devices to pass through\n      - /dev/dri/card1:/dev/dri/card1\n      - /dev/dri/renderD128:/dev/dri/renderD128\n      - /dev/kfd:/dev/kfd  # AMD also requires this device\n    volumes:\n      - \u003chost config dir\u003e:/configs\n      - \u003chost print dir\u003e:/prints\n```\n\n|                                |                               |\n|:------------------------------:|:-----------------------------:|\n| ![](./images/sysinfo_menu.png) | ![](./images/sysinfo_amd.png) |\n\n### Intel GPU acceleration\n\n(i.e. integrated Intel graphics. Not sure if this works with Intel ARC GPUs, lmk if it does or doesn't!)\n\nWe need to give the container access to the `render` group (the group that owns `/dev/dri/renderD128`), so get the group ID and add it to `group_add`:\n```console\n$ getent group render\nrender:x:993:\n```\n\n```yaml\nservices:\n  prusaslicer:\n    image: julianneswinoga/prusaslicer-web:latest\n    environment:\n      ENABLEHWGPU: 'true'\n    devices:\n      # See above note for which devices to pass through\n      - /dev/dri/card1:/dev/dri/card1\n      - /dev/dri/renderD128:/dev/dri/renderD128\n    volumes:\n      - \u003chost config dir\u003e:/configs\n      - \u003chost print dir\u003e:/prints\n    group_add:\n      - 993  # Host `render` group\n```\n\n|                                |                                 |\n|:------------------------------:|:-------------------------------:|\n| ![](./images/sysinfo_menu.png) | ![](./images/sysinfo_intel.png) |\n\n### NVidia GPU acceleration\n- Install NVidia drivers on host\n  - Ubuntu: https://documentation.ubuntu.com/server/how-to/graphics/install-nvidia-drivers/index.html\n- Install `nvidia-container-toolkit`\n  - Ubuntu: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html\n- Reboot after installing\n\n```yaml\nservices:\n  prusaslicer:\n    image: julianneswinoga/prusaslicer-web:latest\n    environment:\n      ENABLEHWGPU: 'true'\n    runtime: nvidia\n    deploy:\n      resources:\n        reservations:\n          devices:\n            - driver: nvidia\n              count: all\n              capabilities: [gpu]\n```\n\n|                                |                                  |\n|:------------------------------:|:--------------------------------:|\n| ![](./images/sysinfo_menu.png) | ![](./images/sysinfo_nvidia.png) |\n\n## Container options\nThe default NoVNC port is `8080`, to change it just map to a new port. For example, to access NoVNC on `8077` instead:\n```yaml\nservices:\n    prusaslicer:\n      # other config\n      ports:\n        - '8077:8080'\n```\n\n### Common environment variables\n\n| Name           | Default value | Explanation                                                     |\n|----------------|---------------|-----------------------------------------------------------------|\n| `VNC_PASSWORD` | `\u003cempty\u003e`     | Set a password for to access the VNC web interface.             |\n| `ENABLEHWGPU`  | `\u003cempty\u003e`     | Set to `true` to attempt to run with hardware GPU acceleration. |\n\n### Full environment variables\n\n| Name            | Default value | Explanation                                                                                                                                         |\n|-----------------|---------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|\n| `VGL_DISPLAY`   | `egl`         | Manually set the VirtualGL display device. See https://virtualgl.org/vgldoc/2_0/#GLP_Usage for more details.                                        |\n| `NOVNC_PORT`    | `8080`        | Change the port that NoVNC will listen on. Note that you can also [change the port mapping in the container service definition](#container-options) |\n| `SUPD_LOGLEVEL` | `TRACE`       | `supervisord` log level (i.e. the container log output).                                                                                            |\n\n## Development\n\n### Build the container\n```shell\ncd docker/\ndocker buildx bake\ndocker compose up prusaslicer-web # or prusaslicer-web-{amd,nvidia} - see docker-compose.yml\n```\n\n### Release\n```shell\ngit tag x.y.z\ngit push origin x.y.z\n```\n\n\n\n----\n\nBased off of the work from https://github.com/helfrichmichael/prusaslicer-novnc and https://github.com/helfrichmichael/prusaslicer-novnc/pull/23\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjulianneswinoga%2Fprusaslicer-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjulianneswinoga%2Fprusaslicer-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjulianneswinoga%2Fprusaslicer-web/lists"}