├── .github └── workflows │ ├── docker.beta.yml │ ├── docker.node.yml │ ├── docker.projector.yml │ ├── docker.watcher.yml │ ├── docker.webdav.yml │ ├── docker.xpra.yml │ └── docker.yml ├── .gitignore ├── Dockerfile ├── Dockerfile.alpine ├── Dockerfile.beta ├── Dockerfile.graalvm ├── Dockerfile.node ├── Dockerfile.projector ├── Dockerfile.watcher ├── Dockerfile.webdav ├── Dockerfile.xpra ├── LICENSE ├── README.md ├── generic └── opt │ ├── bin │ ├── run │ └── run-as-user │ └── share │ └── activate.sh ├── makefile ├── node └── opt │ └── filebot-node │ ├── start │ └── task ├── projector └── opt │ └── filebot-projector │ └── start ├── watcher └── opt │ └── bin │ └── filebot-watcher ├── webdav ├── opt │ └── bin │ │ ├── httpd │ │ └── run-as-user └── usr │ └── local │ └── apache2 │ └── conf │ ├── dav.conf │ ├── http.conf │ └── httpd.conf └── xpra ├── etc └── xpra │ └── xpra.conf ├── opt └── filebot-xpra │ └── start └── usr └── share └── xpra └── www └── default-settings.txt /.github/workflows/docker.beta.yml: -------------------------------------------------------------------------------- 1 | name: docker build filebot-beta 2 | 3 | on: 4 | workflow_run: 5 | workflows: 6 | - 'docker build filebot-xpra' 7 | types: 8 | - 'completed' 9 | push: 10 | paths: 11 | - '.github/workflows/docker.beta.yml' 12 | - 'Dockerfile.beta' 13 | 14 | 15 | jobs: 16 | docker: 17 | runs-on: ubuntu-latest 18 | steps: 19 | - 20 | name: Set up QEMU 21 | uses: docker/setup-qemu-action@v2 22 | - 23 | name: Set up Docker Buildx 24 | uses: docker/setup-buildx-action@v2 25 | - 26 | name: Login to DockerHub 27 | uses: docker/login-action@v2 28 | with: 29 | username: ${{ secrets.DOCKER_HUB_USERNAME }} 30 | password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} 31 | - 32 | name: Build and push 33 | uses: docker/build-push-action@v4 34 | with: 35 | file: Dockerfile.beta 36 | push: true 37 | platforms: linux/amd64,linux/arm64 38 | tags: ${{ secrets.DOCKER_HUB_USERNAME }}/filebot:beta 39 | cache-from: type=gha 40 | cache-to: type=gha,mode=max 41 | -------------------------------------------------------------------------------- /.github/workflows/docker.node.yml: -------------------------------------------------------------------------------- 1 | name: docker build filebot-node 2 | 3 | on: 4 | workflow_run: 5 | workflows: 6 | - 'docker build filebot' 7 | types: 8 | - 'completed' 9 | push: 10 | paths: 11 | - '.github/workflows/docker.node.yml' 12 | - 'Dockerfile.node' 13 | - 'node/**' 14 | 15 | jobs: 16 | docker: 17 | runs-on: ubuntu-latest 18 | steps: 19 | - 20 | name: Set up QEMU 21 | uses: docker/setup-qemu-action@v2 22 | - 23 | name: Set up Docker Buildx 24 | uses: docker/setup-buildx-action@v2 25 | - 26 | name: Login to DockerHub 27 | uses: docker/login-action@v2 28 | with: 29 | username: ${{ secrets.DOCKER_HUB_USERNAME }} 30 | password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} 31 | - 32 | name: Build and push 33 | uses: docker/build-push-action@v4 34 | with: 35 | file: Dockerfile.node 36 | push: true 37 | platforms: linux/amd64,linux/arm64 38 | tags: ${{ secrets.DOCKER_HUB_USERNAME }}/filebot:node 39 | cache-from: type=gha 40 | cache-to: type=gha,mode=max 41 | -------------------------------------------------------------------------------- /.github/workflows/docker.projector.yml: -------------------------------------------------------------------------------- 1 | name: docker build filebot-projector 2 | 3 | on: 4 | workflow_run: 5 | workflows: 6 | - 'docker build filebot' 7 | types: 8 | - 'completed' 9 | push: 10 | paths: 11 | - '.github/workflows/docker.projector.yml' 12 | - 'Dockerfile.projector' 13 | - 'projector/**' 14 | 15 | jobs: 16 | docker: 17 | runs-on: ubuntu-latest 18 | steps: 19 | - 20 | name: Set up QEMU 21 | uses: docker/setup-qemu-action@v2 22 | - 23 | name: Set up Docker Buildx 24 | uses: docker/setup-buildx-action@v2 25 | - 26 | name: Login to DockerHub 27 | uses: docker/login-action@v2 28 | with: 29 | username: ${{ secrets.DOCKER_HUB_USERNAME }} 30 | password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} 31 | - 32 | name: Build and push 33 | uses: docker/build-push-action@v4 34 | with: 35 | file: Dockerfile.projector 36 | push: true 37 | platforms: linux/amd64,linux/arm64 38 | tags: ${{ secrets.DOCKER_HUB_USERNAME }}/filebot:projector 39 | cache-from: type=gha 40 | cache-to: type=gha,mode=max 41 | -------------------------------------------------------------------------------- /.github/workflows/docker.watcher.yml: -------------------------------------------------------------------------------- 1 | name: docker build filebot-watcher 2 | 3 | on: 4 | workflow_run: 5 | workflows: 6 | - 'docker build filebot' 7 | types: 8 | - 'completed' 9 | push: 10 | paths: 11 | - '.github/workflows/docker.watcher.yml' 12 | - 'Dockerfile.watcher' 13 | - 'watcher/**' 14 | 15 | jobs: 16 | docker: 17 | runs-on: ubuntu-latest 18 | steps: 19 | - 20 | name: Set up QEMU 21 | uses: docker/setup-qemu-action@v2 22 | - 23 | name: Set up Docker Buildx 24 | uses: docker/setup-buildx-action@v2 25 | - 26 | name: Login to DockerHub 27 | uses: docker/login-action@v2 28 | with: 29 | username: ${{ secrets.DOCKER_HUB_USERNAME }} 30 | password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} 31 | - 32 | name: Build and push 33 | uses: docker/build-push-action@v4 34 | with: 35 | file: Dockerfile.watcher 36 | push: true 37 | platforms: linux/amd64,linux/arm64 38 | tags: ${{ secrets.DOCKER_HUB_USERNAME }}/filebot:watcher 39 | cache-from: type=gha 40 | cache-to: type=gha,mode=max 41 | -------------------------------------------------------------------------------- /.github/workflows/docker.webdav.yml: -------------------------------------------------------------------------------- 1 | name: docker build filebot-webdav 2 | 3 | on: 4 | push: 5 | paths: 6 | - '.github/workflows/docker.webdav.yml' 7 | - 'Dockerfile.webdav' 8 | - 'webdav/**' 9 | 10 | jobs: 11 | docker: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - 15 | name: Set up QEMU 16 | uses: docker/setup-qemu-action@v2 17 | - 18 | name: Set up Docker Buildx 19 | uses: docker/setup-buildx-action@v2 20 | - 21 | name: Login to DockerHub 22 | uses: docker/login-action@v2 23 | with: 24 | username: ${{ secrets.DOCKER_HUB_USERNAME }} 25 | password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} 26 | - 27 | name: Build and push 28 | uses: docker/build-push-action@v4 29 | with: 30 | file: Dockerfile.webdav 31 | push: true 32 | platforms: linux/amd64,linux/arm64 33 | tags: ${{ secrets.DOCKER_HUB_USERNAME }}/filebot:webdav 34 | cache-from: type=gha 35 | cache-to: type=gha,mode=max 36 | -------------------------------------------------------------------------------- /.github/workflows/docker.xpra.yml: -------------------------------------------------------------------------------- 1 | name: docker build filebot-xpra 2 | 3 | on: 4 | workflow_run: 5 | workflows: 6 | - 'docker build filebot' 7 | types: 8 | - 'completed' 9 | push: 10 | paths: 11 | - '.github/workflows/docker.xpra.yml' 12 | - 'Dockerfile.xpra' 13 | - 'xpra/**' 14 | 15 | jobs: 16 | docker: 17 | runs-on: ubuntu-latest 18 | steps: 19 | - 20 | name: Set up QEMU 21 | uses: docker/setup-qemu-action@v2 22 | - 23 | name: Set up Docker Buildx 24 | uses: docker/setup-buildx-action@v2 25 | - 26 | name: Login to DockerHub 27 | uses: docker/login-action@v2 28 | with: 29 | username: ${{ secrets.DOCKER_HUB_USERNAME }} 30 | password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} 31 | - 32 | name: Build and push 33 | uses: docker/build-push-action@v4 34 | with: 35 | file: Dockerfile.xpra 36 | push: true 37 | platforms: linux/amd64,linux/arm64 38 | tags: ${{ secrets.DOCKER_HUB_USERNAME }}/filebot:xpra 39 | cache-from: type=gha 40 | cache-to: type=gha,mode=max 41 | -------------------------------------------------------------------------------- /.github/workflows/docker.yml: -------------------------------------------------------------------------------- 1 | name: docker build filebot 2 | 3 | on: 4 | push: 5 | paths: 6 | - '.github/workflows/docker.yml' 7 | - 'Dockerfile' 8 | - 'generic/**' 9 | 10 | 11 | 12 | 13 | 14 | 15 | jobs: 16 | docker: 17 | runs-on: ubuntu-latest 18 | steps: 19 | - 20 | name: Set up QEMU 21 | uses: docker/setup-qemu-action@v2 22 | - 23 | name: Set up Docker Buildx 24 | uses: docker/setup-buildx-action@v2 25 | - 26 | name: Login to DockerHub 27 | uses: docker/login-action@v2 28 | with: 29 | username: ${{ secrets.DOCKER_HUB_USERNAME }} 30 | password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} 31 | - 32 | name: Build and push 33 | uses: docker/build-push-action@v4 34 | with: 35 | file: Dockerfile 36 | push: true 37 | platforms: linux/amd64,linux/arm64 38 | tags: ${{ secrets.DOCKER_HUB_USERNAME }}/filebot:latest 39 | cache-from: type=gha 40 | cache-to: type=gha,mode=max 41 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:24.10 2 | 3 | LABEL maintainer="Reinhard Pointner " 4 | 5 | 6 | ENV FILEBOT_VERSION="5.1.7" 7 | 8 | 9 | RUN set -eux \ 10 | ## ** install dependencies 11 | && apt-get update \ 12 | && DEBIAN_FRONTEND=noninteractive apt-get install -y openjdk-21-jre-headless libjna-java mediainfo libchromaprint-tools unzip unrar p7zip-full p7zip-rar xz-utils ffmpeg mkvtoolnix atomicparsley imagemagick webp libjxl-tools sudo gnupg curl file inotify-tools rsync jdupes duperemove \ 13 | && rm -rvf /var/lib/apt/lists/* \ 14 | ## ** FIX libjna-java (see https://bugs.launchpad.net/ubuntu/+source/libjna-java/+bug/2000863) 15 | && ln -s /usr/lib/*-linux-gnu*/jni /usr/lib/jni 16 | 17 | RUN set -eux \ 18 | ## ** install filebot 19 | && curl -fsSL "https://raw.githubusercontent.com/filebot/plugins/master/gpg/maintainer.pub" | gpg --dearmor --output "/usr/share/keyrings/filebot.gpg" \ 20 | && echo "deb [arch=all signed-by=/usr/share/keyrings/filebot.gpg] https://get.filebot.net/deb/ universal main" > /etc/apt/sources.list.d/filebot.list \ 21 | && apt-get update \ 22 | && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends filebot \ 23 | && rm -rvf /var/lib/apt/lists/* \ 24 | ## BROKEN (https://github.com/adoptium/adoptium-support/issues/1185) ** generate CDS archive 25 | ## && java -Xshare:dump -XX:SharedClassListFile="/usr/share/filebot/jsa/classes.jsa.lst" -XX:SharedArchiveFile="/usr/share/filebot/jsa/classes.jsa" -jar "/usr/share/filebot/jar/filebot.jar" \ 26 | ## BROKEN (https://github.com/adoptium/adoptium-support/issues/1185) ** apply custom application configuration 27 | ## && sed -i 's|APP_DATA=.*|APP_DATA="$HOME"|g; s|-Dapplication.deployment=deb|-Dapplication.deployment=docker -Duser.home="$HOME" -XX:SharedArchiveFile=/usr/share/filebot/jsa/classes.jsa|g' /usr/bin/filebot 28 | ## ** apply custom application configuration 29 | && sed -i 's|APP_DATA=.*|APP_DATA="$HOME"|g; s|-Dapplication.deployment=deb|-Dapplication.deployment=docker -Duser.home="$HOME"|g' /usr/bin/filebot 30 | 31 | 32 | # install custom launcher scripts 33 | COPY generic / 34 | 35 | 36 | ENV HOME="/data" 37 | ENV LANG="C.UTF-8" 38 | 39 | ENV PUID="1000" 40 | ENV PGID="1000" 41 | ENV PUSER="filebot" 42 | ENV PGROUP="filebot" 43 | 44 | 45 | ENTRYPOINT ["/opt/bin/run-as-user", "/opt/bin/run", "/usr/bin/filebot"] 46 | -------------------------------------------------------------------------------- /Dockerfile.alpine: -------------------------------------------------------------------------------- 1 | FROM openjdk:17-alpine 2 | 3 | LABEL maintainer="Reinhard Pointner " 4 | 5 | 6 | ENV FILEBOT_VERSION="5.1.7" 7 | ENV FILEBOT_URL="https://get.filebot.net/filebot/FileBot_$FILEBOT_VERSION/FileBot_$FILEBOT_VERSION-portable.tar.xz" 8 | ENV FILEBOT_SHA256="1a98d6a36f80b13d210f708927c3dffcae536d6b46d19136b48a47fd41064f0b" 9 | 10 | ENV FILEBOT_HOME="/opt/filebot" 11 | 12 | 13 | RUN apk add --update mediainfo chromaprint p7zip unrar \ 14 | && rm -rf /var/cache/apk/* 15 | 16 | RUN set -eux \ 17 | ## * fetch portable package 18 | && wget -O /tmp/filebot.tar.xz "$FILEBOT_URL" \ 19 | && echo "$FILEBOT_SHA256 */tmp/filebot.tar.xz" | sha256sum -c - \ 20 | ## * install application files 21 | && mkdir -p "$FILEBOT_HOME" \ 22 | && tar --extract --file /tmp/filebot.tar.xz --directory "$FILEBOT_HOME" --verbose \ 23 | && rm -v /tmp/filebot.tar.xz \ 24 | ## * delete incompatible native binaries 25 | && find /opt/filebot/lib -type f -not -name libjnidispatch.so -delete \ 26 | ## * link /opt/filebot/data -> /data to persist application data files to the persistent data volume 27 | && ln -s /data /opt/filebot/data 28 | 29 | 30 | ENV HOME="/data" 31 | ENV LANG="C.UTF-8" 32 | ENV FILEBOT_OPTS="-Dapplication.deployment=docker -Dnet.filebot.archive.extractor=ShellExecutables -Duser.home=$HOME" 33 | 34 | 35 | ENTRYPOINT ["/opt/filebot/filebot.sh"] 36 | -------------------------------------------------------------------------------- /Dockerfile.beta: -------------------------------------------------------------------------------- 1 | FROM rednoah/filebot:xpra 2 | 3 | LABEL maintainer="Reinhard Pointner " 4 | 5 | 6 | # build trigger and cache buster 7 | ENV FILEBOT_REVISION="r10574" 8 | 9 | 10 | ENV FILEBOT_VERSION="5.1.7" 11 | ENV FILEBOT_URL="https://get.filebot.net/filebot/BETA/FileBot_${FILEBOT_VERSION}_universal.deb" 12 | 13 | 14 | RUN set -eux \ 15 | ## ** uninstall stable release 16 | && DEBIAN_FRONTEND=noninteractive apt-get purge -y filebot \ 17 | ## ** install latest revision 18 | && curl -o /tmp/filebot.deb "https://get.filebot.net/filebot/BETA/FileBot_${FILEBOT_VERSION}_universal.deb" \ 19 | && dpkg -i /tmp/filebot.deb \ 20 | && rm -v /tmp/filebot.deb \ 21 | ## ** apply custom application configuration 22 | && sed -i 's|APP_DATA=.*|APP_DATA="$HOME"|g; s|-Dapplication.deployment=deb|-Dapplication.deployment=docker -Duser.home="$HOME"|g' /usr/bin/filebot 23 | 24 | 25 | ENTRYPOINT ["/opt/bin/run-as-user", "/opt/bin/run", "/opt/filebot-xpra/start"] 26 | -------------------------------------------------------------------------------- /Dockerfile.graalvm: -------------------------------------------------------------------------------- 1 | FROM ghcr.io/graalvm/graalvm-ce:latest 2 | 3 | LABEL maintainer="Reinhard Pointner " 4 | 5 | 6 | ENV FILEBOT_VERSION="5.1.7" 7 | ENV FILEBOT_URL="https://get.filebot.net/filebot/FileBot_$FILEBOT_VERSION/FileBot_$FILEBOT_VERSION-portable.tar.xz" 8 | ENV FILEBOT_SHA256="1a98d6a36f80b13d210f708927c3dffcae536d6b46d19136b48a47fd41064f0b" 9 | 10 | 11 | ENV FILEBOT_HOME="/opt/filebot" 12 | 13 | 14 | RUN microdnf install glibc-langpack-en xz \ 15 | && microdnf clean all 16 | 17 | RUN set -eux \ 18 | ## * fetch portable package 19 | && curl -L -o /tmp/filebot.tar.xz "$FILEBOT_URL" \ 20 | && echo "$FILEBOT_SHA256 */tmp/filebot.tar.xz" | sha256sum -c - \ 21 | ## * install application files 22 | && mkdir -p "$FILEBOT_HOME" \ 23 | && tar --extract --file /tmp/filebot.tar.xz --directory "$FILEBOT_HOME" --verbose \ 24 | && rm -v /tmp/filebot.tar.xz \ 25 | ## * delete incompatible native binaries 26 | && find /opt/filebot/lib -type f -not -name libjnidispatch.so -delete \ 27 | ## * link /opt/filebot/data -> /data to persist application data files to the persistent data volume 28 | && ln -s /data /opt/filebot/data 29 | 30 | 31 | ENV HOME="/data" 32 | ENV LANG="C.UTF-8" 33 | ENV FILEBOT_OPTS="-Dapplication.deployment=docker -Duser.home=$HOME" 34 | 35 | 36 | RUN set -eux \ 37 | && gu install native-image 38 | 39 | RUN set -eux \ 40 | && sed -i -E 's/java/native-image/g; s/(--illegal-access|--add-opens|-XX|-client)(\S*)/ /g' "$FILEBOT_HOME/filebot.sh" \ 41 | && $FILEBOT_HOME/filebot.sh \ 42 | --verbose \ 43 | --no-server \ 44 | --force-fallback 45 | 46 | 47 | ENTRYPOINT ["/filebot"] 48 | -------------------------------------------------------------------------------- /Dockerfile.node: -------------------------------------------------------------------------------- 1 | FROM rednoah/filebot 2 | 3 | LABEL maintainer="Reinhard Pointner " 4 | 5 | 6 | ENV FILEBOT_NODE_VERSION="0.4.8" 7 | ENV FILEBOT_NODE_URL="https://github.com/filebot/filebot-node/releases/download/$FILEBOT_NODE_VERSION/filebot-node_$FILEBOT_NODE_VERSION.tar.xz" 8 | ENV FILEBOT_NODE_SHA256="35f556cf1be9999cc7c3393f9091806e9ea1c6fc2dc779d6fa4448306cdd6324" 9 | 10 | 11 | ENV FILEBOT_NODE_HOME="/opt/filebot-node" 12 | 13 | 14 | RUN set -eux \ 15 | ## ** install dependencies 16 | && curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - \ 17 | && apt-get update \ 18 | && DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs \ 19 | && rm -rf /var/lib/apt/lists/* \ 20 | ## ** fetch generic package 21 | && curl -L -o /tmp/filebot-node.tar.xz "$FILEBOT_NODE_URL" \ 22 | && echo "$FILEBOT_NODE_SHA256 */tmp/filebot-node.tar.xz" | sha256sum -c - \ 23 | ## ** install application files 24 | && mkdir -p "$FILEBOT_NODE_HOME" \ 25 | && tar --extract --file /tmp/filebot-node.tar.xz --directory "$FILEBOT_NODE_HOME" --verbose \ 26 | && rm -v /tmp/filebot-node.tar.xz \ 27 | ## ** delete generic launcher scripts 28 | && find "$FILEBOT_NODE_HOME" -executable -type f -delete 29 | 30 | # install custom launcher scripts 31 | COPY node / 32 | 33 | 34 | ENV FILEBOT_NODE_AUTH="NONE" 35 | ENV FILEBOT_NODE_HTTP="YES" 36 | ENV FILEBOT_NODE_HTTP_PORT="5452" 37 | 38 | 39 | EXPOSE $FILEBOT_NODE_HTTP_PORT 40 | 41 | ENTRYPOINT ["/opt/bin/run-as-user", "/opt/bin/run", "/opt/filebot-node/start"] 42 | -------------------------------------------------------------------------------- /Dockerfile.projector: -------------------------------------------------------------------------------- 1 | FROM rednoah/filebot 2 | 3 | LABEL maintainer="Reinhard Pointner " 4 | 5 | 6 | RUN set -eux \ 7 | && apt-get update \ 8 | && DEBIAN_FRONTEND=noninteractive apt-get remove -y openjdk-21-jre-headless \ 9 | && DEBIAN_FRONTEND=noninteractive apt-get install -y openjdk-17-jre \ 10 | && rm -rvf /var/lib/apt/lists/* 11 | 12 | 13 | RUN set -eux \ 14 | ## ** install projector 15 | && curl -fsSL -o /tmp/projector-server.zip https://github.com/JetBrains/projector-server/releases/download/v1.8.1/projector-server-v1.8.1.zip \ 16 | && unzip /tmp/projector-server.zip -d /opt \ 17 | && mv -v /opt/projector-server-* /opt/projector-server \ 18 | && rm -rvf /opt/projector-server/lib/slf4j-* /opt/projector-server/bin /tmp/projector-server.zip \ 19 | ## ** apply custom application configuration 20 | && sed -i 's|-jar "$FILEBOT_HOME/jar/filebot.jar"|-classpath "/opt/projector-server/lib/*:/usr/share/filebot/jar/*" -Dorg.jetbrains.projector.server.enable=true -Dorg.jetbrains.projector.server.classToLaunch=net.filebot.Main org.jetbrains.projector.server.ProjectorLauncher|g; s|-XX:SharedArchiveFile=/usr/share/filebot/jsa/classes.jsa||g; s|-XX:+DisableAttachMechanism|-XX:+EnableDynamicAgentLoading -Djdk.attach.allowAttachSelf=true -Dnet.filebot.UserFiles.fileChooser=Swing -Dnet.filebot.glass.effect=false --add-opens=java.desktop/sun.font=ALL-UNNAMED --add-opens=java.desktop/java.awt=ALL-UNNAMED --add-opens=java.desktop/sun.java2d=ALL-UNNAMED --add-opens=java.desktop/java.awt.peer=ALL-UNNAMED --add-opens=java.desktop/sun.awt.image=ALL-UNNAMED --add-opens=java.desktop/java.awt.dnd.peer=ALL-UNNAMED --add-opens=java.desktop/java.awt.image=ALL-UNNAMED|g' /usr/bin/filebot 21 | 22 | 23 | # install custom launcher scripts 24 | COPY projector / 25 | 26 | 27 | EXPOSE 8887 28 | 29 | ENTRYPOINT ["/opt/bin/run-as-user", "/opt/bin/run", "/opt/filebot-projector/start"] 30 | -------------------------------------------------------------------------------- /Dockerfile.watcher: -------------------------------------------------------------------------------- 1 | FROM rednoah/filebot 2 | 3 | LABEL maintainer="Reinhard Pointner " 4 | 5 | COPY watcher / 6 | 7 | ENV SETTLE_DOWN_TIME="300" 8 | ENV SETTLE_DOWN_CHECK="5 seconds ago" 9 | 10 | ENTRYPOINT ["/opt/bin/run-as-user", "/opt/bin/run", "/opt/bin/filebot-watcher"] 11 | -------------------------------------------------------------------------------- /Dockerfile.webdav: -------------------------------------------------------------------------------- 1 | FROM httpd:2.4.59 2 | 3 | LABEL maintainer="Reinhard Pointner " 4 | 5 | 6 | RUN set -eux \ 7 | && apt-get update \ 8 | && DEBIAN_FRONTEND=noninteractive apt-get install sudo \ 9 | && rm -rvf /var/lib/apt/lists/* 10 | 11 | 12 | COPY webdav / 13 | 14 | 15 | ENV HOME="/data" 16 | ENV LANG="C.UTF-8" 17 | 18 | ENV PUID="1000" 19 | ENV PGID="1000" 20 | ENV PUSER="httpd" 21 | ENV PGROUP="httpd" 22 | 23 | ENV REALM="WebDAV" 24 | ENV USERNAME="anonymous" 25 | ENV PASSWORD="" 26 | 27 | ENV ROOT="/volume1" 28 | ENV HOST="localhost" 29 | ENV PORT="8080" 30 | 31 | 32 | EXPOSE 8080 33 | 34 | ENTRYPOINT ["/opt/bin/run-as-user", "/opt/bin/httpd"] 35 | -------------------------------------------------------------------------------- /Dockerfile.xpra: -------------------------------------------------------------------------------- 1 | FROM rednoah/filebot 2 | 3 | LABEL maintainer="Reinhard Pointner " 4 | 5 | 6 | RUN set -eux \ 7 | && apt-get update \ 8 | && DEBIAN_FRONTEND=noninteractive apt-get install -y apt-transport-https software-properties-common \ 9 | && DEBIAN_FRONTEND=noninteractive apt-get install -y ca-certificates \ 10 | && add-apt-repository universe \ 11 | && curl -o /usr/share/keyrings/xpra.asc https://xpra.org/xpra.asc \ 12 | && curl -o /etc/apt/sources.list.d/xpra.sources https://raw.githubusercontent.com/Xpra-org/xpra/master/packaging/repos/oracular/xpra.sources \ 13 | && apt-get update \ 14 | && DEBIAN_FRONTEND=noninteractive apt-get install -y xpra openjdk-21-jre zenity xdg-utils nautilus gedit trash-cli \ 15 | ## ** fix xdg-open behaviour 16 | && rm -rvf /usr/share/applications/* \ 17 | && rm -rvf /usr/share/file-manager/actions/* \ 18 | && rm -rvf /usr/share/kio/servicemenus/* /usr/share/kservices5/ServiceMenus/* \ 19 | && mkdir -m 777 -p /tmp/xdg/xpra \ 20 | && rm -rvf /usr/share/xpra/www/default-settings.* \ 21 | && rm -rvf /var/lib/apt/lists/* \ 22 | ## ** silence xpra startup error messages 23 | && chmod 777 /run/user \ 24 | && mkdir -m 777 -p /run/xpra \ 25 | && chmod 775 /run/xpra \ 26 | && mkdir -m 777 -p /etc/xdg/menus \ 27 | && echo "" > /etc/xdg/menus/kde-debian-menu.menu \ 28 | && echo "" > /etc/xdg/menus/debian-menu.menu 29 | 30 | 31 | # install custom launcher scripts 32 | COPY xpra / 33 | 34 | 35 | ENV XPRA_BIND="0.0.0.0" 36 | ENV XPRA_PORT="5454" 37 | ENV XPRA_AUTH="none" 38 | 39 | 40 | EXPOSE $XPRA_PORT 41 | 42 | ENTRYPOINT ["/opt/bin/run-as-user", "/opt/bin/run", "/opt/filebot-xpra/start"] 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FileBot Docker 2 | 3 | Docker images for [FileBot](https://www.filebot.net/). 4 | - [`filebot`](#filebot) command-line tool ([Dockerfile](https://github.com/filebot/filebot-docker/blob/master/Dockerfile)) 5 | - [`filebot-node`](#filebot-node) web application ([Dockerfile](https://github.com/filebot/filebot-docker/blob/master/Dockerfile.node)) 6 | - [`filebot-watcher`](#filebot-watcher) command-line tool ([Dockerfile](https://github.com/filebot/filebot-docker/blob/master/Dockerfile.watcher)) 7 | - [`filebot-xpra`](#filebot-xpra) remote desktop environment ([Dockerfile](https://github.com/filebot/filebot-docker/blob/master/Dockerfile.xpra)) 8 | - [`filebot-projector`](#filebot-projector) web renderer ([Dockerfile](https://github.com/filebot/filebot-docker/blob/master/Dockerfile.projector)) 9 | - [`filebot-webdav`](#filebot-webdav) webdav server ([Dockerfile](https://github.com/filebot/filebot-docker/blob/master/Dockerfile.webdav)) 10 | 11 | ## filebot 12 | 13 | The [`filebot`](https://www.filebot.net/cli.html) command-line tool. 14 | 15 | ```bash 16 | # Run `filebot -script fn:sysinfo` 17 | docker run --rm -it -v "data:/data" -v "$PWD:/volume1" rednoah/filebot -script fn:sysinfo 18 | ``` 19 | ```bash 20 | # Run `filebot --license` 21 | docker run --rm -it -v "data:/data" -v "$PWD:/volume1" rednoah/filebot --license 22 | ``` 23 | ```bash 24 | # Run `filebot -rename -r . --format {plex.id}` 25 | docker run --rm -it -v "data:/data" -v "$PWD:/volume1" rednoah/filebot -rename -r /volume1 --format {plex.id} 26 | ``` 27 | ```bash 28 | # Run `filebot -script fn:amc ./input --output ./output --action duplicate -non-strict --log-file amc.log --def excludeList=amc.txt` 29 | docker run --rm -it -v "data:/data" -v "$PWD:/volume1" rednoah/filebot -script fn:amc /volume1/input --output /volume1/output --action duplicate -non-strict --log-file amc.log --def excludeList=amc.txt 30 | ``` 31 | 32 | ```yml 33 | # docker-compose.yml 34 | version: '3.3' 35 | services: 36 | filebot: 37 | container_name: filebot 38 | image: rednoah/filebot 39 | volumes: 40 | - data:/data 41 | - /path/to/files:/volume1 42 | command: -script fn:sysinfo 43 | ``` 44 | 45 | 46 | ## filebot-node 47 | 48 | FileBot Node allows you to call the [amc script](https://www.filebot.net/amc.html) via a simple web interface. 49 | 50 | ```bash 51 | docker run --rm -it -v "data:/data" -v "$PWD:/volume1" -p 5452:5452 rednoah/filebot:node 52 | ``` 53 | 54 | ```yml 55 | # docker-compose.yml 56 | version: '3.3' 57 | services: 58 | filebot-node: 59 | container_name: filebot-node 60 | image: rednoah/filebot:node 61 | restart: unless-stopped 62 | volumes: 63 | - data:/data 64 | - /path/to/files:/volume1 65 | ports: 66 | - 5452:5452 67 | ``` 68 | 69 | Once the [FileBot Node Service](https://github.com/filebot/filebot-node) is running, you can access the web interface via [http://localhost:5452/filebot/](http://localhost:5452/filebot/). You can create prepared tasks via `Execute ➔ Schedule` and then execute them remotely via `curl http://localhost:5452/task?id=${TASK_ID}`. 70 | 71 | You may secure the [FileBot Node Service](https://github.com/filebot/filebot-node) by using `HTTPS` and `BASIC` authentication: 72 | ```bash 73 | docker run --rm -it -v "data:/data" -v "$PWD:/volume1" -e FILEBOT_NODE_AUTH=BASIC -e FILEBOT_NODE_AUTH_USER=YOUR_USERNAME -e FILEBOT_NODE_AUTH_PASS=YOUR_PASSWORD -p 5452:5452 -v /etc/ssl:/etc/ssl:ro -e FILEBOT_NODE_HTTPS=YES -e FILEBOT_NODE_HTTPS_PORT=5453 -e FILEBOT_NODE_HTTPS_KEY=/etc/ssl/private/server.key -e FILEBOT_NODE_HTTPS_CRT=/etc/ssl/certs/server.crt -p 5453:5453 rednoah/filebot:node 74 | ``` 75 | 76 | ```yml 77 | # docker-compose.yml 78 | version: '3.3' 79 | services: 80 | filebot-node: 81 | container_name: filebot-node 82 | image: rednoah/filebot:node 83 | restart: unless-stopped 84 | volumes: 85 | - data:/data 86 | - /path/to/files:/volume1 87 | - /etc/ssl:/etc/ssl:ro 88 | ports: 89 | - 5452:5452 90 | - 5453:5453 91 | environment: 92 | - FILEBOT_NODE_AUTH=BASIC 93 | - FILEBOT_NODE_AUTH_USER=YOUR_USERNAME 94 | - FILEBOT_NODE_AUTH_PASS=YOUR_PASSWORD 95 | - FILEBOT_NODE_HTTPS=YES 96 | - FILEBOT_NODE_HTTPS_PORT=5453 97 | - FILEBOT_NODE_HTTPS_KEY=/etc/ssl/private/server.key 98 | - FILEBOT_NODE_HTTPS_CRT=/etc/ssl/certs/server.crt 99 | ``` 100 | ![FileBot Node](https://github.com/filebot/docs/raw/master/screenshots/docker-node.png) 101 | 102 | 103 | ## filebot-watcher 104 | 105 | The [`filebot-watcher`](https://github.com/filebot/filebot-docker/blob/master/watcher/opt/bin/filebot-watcher) command-line tool watches a given folder and executes the [amc script](https://www.filebot.net/amc.html) on newly added files. Please read the [manual](https://www.filebot.net/forums/viewtopic.php?t=13038) for details and watch the [video tutorial](https://www.youtube.com/watch?v=AjP-ci9Cx5Q) to see it in action. 106 | 107 | ```bash 108 | docker run --rm -it -v "data:/data" -v "$PWD:/volume1" rednoah/filebot:watcher /volume1/input --output /volume1/output 109 | ``` 110 | The first argument `$1` is the watch folder. The remaining arguments are [amc script](https://www.filebot.net/amc.html) options. 111 | 112 | ```yml 113 | # docker-compose.yml 114 | version: '3.3' 115 | services: 116 | filebot: 117 | container_name: filebot-watcher 118 | image: rednoah/filebot:watcher 119 | restart: unless-stopped 120 | volumes: 121 | - data:/data 122 | - /path/to/files:/volume1 123 | command: /volume1/input --output /volume1/output # see amc script usage 124 | ``` 125 | 126 | 127 | ## filebot-xpra 128 | 129 | Run the [FileBot Desktop application](https://www.filebot.net/getting-started/) via [xpra](https://xpra.org/) and make it remotely available at [http://localhost:5454/](http://localhost:5454/). 130 | 131 | ```bash 132 | docker run --rm -it -v "data:/data" -v "$PWD:/volume1" -e XPRA_AUTH="password:value=YOUR_PASSWORD" -p 5454:5454 rednoah/filebot:xpra 133 | ``` 134 | 135 | ```yml 136 | # docker-compose.yml 137 | version: '3.3' 138 | services: 139 | filebot: 140 | container_name: filebot-xpra 141 | image: rednoah/filebot:xpra 142 | restart: unless-stopped 143 | volumes: 144 | - data:/data 145 | - /path/to/files:/volume1 146 | ports: 147 | - 5454:5454 148 | environment: 149 | - XPRA_AUTH=password:value=YOUR_PASSWORD 150 | ``` 151 | ![Xpra Remote Desktop](https://github.com/filebot/docs/raw/master/screenshots/docker-xpra.png) 152 | 153 | If the clipboard does not work, then you may need to enable `Clipboard` permissions. If `CTRL+V` does not work, then you may need to use `Right-Click ➔ Paste` to paste text from the system clipboard: 154 | ![Xpra Remote Desktop - Enable Copy & Paste](https://raw.githubusercontent.com/filebot/docs/master/screenshots/filebot-xpra-clipboard.png) 155 | 156 | If you have a `Reverse Proxy` that takes care of SSL and authentication, then you can disable authentication via `-e XPRA_AUTH=none` and disable remote access via `-e XPRA_BIND=127.0.0.1`. 157 | 158 | 159 | ## filebot-projector 160 | 161 | Run the [FileBot Desktop application](https://www.filebot.net/getting-started/) via [JetBrains Projector](https://github.com/JetBrains/projector-server) and make it remotely available at [http://localhost:8887/](http://localhost:8887/). 162 | 163 | ```bash 164 | docker run --rm -it -v "data:/data" -v "$PWD:/volume1" -p 8887:8887 rednoah/filebot:projector 165 | ``` 166 | 167 | ```yml 168 | # docker-compose.yml 169 | version: '3.3' 170 | services: 171 | filebot: 172 | container_name: filebot-projector 173 | image: rednoah/filebot:projector 174 | restart: unless-stopped 175 | volumes: 176 | - data:/data 177 | - /path/to/files:/volume1 178 | ports: 179 | - 8887:8887 180 | ``` 181 | 182 | 183 | ## filebot-webdav 184 | 185 | Run an [Apache WebDAV Server](https://httpd.apache.org/docs/2.4/mod/mod_dav.html) for remote file system access via [http://localhost:8080/](http://localhost:8080/). 186 | 187 | ```bash 188 | docker run --rm -it -v "$PWD:/volume1" -e USERNAME=alice -e PASSWORD=secret1234 -p 8080:8080 rednoah/filebot:webdav 189 | ``` 190 | 191 | ```yml 192 | # docker-compose.yml 193 | version: '3.3' 194 | services: 195 | filebot: 196 | container_name: filebot-webdav 197 | image: rednoah/filebot:webdav 198 | restart: unless-stopped 199 | volumes: 200 | - /path/to/files:/volume1 201 | ports: 202 | - 8080:8080 203 | environment: 204 | - USERNAME=alice 205 | - PASSWORD=secret1234 206 | ``` 207 | ![Map Network Drive via HTTP WebDAV](https://github.com/filebot/docs/raw/master/screenshots/filebot-webdav-map-network-drive.png) 208 | 209 | 210 | 211 | # FAQ 212 | 213 | 214 | ## How do I activate my license? 215 | 216 | You can activate your license by calling `filebot --license` from within the docker container. 217 | ```bash 218 | # Read License Key from Console Input 219 | docker run --rm -it -v "data:/data" rednoah/filebot --license 220 | ``` 221 | ```bash 222 | # Read License Key from License File 223 | docker run --rm -it -v "data:/data" -v "$PWD:/volume1" rednoah/filebot --license /volume1/T1000.psm 224 | ``` 225 | Your license will then be stored in `-v data:/data` (i.e. named persistent volume `data` mapped as `/data` in the container file system) which is the persistent application data folder. All your FileBot docker containers must therefore use the same `data:/data` volume mount so that they can share the same application data folder. Please read [Run your app in production ➔ Manage application data ➔ Volumes](https://docs.docker.com/storage/volumes/) for details. 226 | 227 | If you use `-e PUID` or `-e PGID` to run `filebot` with a different UID then you must use the same `-e PUID` or `-e PGID` environment variables when calling `filebot --license` to install the your license key into the correct user-specific application data folder. 228 | 229 | Alternatively, you can map your license file into the container at the expected file path directly via your launch configuration: 230 | ```sh 231 | docker run --rm -it -v "data:/data" -v "/path/to/FileBot_License_P12345678.psm:/data/filebot/license.txt" -v "/path/to/files:/volume1" rednoah/filebot -script fn:sysinfo 232 | ``` 233 | ```yml 234 | # docker-compose.yml 235 | version: '3.3' 236 | services: 237 | filebot: 238 | container_name: filebot 239 | image: rednoah/filebot 240 | volumes: 241 | - data:/data 242 | - /path/to/FileBot_License_P12345678.psm:/data/filebot/license.txt 243 | - /path/to/files:/volume1 244 | command: -script fn:sysinfo 245 | ``` 246 | 247 | 248 | ## How do I enter my OpenSubtitles login details? 249 | 250 | You can enter your OpenSubtitles login details by calling `filebot -script fn:configure` from within the docker container. 251 | ```bash 252 | # Read login details from Console Input 253 | docker run --rm -it -v "data:/data" rednoah/filebot -script fn:configure 254 | ``` 255 | ```bash 256 | # Pass login details via Command-line Arguments 257 | docker run --rm -it -v "data:/data" rednoah/filebot -script fn:configure --def osdbUser=USERNAME --def osdbPwd=PASSWORD 258 | ``` 259 | Your user settings will then be stored in `-v data:/data` (i.e. named persistent volume `data` mapped as `/data` in the container file system) which is the persistent application data folder. All your FileBot docker containers must therefore use the same `data:/data` volume mount so that they can share the same application data folder. 260 | 261 | 262 | ## How to do I run the process inside the container as a different user? 263 | 264 | You can set the environment variables `PUID` and `PGID` to run the process with the given `UID`: 265 | ```bash 266 | -e PUID=1000 -e PGID=1000 267 | ``` 268 | ```yml 269 | environment: 270 | - PUID=1000 271 | - PGID=1000 272 | ``` 273 | You may use `PUID=0` to run as default `root` user or docker `--user`: 274 | ```bash 275 | docker run --rm -it -v "data:/data" -e PUID=0 -e PGID=0 rednoah/filebot -script fn:sysinfo 276 | ``` 277 | 278 | 279 | ## How do I start an interactive shell session inside the container? 280 | 281 | You can use the `--entrypoint` option to run `bash` on startup: 282 | ``` 283 | $ docker run --rm -it -v "data:/data" -v "$PWD:/volume1" -e PUID=1000 -e PGID=1000 --entrypoint /opt/bin/run-as-user rednoah/filebot bash 284 | filebot@dcc9dbeac18d:/$ filebot -version 285 | FileBot 4.9.6 (r9125) 286 | ``` 287 | 288 | 289 | ## Notes on `--action MOVE` and `--action HARDLINK` 290 | 291 | `docker` treats each volume mount as a separate filesystem. Thus, if you are using `--action MOVE` or `--action HARDLINK` then the input path and the output path must be on the same volume mount. If you process files across volume mounts, then `--action HARDLINK` will fail with `I/O error: cross-device link`, and `--action MOVE` and `--action DUPLICATE` will resort to physically copying files. 292 | 293 | Please organize your files like so, and then use `/path/to/files` as volume mount: 294 | ``` 295 | /path/to/files/input 296 | /path/to/files/output 297 | ``` 298 | ```bash 299 | -v /path/to/files:/volume1 300 | ``` 301 | ```yml 302 | volumes: 303 | - /path/to/files:/volume1 304 | ``` 305 | -------------------------------------------------------------------------------- /generic/opt/bin/run: -------------------------------------------------------------------------------- 1 | #!/bin/sh -u 2 | 3 | 4 | # print license activation help for new users 5 | if [ ! -f "$HOME/license.txt" ]; then 6 | /opt/share/activate.sh 7 | fi 8 | 9 | # set working directory 10 | cd "$HOME" 11 | 12 | # execute filebot with the given arguments 13 | exec "$@" 14 | -------------------------------------------------------------------------------- /generic/opt/bin/run-as-user: -------------------------------------------------------------------------------- 1 | #!/bin/sh -u 2 | 3 | 4 | # run as root 5 | if [ 0 -eq "$PUID" ] || [ 0 -eq "$PGID" ]; then 6 | exec "$@" 7 | fi 8 | 9 | 10 | # configure normal user 11 | export HOME="$HOME/$PUSER" 12 | ( 13 | getent group "$PGID" || addgroup "$PGROUP" --gid "$PGID" 14 | getent passwd "$PUID" || adduser "$PUSER" --uid "$PUID" --gid "$PGID" --gecos "" --home "$HOME" --disabled-password 15 | mkdir -p "$HOME" 16 | chown -R "$PUID:$PGID" "$HOME" 17 | ) > /dev/null 2>&1 18 | 19 | # run as normal user 20 | sudo --user "#$PUID" --group "#$PGID" --non-interactive --preserve-env -- "$@" 21 | -------------------------------------------------------------------------------- /generic/opt/share/activate.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | 4 | echo " 5 | -------------------------------------------------------------------------------- 6 | 7 | Hello! Do you need help Getting Started? 8 | 9 | # FAQ 10 | https://www.filebot.net/linux/docker.html 11 | 12 | # Read License Key from Console 13 | docker run --rm -it -v data:/data -e PUID=$(id -u) -e PGID=$(id -g) rednoah/filebot --license 14 | 15 | -------------------------------------------------------------------------------- 16 | " 17 | 18 | 19 | echo " 20 | \033[38;5;214m 21 | # env 22 | USER=$(id -un)($(id -u)) 23 | HOME=$HOME 24 | \033[0m 25 | " 26 | 27 | 28 | if [ "$(id -u)" -eq 0 ]; then 29 | echo " 30 | \033[38;5;196m 31 | !!! YOU ARE RUNNING AS ROOT AND NOT AS NORMAL USER !!! 32 | \033[0m 33 | " 34 | fi 35 | 36 | 37 | if [ ! -d "$HOME" ] || [ "$(stat --file-system --format '%T' "$HOME")" = 'overlayfs' ]; then 38 | echo " 39 | \033[38;5;196m 40 | !!! YOU DID NOT BIND MOUNT $HOME TO A PERSISTENT HOST FOLDER !!! 41 | 42 | All data stored to the application data folder \`$HOME\` will be lost on container shutdown, like tears in rain. 43 | Please add \`-v data:/data\` to your \`docker\` command lest your application data, such as license key, be lost in time. 44 | \033[0m 45 | " 46 | fi 47 | -------------------------------------------------------------------------------- /makefile: -------------------------------------------------------------------------------- 1 | filebot: 2 | docker build --rm -t filebot -f Dockerfile . 3 | docker run -it -v ${PWD}:/volume1 -v data:/data filebot -script fn:sysinfo 4 | 5 | filebot-node: 6 | docker build --rm -t filebot-node -f Dockerfile.node . 7 | docker run -it -v ${PWD}:/volume1 -v data:/data -p 5452:5452 filebot-node 8 | 9 | filebot-watcher: 10 | docker build --rm -t filebot-watcher -f Dockerfile.watcher . 11 | mkdir -p input output 12 | docker run -it -v ${PWD}:/volume1 -v data:/data -e SETTLE_DOWN_TIME=5 filebot-watcher /volume1/input --output /volume1/output 13 | 14 | filebot-xpra: 15 | docker build --rm -t filebot-xpra -f Dockerfile.xpra . 16 | docker run -it -v ${PWD}:/volume1 -v data:/data -p 5454:5454 filebot-xpra 17 | 18 | filebot-projector: 19 | docker build --rm -t filebot-projector -f Dockerfile.projector . 20 | docker run -it -v data:/data -p 8887:8887 filebot-projector 21 | 22 | filebot-webdav: 23 | docker build --rm -t filebot-webdav -f Dockerfile.webdav . 24 | docker run -it -v ${PWD}:/volume1 -e USERNAME=alice -e PASSWORD=secret1234 -p 8080:8080 filebot-webdav 25 | 26 | filebot-alpine: 27 | docker build --rm -t filebot-alpine -f Dockerfile.alpine . 28 | docker run -it -v ${PWD}:/volume1 -v data:/data filebot-alpine -script fn:sysinfo 29 | 30 | filebot-graalvm: 31 | docker build --rm -t filebot-graalvm -f Dockerfile.graalvm . 32 | docker run -it -v ${PWD}:/volume1 -v data:/data filebot-graalvm -script fn:sysinfo 33 | 34 | filebot-beta: 35 | docker build --rm -t filebot-beta -f Dockerfile.beta . 36 | docker run -it -v ${PWD}:/volume1 -v data:/data filebot-beta -script fn:sysinfo 37 | 38 | filebot-shell: 39 | docker build --rm -t filebot -f Dockerfile . 40 | docker run -it -v ${PWD}:/volume1 -v data:/data --entrypoint /bin/bash filebot 41 | 42 | clean: 43 | git reset --hard 44 | git pull 45 | git --no-pager log -1 46 | -------------------------------------------------------------------------------- /node/opt/filebot-node/start: -------------------------------------------------------------------------------- 1 | #!/bin/sh -u 2 | 3 | export FILEBOT_NODE_HOST="0.0.0.0" # bind to all interfaces 4 | 5 | export FILEBOT_CMD="filebot" 6 | export FILEBOT_CMD_CWD="/" 7 | export FILEBOT_CMD_UID="$PUID" 8 | export FILEBOT_CMD_GID="$PGID" 9 | 10 | export FILEBOT_NODE_DATA="$HOME/node" 11 | export FILEBOT_TASK_CMD="/opt/filebot-node/task" 12 | 13 | export FILEBOT_NODE_CLIENT="/opt/filebot-node/client" 14 | 15 | 16 | # import user environment 17 | if [ -f "$FILEBOT_NODE_DATA/environment.sh" ]; then 18 | source "$FILEBOT_NODE_DATA/environment.sh" 19 | fi 20 | 21 | 22 | exec node "/opt/filebot-node/server/app.js" 23 | -------------------------------------------------------------------------------- /node/opt/filebot-node/task: -------------------------------------------------------------------------------- 1 | #!/bin/bash -u 2 | 3 | export FILEBOT_NODE_DATA="$HOME/node" 4 | export FILEBOT_NODE_TASK="$1" 5 | 6 | 7 | # sanity check 8 | if [ ! -f "$FILEBOT_NODE_DATA/task/$FILEBOT_NODE_TASK.args" ]; then 9 | echo "$0: Task $FILEBOT_NODE_TASK does not exist" 10 | exit 1 11 | fi 12 | 13 | 14 | # import user environment 15 | if [ -f "$FILEBOT_NODE_DATA/environment.sh" ]; then 16 | source "$FILEBOT_NODE_DATA/environment.sh" 17 | fi 18 | 19 | 20 | # execute filebot task and record output 21 | filebot "@$FILEBOT_NODE_DATA/task/$FILEBOT_NODE_TASK.args" 2>&1 | tee -a "$FILEBOT_NODE_DATA/log/$FILEBOT_NODE_TASK.log" 22 | 23 | 24 | # get filebot exit code (and not tee exit code) 25 | STATUS="${PIPESTATUS[0]}" 26 | 27 | # treat ExitCode.NOOP as ExitCode.SUCCESS 28 | if [ $STATUS -eq 100 ]; then 29 | exit 0 30 | fi 31 | 32 | exit $STATUS 33 | -------------------------------------------------------------------------------- /projector/opt/filebot-projector/start: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | filebot "$@" | egrep -v 'IdeState|isIdeAttached|ProjectorBatchTransformer|InjectorAgent|IDE' 3 | -------------------------------------------------------------------------------- /watcher/opt/bin/filebot-watcher: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | inotifywait --monitor "$1" --event create --event moved_to --event modify --exclude '/[.@]' --format '%w%f' $INOTIFYWAIT_OPTS | stdbuf -oL uniq | while read -r FILE; do 4 | TODAY="$(date '+%Y/%m/%d %H:%M:%S %Z')" 5 | 6 | echo "[INOTIFY] $FILE" 7 | 8 | # make sure to inform the user that we are waiting for things to settle down 9 | echo "[$TODAY] Waiting $SETTLE_DOWN_TIME seconds for changes to settle down..." 10 | 11 | # file may yield inode/x-empty for new files 12 | sleep "$SETTLE_DOWN_TIME" 13 | 14 | # abort if the file is currently being written (i.e. network copy operations can take minutes or hours) 15 | RECENTLY_MODIFIED_FILES="$(find "$1" -type f -newermt "$SETTLE_DOWN_CHECK" -not -path '*/[.@]*' -print -quit)" 16 | 17 | if [ -n "$RECENTLY_MODIFIED_FILES" ]; then 18 | echo "[$TODAY] $RECENTLY_MODIFIED_FILES was modified less than $SETTLE_DOWN_CHECK" 19 | echo "Processing deferred until next change..." 20 | continue 21 | fi 22 | 23 | # e.g. video.mp4: video/mp4 24 | if file --mime-type "$FILE" | egrep --quiet "directory|video|audio|empty|octet-stream"; then 25 | filebot -script fn:amc --action duplicate --conflict auto -non-strict --log-file amc.log --def excludeList=".excludes" unsorted=y music=y artwork=y "$@" 26 | else 27 | echo "Ignore: $(file --mime-type "$FILE")" 28 | fi 29 | done 30 | -------------------------------------------------------------------------------- /webdav/opt/bin/httpd: -------------------------------------------------------------------------------- 1 | #!/bin/sh -u 2 | 3 | cd "$HOME" 4 | 5 | # create or truncate the lock database 6 | rm -f "DavLock" && touch "DavLock" 7 | 8 | # prepare the passwd file 9 | echo "$USERNAME:$REALM:$(echo -n "$USERNAME:$REALM:$PASSWORD" | md5sum | cut -d' ' -f1)" > "user.passwd" 10 | 11 | # start http server 12 | exec /usr/local/apache2/bin/httpd -D FOREGROUND 13 | -------------------------------------------------------------------------------- /webdav/opt/bin/run-as-user: -------------------------------------------------------------------------------- 1 | #!/bin/sh -u 2 | 3 | 4 | # run as root 5 | if [ 0 -eq "$PUID" ] || [ 0 -eq "$PGID" ]; then 6 | exec "$@" 7 | fi 8 | 9 | 10 | # configure normal user 11 | export HOME="$HOME/$PUSER" 12 | ( 13 | getent group "$PGID" || addgroup "$PGROUP" --gid "$PGID" 14 | getent passwd "$PUID" || adduser "$PUSER" --uid "$PUID" --gid "$PGID" --gecos "" --home "$HOME" --disabled-password 15 | mkdir -p "$HOME" 16 | chown -R "$PUID:$PGID" "$HOME" 17 | ) > /dev/null 2>&1 18 | 19 | # run as normal user 20 | sudo --user "#$PUID" --group "#$PGID" --non-interactive --preserve-env -- "$@" 21 | -------------------------------------------------------------------------------- /webdav/usr/local/apache2/conf/dav.conf: -------------------------------------------------------------------------------- 1 | DavLockDB "${HOME}/DavLock" 2 | Alias / "${ROOT}/" 3 | 4 | 5 | # Enable WebDAV 6 | Dav On 7 | 8 | # Auth 9 | AuthType Digest 10 | AuthName "${REALM}" 11 | AuthUserFile "${HOME}/user.passwd" 12 | 13 | Require valid-user 14 | 15 | 16 | # Limits 17 | LimitXMLRequestBody 0 18 | DavDepthInfinity on 19 | DavMinTimeout 120 20 | 21 | # Ensure mod_autoindex is used 22 | Options +Indexes 23 | 24 | # Ensure mod_dir does not take precedence over mod_autoindex 25 | DirectoryIndex disabled 26 | 27 | # Table configuration 28 | IndexStyleSheet https://get.filebot.net/index/index.css 29 | IndexOptions FancyIndexing NameWidth=* IconsAreLinks IconWidth=16 IconHeight=16 VersionSort FoldersFirst IgnoreClient SuppressDescription SuppressColumnSorting XHTML HTMLTable Charset=UTF-8 30 | 31 | 32 | 33 | # disable redirects on non-GET requests for directories that don't include the trailing slash (for misbehaving clients) 34 | BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully 35 | BrowserMatch "^Microsoft-WebDAV-MiniRedir" redirect-carefully 36 | BrowserMatch "MS FrontPage" redirect-carefully 37 | BrowserMatch "^WebDrive" redirect-carefully 38 | BrowserMatch "^WebDAVFS/1.[01234]" redirect-carefully 39 | BrowserMatch "^gnome-vfs/1.0" redirect-carefully 40 | BrowserMatch "^XML Spy" redirect-carefully 41 | BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully 42 | BrowserMatch " Konqueror/4" redirect-carefully 43 | BrowserMatch "^gvfs" redirect-carefully 44 | BrowserMatch "^Jakarta-Commons-VFS" redirect-carefully 45 | -------------------------------------------------------------------------------- /webdav/usr/local/apache2/conf/http.conf: -------------------------------------------------------------------------------- 1 | 2 | ServerName "${HOST}" 3 | DocumentRoot "${ROOT}/" 4 | 5 | 6 | Require all denied 7 | 8 | 9 | # unlimited request limit 10 | LimitRequestBody 0 11 | 12 | # make certain DAV methods work behind an SSL reverse proxy 13 | RequestHeader edit Destination ^https http early 14 | 15 | -------------------------------------------------------------------------------- /webdav/usr/local/apache2/conf/httpd.conf: -------------------------------------------------------------------------------- 1 | # 2 | # ServerRoot: The top of the directory tree under which the server's 3 | # configuration, error, and log files are kept. 4 | # 5 | # Do not add a slash at the end of the directory path. If you point 6 | # ServerRoot at a non-local disk, be sure to specify a local disk on the 7 | # Mutex directive, if file-based mutexes are used. If you wish to share the 8 | # same ServerRoot for multiple httpd daemons, you will need to change at 9 | # least PidFile. 10 | # 11 | ServerRoot "/usr/local/apache2" 12 | 13 | # 14 | # Listen: Allows you to bind Apache to specific IP addresses and/or 15 | # ports, instead of the default. See also the 16 | # directive. 17 | # 18 | # Change this to Listen on specific IP addresses as shown below to 19 | # prevent Apache from glomming onto all bound IP addresses. 20 | # 21 | Listen ${PORT} 22 | 23 | # 24 | # Dynamic Shared Object (DSO) Support 25 | # 26 | # To be able to use the functionality of a module which was built as a DSO you 27 | # have to place corresponding `LoadModule' lines at this location so the 28 | # directives contained in it are actually available _before_ they are used. 29 | # Statically compiled modules (those listed by `httpd -l') do not need 30 | # to be loaded here. 31 | # 32 | LoadModule mpm_event_module modules/mod_mpm_event.so 33 | LoadModule authn_file_module modules/mod_authn_file.so 34 | LoadModule authn_core_module modules/mod_authn_core.so 35 | LoadModule authz_host_module modules/mod_authz_host.so 36 | LoadModule authz_groupfile_module modules/mod_authz_groupfile.so 37 | LoadModule authz_user_module modules/mod_authz_user.so 38 | LoadModule authz_core_module modules/mod_authz_core.so 39 | LoadModule access_compat_module modules/mod_access_compat.so 40 | LoadModule auth_basic_module modules/mod_auth_basic.so 41 | LoadModule auth_digest_module modules/mod_auth_digest.so 42 | LoadModule reqtimeout_module modules/mod_reqtimeout.so 43 | LoadModule include_module modules/mod_include.so 44 | LoadModule filter_module modules/mod_filter.so 45 | LoadModule mime_module modules/mod_mime.so 46 | LoadModule log_config_module modules/mod_log_config.so 47 | LoadModule env_module modules/mod_env.so 48 | LoadModule headers_module modules/mod_headers.so 49 | LoadModule setenvif_module modules/mod_setenvif.so 50 | LoadModule version_module modules/mod_version.so 51 | LoadModule unixd_module modules/mod_unixd.so 52 | LoadModule dav_module modules/mod_dav.so 53 | LoadModule status_module modules/mod_status.so 54 | LoadModule autoindex_module modules/mod_autoindex.so 55 | LoadModule dav_fs_module modules/mod_dav_fs.so 56 | LoadModule dir_module modules/mod_dir.so 57 | LoadModule alias_module modules/mod_alias.so 58 | 59 | # 60 | # ServerName gives the name and port that the server uses to identify itself. 61 | # This can often be determined automatically, but we recommend you specify 62 | # it explicitly to prevent problems during startup. 63 | # 64 | # If your host doesn't have a registered DNS name, enter its IP address here. 65 | # 66 | ServerName ${HOST}:${PORT} 67 | 68 | # 69 | # Deny access to the entirety of your server's filesystem. You must 70 | # explicitly permit access to web content directories in other 71 | # blocks below. 72 | # 73 | 74 | AllowOverride none 75 | Require all denied 76 | 77 | 78 | # 79 | # DocumentRoot: The directory out of which you will serve your 80 | # documents. By default, all requests are taken from this directory, but 81 | # symbolic links and aliases may be used to point to other locations. 82 | # 83 | DocumentRoot "${ROOT}/" 84 | 85 | 86 | # 87 | # Possible values for the Options directive are "None", "All", 88 | # or any combination of: 89 | # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews 90 | # 91 | # Note that "MultiViews" must be named *explicitly* --- "Options All" 92 | # doesn't give it to you. 93 | # 94 | # The Options directive is both complicated and important. Please see 95 | # http://httpd.apache.org/docs/2.4/mod/core.html#options 96 | # for more information. 97 | # 98 | Options Indexes FollowSymLinks 99 | 100 | # 101 | # AllowOverride controls what directives may be placed in .htaccess files. 102 | # It can be "All", "None", or any combination of the keywords: 103 | # AllowOverride FileInfo AuthConfig Limit 104 | # 105 | AllowOverride None 106 | 107 | # 108 | # Controls who can get stuff from this server. 109 | # 110 | Require all granted 111 | 112 | 113 | # 114 | # ErrorLog: The location of the error log file. 115 | # If you do not specify an ErrorLog directive within a 116 | # container, error messages relating to that virtual host will be 117 | # logged here. If you *do* define an error logfile for a 118 | # container, that host's errors will be logged there and not here. 119 | # 120 | ErrorLog /dev/stderr 121 | 122 | # 123 | # LogLevel: Control the number of messages logged to the error_log. 124 | # Possible values include: debug, info, notice, warn, error, crit, 125 | # alert, emerg. 126 | # 127 | LogLevel warn 128 | 129 | 130 | # 131 | # The following directives define some format nicknames for use with 132 | # a CustomLog directive (see below). 133 | # 134 | LogFormat "%t %h \"%{User-Agent}i\" %>s \"%r\"" common 135 | 136 | # 137 | # The location and format of the access logfile (Common Logfile Format). 138 | # If you do not define any access logfiles within a 139 | # container, they will be logged here. Contrariwise, if you *do* 140 | # define per- access logfiles, transactions will be 141 | # logged therein and *not* in this file. 142 | # 143 | CustomLog /proc/self/fd/1 common 144 | 145 | 146 | # Supplemental configuration 147 | # 148 | # The configuration files in the conf/extra/ directory can be 149 | # included to add extra features or to modify the default configuration of 150 | # the server, or you may simply copy their contents here and change as 151 | # necessary. 152 | 153 | # Fancy directory listings 154 | Include conf/extra/httpd-autoindex.conf 155 | 156 | 157 | 158 | # store pid file to writable directory 159 | PidFile ${HOME}/httpd.pid 160 | 161 | # custom server configuration 162 | Include conf/dav.conf 163 | Include conf/http.conf 164 | -------------------------------------------------------------------------------- /xpra/etc/xpra/xpra.conf: -------------------------------------------------------------------------------- 1 | opengl=no 2 | pulseaudio=no 3 | bell=no 4 | webcam=no 5 | printing=no 6 | speaker=disabled 7 | microphone=disabled 8 | system-tray=no 9 | mdns=no 10 | notifications=no 11 | dbus-proxy=no 12 | dbus-control=no 13 | dbus-launch=no 14 | systemd-run=no 15 | file-transfer=off 16 | open-files=off 17 | min-quality=80 18 | encoding=rgb 19 | video-scaling=off 20 | html=on 21 | -------------------------------------------------------------------------------- /xpra/opt/filebot-xpra/start: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | 4 | # silence xpra startup error messages 5 | export XDG_RUNTIME_DIR="/tmp" 6 | 7 | mkdir -m 700 -p "/tmp/xpra/0" 8 | mkdir -m 700 -p "/run/user/$PUID/xpra" 9 | 10 | 11 | # run xpra service 12 | xpra start \ 13 | --start-child="filebot" \ 14 | --exit-with-children \ 15 | --bind-tcp="$XPRA_BIND:$XPRA_PORT" \ 16 | --tcp-auth="$XPRA_AUTH" \ 17 | --daemon=no \ 18 | $XPRA_OPTS 2>&1 \ 19 | | grep -v \ 20 | -e 'pointer device emulation using XTest' \ 21 | -e 'uinput' \ 22 | -e 'missing audio module' \ 23 | -e 'failed to choose pdev' \ 24 | -e 'failed to create drisw screen' \ 25 | -e 'some GStreamer elements are missing' \ 26 | -e 'vah264lpenc' \ 27 | -e 'gtk_widget_realize' \ 28 | -e 'encoding failed' \ 29 | -e 'all the codecs have failed' \ 30 | -e '.X11-unix will not be created' \ 31 | -e 'created unix domain socket' \ 32 | -e '/run/user/1000/xpra' \ 33 | -e '/home/ubuntu/.xpra' \ 34 | -e '/tmp/xpra/0/socket' \ 35 | -e 'created abstract sockets' \ 36 | -e '@xpra/0' \ 37 | -e '/data/filebot/.xpra' \ 38 | -e 'private server socket path' \ 39 | -e '/tmp/xpra/0/pulse/pulse/native' \ 40 | -e 'cannot create group socket' \ 41 | -e '/run/dbus/system_bus_socket' \ 42 | -e 'Errno 13' \ 43 | -e 'import asyncore' \ 44 | -e 'watching for applications menu changes' \ 45 | -e '/usr/share/applications' \ 46 | -e '/usr/share/xpra/www' \ 47 | -e '/tmp/xpra/0/server.pid' \ 48 | -e 'ibus-daemon' \ 49 | -e 'D-Bus notification forwarding is available' \ 50 | -e 'start menu entries' \ 51 | -e 'No OpenGL_accelerate module loaded' \ 52 | -e 'xkbcomp' \ 53 | -e 'Could not resolve keysym' \ 54 | -e 'DeprecationWarning' \ 55 | -e '_stop_event' \ 56 | -e 'webcam forwarding is disabled' \ 57 | -e 'video4linux' \ 58 | -e 'v4l2loopback' \ 59 | -e 'webcam' \ 60 | -e 'lpinfo command failed' \ 61 | -e '/usr/sbin/lpinfo' \ 62 | -e 'printer forwarding enabled' \ 63 | -e 'IPv6 loopback address is not supported' 64 | -------------------------------------------------------------------------------- /xpra/usr/share/xpra/www/default-settings.txt: -------------------------------------------------------------------------------- 1 | # Xpra HTML5 default settings 2 | 3 | keyboard = no 4 | clipboard = yes 5 | printing = no 6 | file_transfer = no 7 | floating_menu = no 8 | sound = no 9 | --------------------------------------------------------------------------------