Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
4678620
Update docker-compose.yaml
mmomjian Jan 24, 2025
76a6072
Update docker-publish.yml
mmomjian Jan 24, 2025
e7bae05
Merge pull request #4 from mmomjian/docker
johnpc Jan 25, 2025
96a6d77
fix language extensions and make schedule/paths customizable
johnpc Jan 26, 2025
15e0749
fix: prevent reprocessing subtitles
johnpc Jan 27, 2025
8dd29d4
feat: remove .env file (#7)
mmomjian Jan 27, 2025
a6d56ea
chore: Add text block around dir structure (#8)
truggeri Jan 27, 2025
47d1b28
Update README.md (#9)
mmomjian Jan 27, 2025
2584a4f
feat: add env vars for INCLUDE_ENGINES and MAX_CONCURRENT_SYNC (#13)
johnpc Jan 31, 2025
95f8d3d
feat: add alass engine (#14)
johnpc Feb 2, 2025
ba0ca6f
feat: enable non-root container behavior (#15)
johnpc Feb 2, 2025
f87cd32
chore: add timestamps to logging
johnpc Feb 3, 2025
573b9d0
added UI and auto-skipping on failed attempt to sync
Jan 3, 2026
0dec977
added UI and auto-skipping on failed attempt to sync
Jan 3, 2026
52ec604
added UI and auto-skipping on failed attempt to sync
Jan 3, 2026
e7f55d0
add UI and updated ignore
Jan 3, 2026
3a4791c
fixed RAM usage issue and added ability to skip files that repeatedly…
Jan 3, 2026
a54d601
fixed some memory issues with runs cancelling early
Jan 4, 2026
66afa2a
updated readme
Jan 7, 2026
c05019e
add memory optimization settings for Node.js in Dockerfile
JohnLindahlTech Jan 23, 2026
e787a51
Fix raceCondition with starting a new run in coordinator.
JohnLindahlTech Jan 23, 2026
dffa458
added test script
JohnLindahlTech Jan 23, 2026
85bbe43
lint fixes in app.js
JohnLindahlTech Jan 23, 2026
7cb9389
Fix race condition causing log leakage between runs
JohnLindahlTech Jan 23, 2026
1e1212c
Fix stop request handling during run initialization and processing
JohnLindahlTech Jan 23, 2026
10d0fbf
Merge pull request #1 from JohnLindahlTech/dynamic-heap-space
tomtomwillis Jan 28, 2026
5664848
Merge pull request #2 from JohnLindahlTech/fix-null-dot-id
tomtomwillis Jan 28, 2026
1a3a908
Fix latest tag always being applied to version releases
Jan 28, 2026
d3ce74c
fixed issue with incorrect skipped statistics, added ability to click…
Jan 29, 2026
27d18ef
Add data/logs and db temp files to .gitignore
Jan 29, 2026
9222780
Merge remote-tracking branch 'upstream/main'
Jan 29, 2026
7b8b501
Add .DS_Store to .gitignore
Jan 29, 2026
745786e
Remove .DS_Store from tracking
Jan 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,8 @@ vendor
.git
test-srts
*.log
CODEBASE_REFERENCE.md
docker-compose.dev.yaml
subsyncarr-plus.db
builds
testlogs
18 changes: 9 additions & 9 deletions .github/workflows/docker-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@ jobs:
id: meta
uses: docker/metadata-action@v5
with:
images: mrorbitman/subsyncarr
images: tomtomw123/subsyncarr-plus
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=raw,value=latest,enable=${{ github.ref == format('refs/tags/{0}', github.event.repository.default_branch) }}
type=raw,value=latest

- name: Set up QEMU
uses: docker/setup-qemu-action@v3
Expand Down Expand Up @@ -64,20 +64,20 @@ jobs:

Pull the image using:
```bash
docker pull mrorbitman/subsyncarr:${{ github.ref_name }}
docker pull tomtomw123/subsyncarr-plus:${{ github.ref_name }}
# or
docker pull mrorbitman/subsyncarr:latest
docker pull tomtomw123/subsyncarr-plus:latest
```

Example docker-compose.yaml:

```
name: subsyncarr
name: subsyncarr-plus

services:
subsyncarr:
image: mrorbitman/subsyncarr:latest
container_name: subsyncarr
subsyncarr-plus:
image: tomtomw123/subsyncarr-plus:latest
container_name: subsyncarr-plus
volumes:
# Any path configured with SCAN_PATHS env var must be mounted
# If no scan paths are specified, it defaults to scan `/scan_dir` like example below.
Expand All @@ -95,6 +95,6 @@ jobs:
- INCLUDE_ENGINES=ffsubsync,autosubsync # If not set, all engines are used by default
```

Docker Hub URL: https://hub.docker.com/r/mrorbitman/subsyncarr/tags
Docker Hub URL: https://hub.docker.com/r/tomtomw123/subsyncarr-plus/tags
draft: false
prerelease: false
17 changes: 16 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,22 @@
# macOS
.DS_Store

/node_modules
/build
/dist
/coverage
.eslintcache
.env
/test-srts
/test-srts
CODEBASE_REFERENCE.md
docker-compose.dev.yaml
subsyncarr-plus.db
builds
*.tar
*.tar.gz
testlogs

# Data directory (runtime data)
data/logs/
*.db-shm
*.db-wal
45 changes: 23 additions & 22 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@ RUN groupmod -g ${PGID} node && \
chown -R node:node /home/node
RUN apt-get clean

# Install system dependencies including ffmpeg, Python, and cron
# Install system dependencies including ffmpeg, Python, cron, and build tools
RUN apt-get update && apt-get install -y \
ffmpeg \
python3 \
python3-pip \
python3-venv \
cron \
build-essential \
&& rm -rf /var/lib/apt/lists/*

USER node
Expand All @@ -34,6 +35,9 @@ COPY --chown=node:node package*.json ./
ENV HUSKY=0
RUN npm install --ignore-scripts

# Rebuild native modules for the container's platform
RUN npm rebuild better-sqlite3

# Copy the rest of your application
COPY --chown=node:node . .
RUN mkdir -p /home/node/.local/bin/
Expand All @@ -42,6 +46,9 @@ RUN cp bin/* /home/node/.local/bin/
# Build TypeScript
RUN npm run build

# Create data directory for SQLite database
RUN mkdir -p /app/data && chown node:node /app/data

# Create startup script
# Set default cron schedule (if not provided by environment variable)
ENV CRON_SCHEDULE="0 0 * * *"
Expand All @@ -54,25 +61,19 @@ RUN python3 -m pip install --user pipx \
ENV PATH="/home/node/.local/bin:$PATH"

# Install ffsubsync and autosubsync using pipx
# Clean caches after installation to reduce memory footprint
RUN pipx install ffsubsync \
&& pipx install autosubsync


# Create startup script with proper permissions
RUN echo '#!/bin/bash\n\
# Add cron job to user crontab\n\
crontab - <<EOF\n\
${CRON_SCHEDULE} cd /app && /usr/local/bin/node /app/dist/index.js >> /var/log/subsyncarr/cron.log 2>&1\n\
EOF\n\
\n\
# Run the initial instance of the app\n\
node dist/index.js\n\
mkdir -p /app/logs/\n\
touch /app/logs/app.log\n\
tail -f /app/logs/app.log' > /app/startup.sh

# Make startup script executable
RUN chmod +x /app/startup.sh

# Use startup script as entrypoint
CMD ["/app/startup.sh"]
&& pipx install autosubsync \
&& python3 -m pip cache purge \
&& find /home/node/.local/share/pipx -type f -name "*.pyc" -delete 2>/dev/null || true \
&& find /home/node/.local/share/pipx -type d -name "__pycache__" -delete 2>/dev/null || true

# Expose web UI port
EXPOSE 3000

# Default memory limit for Node.js
ENV NODE_OPTIONS="--max-old-space-size=512"

# Use server as entrypoint (which includes cron scheduling)
# Memory optimization flags: uses NODE_OPTIONS to prevent OOM
CMD ["node", "--optimize-for-size", "dist/index-server.js"]
Loading