Autopulse + Jellyfin: Instant Library Updates Without Scheduled Scans (2026)

Autopulse + Jellyfin: Instant Library Updates Without Scheduled Scans (2026)

Autopulse + Jellyfin: Instant Library Updates Without Scheduled Scans (2026)

The default Jellyfin workflow for detecting new content is either:

  1. Scheduled library scans (every 12 hours by default) - slow, CPU-intensive, and your content sits invisible for hours
  2. Radarr/Sonarr Connect notifications - works but requires configuration in each arr app

What if new content appeared in Jellyfin the instant it landed on disk? No scheduled scans. No arr app configuration. Just: file appears > Jellyfin knows about it within 5 seconds.

Autopulse does exactly this.


What Autopulse Does

Autopulse is a lightweight service that:

  1. Watches your media folders for new files using inotify (Linux filesystem events)
  2. Detects when a file is fully written (waits for write completion, not just creation)
  3. Triggers a targeted Jellyfin scan of only the specific folder that changed
  4. Debounces rapid changes (multiple files arriving at once trigger one scan, not dozens)

The result: content appears in Jellyfin within 5-15 seconds of the file being fully written to disk.


Why Not Just Use Scheduled Scans?

ApproachDelayCPU impactReliability
Scheduled scan (12h)Up to 12 hoursHigh (full library scan)Reliable but slow
Scheduled scan (1h)Up to 1 hourMedium (frequent full scans)Reliable but wasteful
Radarr/Sonarr Connect1-5 secondsLow (targeted scan)Requires arr app config
Autopulse5-15 secondsVery low (targeted scan)Works for ANY file source

Autopulse advantages over Radarr/Sonarr Connect:

  • Works for any file source (manual copies, Syncthing, Rclone, FTP uploads)
  • No configuration needed in each arr app
  • Catches files that arr apps miss (manual additions, scripts)
  • Single point of configuration

Docker Setup

services:
  autopulse:
    image: ghcr.io/autopulse/autopulse:latest
    container_name: autopulse
    environment:
      - JELLYFIN_URL=http://jellyfin:8096
      - JELLYFIN_API_KEY=your_jellyfin_api_key
      - WATCH_PATHS=/media/movies,/media/tv,/media/music
      - DEBOUNCE_SECONDS=10
      - TZ=Europe/Paris
    volumes:
      - /mnt/media/movies:/media/movies:ro
      - /mnt/media/tv:/media/tv:ro
      - /mnt/media/music:/media/music:ro
    restart: unless-stopped
docker compose up -d

That is it. Autopulse watches the specified paths and triggers Jellyfin scans automatically.


How It Works Internally

1. Filesystem Monitoring (inotify)

Autopulse uses Linux inotify to receive kernel-level notifications when files are created, modified, or moved in the watched directories. This is zero-polling: the kernel tells Autopulse when something changes.

2. Write Completion Detection

When a file is being downloaded (by qBittorrent, Radarr import, or any other process), it is written incrementally. Autopulse waits until the file has not been modified for a configurable period (default: 5 seconds) before considering it "complete."

This prevents triggering a scan on a half-written file.

3. Debouncing

When Radarr imports a movie, it may create the folder, move the file, and write metadata in rapid succession. Without debouncing, this would trigger 3 separate scans.

Autopulse groups changes within a configurable window (default: 10 seconds) and triggers a single scan for the affected path.

4. Targeted Jellyfin Scan

Instead of scanning the entire library, Autopulse calls the Jellyfin API to scan only the specific folder that changed:

POST /Library/Media/Updated
{"Updates": [{"Path": "/media/movies/Dune Part Two (2024)", "UpdateType": "Created"}]}

This is dramatically faster and lighter than a full library scan.


Configuration Options

JellyWatchTry JellyWatch — Your Jellyfin companion, everywhere.
VariableDefaultDescription
JELLYFIN_URLRequiredYour Jellyfin server URL
JELLYFIN_API_KEYRequiredAPI key from Jellyfin Dashboard
WATCH_PATHSRequiredComma-separated paths to monitor
DEBOUNCE_SECONDS10Wait this long after last change before scanning
SETTLE_SECONDS5Wait for file writes to complete
RECURSIVEtrueWatch subdirectories
IGNORE_PATTERNS.partial,.!qBIgnore files matching these patterns
LOG_LEVELinfoLogging verbosity

Ignore patterns

Configure Autopulse to ignore temporary files:

IGNORE_PATTERNS=.partial,.!qB,.tmp,.nfo,Thumbs.db,.DS_Store

This prevents scans triggered by qBittorrent partial files, temporary files, or metadata writes.


Autopulse vs Alternatives

ToolMethodJellyfin supportEmby supportComplexity
Autopulseinotify + API callYesYesVery low
Radarr/Sonarr ConnectWebhook on importYesYesPer-app config
Jellyfin scheduled scanPeriodic full scanBuilt-inBuilt-inZero (but slow)
Custom inotifywait scriptDIY bash scriptManualManualMedium
Autoscan (legacy)File watchingPlex/EmbyYesMedium

Autopulse is the simplest dedicated solution. If you already have Radarr/Sonarr Connect configured and it works, you may not need Autopulse. But if you add content from multiple sources (manual, scripts, Syncthing), Autopulse catches everything.


Combining with Radarr/Sonarr

You can use both Autopulse AND Radarr/Sonarr Connect notifications:

  • Radarr/Sonarr Connect triggers immediately on import (fastest for arr-managed content)
  • Autopulse catches everything else (manual additions, other tools)
  • Disable scheduled scans entirely (Dashboard > Scheduled Tasks > Scan Media Library > remove triggers)

With both active, you never need scheduled scans again. Every file is detected within seconds regardless of source.


Disabling Scheduled Scans

Once Autopulse is running reliably:

  1. Dashboard > Scheduled Tasks
  2. Find "Scan Media Library"
  3. Remove all triggers (or set to weekly as a safety net)
  4. This eliminates the periodic CPU spikes from full library scans

Troubleshooting

ProblemCauseFix
Files not detectedPath mismatch between container and hostVerify volume mounts match WATCH_PATHS
Scan triggered but content not appearingJellyfin path different from Autopulse pathEnsure Jellyfin sees the same path
Too many scansDebounce too shortIncrease DEBOUNCE_SECONDS to 15-30
Partial files triggering scansMissing ignore patternAdd .!qB and .partial to IGNORE_PATTERNS
inotify limit reachedToo many watched filesIncrease fs.inotify.max_user_watches

Increasing inotify limits

For large libraries with many subdirectories:

echo "fs.inotify.max_user_watches=524288" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

FAQ

Does Autopulse work with NFS/CIFS mounts? inotify does not work across network filesystems. For NFS/CIFS, Autopulse falls back to periodic polling (configurable interval). Local filesystems get instant inotify events.

Does it work with Emby? Yes. Configure EMBY_URL and EMBY_API_KEY instead of Jellyfin variables. The API call is similar.

How much RAM does Autopulse use? ~20-50 MB. It is extremely lightweight.

Can it trigger other actions besides Jellyfin scans? Some implementations support webhooks, allowing you to trigger any HTTP endpoint when files change.

Should I still keep a weekly scheduled scan as backup? Recommended. Set a weekly scan at 4 AM as a safety net to catch anything Autopulse might miss (edge cases, container restarts).


Content appears instantly. Monitor who watches it from your phone. Download JellyWatch on Google Play - real-time session monitoring for Jellyfin.

On Emby? Download EmbyWatch on Google Play

Comments

No comments yet. Be the first to share your thoughts.

Leave a comment

Never displayed publicly.
0 / 2000 · Supports limited Markdown: **bold**, *italic*, `code`, [link](url), lists, > quote.