User guide Start · use · recover

Know the next step.
Every time.

This guide takes a new administrator from an empty host to a verified first request, then gives every user a clear map for discovery, seasons, Activity, Library, and common recovery. Detailed runbooks remain one click away in the Wiki.

Administrator path

The shortest safe path to a first request.

Configure one complete movie or TV path first. Recommendations, watch history, notifications, and the other media type can wait. YouTube is an optional, independent library path.

  1. 01
    Install

    Use the Docker setup builder to map media and staging drives, then start Compose.

  2. 02
    Create the administrator

    Use the printed one-time bootstrap token to create the first administrator. Nooklet automatically closes /bootstrap as soon as an administrator exists and refuses later bootstrap attempts; continue in Setup Center.

  3. 03
    Verify metadata + acquisition

    For Movie/TV requests, test TMDB, one Newznab indexer, and the built-in downloader's Usenet connection. YouTube does not require those services.

  4. 04
    Attach storage

    Use container-visible paths for final destinations; completed download staging is separate Usenet output.

  5. 05
    Confirm readiness

    Setup Center must show the intended media path and background worker as ready.

  6. 06
    Request something small

    Follow it through Activity until the final file is visible in Library.

Ready means verified, not merely saved

One complete movie or TV request path needs all six checks.

  • TMDB is verified.
  • The built-in downloader's Usenet connection is verified.
  • An enabled, verified Newznab indexer covers the media type.
  • The final destination is reachable and writable.
  • Native staging is writable with positive capacity when used.
  • The background worker is responsive and not degraded.

Step 1

Prepare Docker and choose one setup route.

Docker is the recommended route. For a new installation, use the setup builder below. It verifies the prerequisites, folders, generated configuration, startup, and health instead of asking you to assemble those steps by hand.

Have these ready before you start

Start Docker's Linux engine and have Git, at least one existing media folder, a separate existing completed-download staging folder, and enough free space in Docker's data storage. TMDB, Newznab, and Usenet credentials are needed later in Setup Center for Movie/TV requests, not to start the container. YouTube is optional and does not require those credentials.

Recommended

Let the setup builder verify the installation.

Choose your operating system and existing folders below. The generated private command creates the configuration, checks every mount, builds the images, and waits for Nooklet to become healthy.

Open the setup builder

Manual alternative

Enter and inspect every value yourself.

The complete runbook separates Windows, Linux, and macOS; shows the full environment and mount files; and defines the exact healthy response before first login.

Open the manual guide

The path rule that prevents most confusion

Configure the path on the right side of each mount.

Nooklet runs inside the container. It cannot use F:\… directly. If the host staging folder is mounted at /downloads, set DOWNLOAD_ENGINE_DIR beneath /downloads.

Example Docker storage override
services:
  app:
    volumes:
      - "D:/Media/Movies:/media/movies"
      - "D:/Media/TV:/media/tv"
      - "F:/Nooklet/Downloads:/downloads"

Then use these container-side environment values:

APPROVED_MEDIA_ROOTS=/media
DOWNLOAD_ENGINE_WORK_DIR=/app/data/engine-work
DOWNLOAD_ENGINE_DIR=/downloads/nooklet-engine

One-paste Docker setup

Choose your folders. Paste one command.

Pick the operating system that runs Docker, add at least one existing final library folder for Movies, TV, or YouTube, and choose a separate existing folder for completed Usenet downloads awaiting import. A YouTube row maps to the final library target /media/youtube; its /app/data/youtube path is temporary work storage. Nooklet generates everything needed for a new install: the repository, private environment, drive mounts, container build, writable-mount check, startup, and health check. In-flight download, repair, and extraction work uses Docker's data volume, which must also have enough free space.

Start Docker first

On Windows or macOS, open Docker Desktop and wait for its Linux engine; on Linux, start the Docker daemon. The generated command checks Docker and your host folders before cloning or creating files.

Docker host

Media folders

Add every existing final library folder Nooklet should be able to use. YouTube is optional and maps to /media/youtube; it is independent of the Movie/TV Usenet setup.

Runs locally in your browser. Your paths and generated secrets are never sent anywhere.

Step 2

Let Setup Center prove the complete path.

Saving a credential or folder is not the same as being ready. Return to Setup Center after each configuration step and look for a verified, writable, capacity-aware path.

01

Create the first administrator

Enter the printed one-time bootstrap token, a valid email, display name, and strong password. Nooklet automatically closes /bootstrap as soon as an administrator exists and refuses later bootstrap attempts.

02

Verify TMDB

Open Settings → Connections, test the credential, and confirm Verified.

03

Verify downloading

Configure and verify a TLS Usenet server for the built-in downloader.

04

Add Newznab

Enable the provider, select Movies and/or TV categories, then use Test & add.

05

Attach a destination

In Settings → Storage, choose a container path inside an approved root and verify write access.

06

Check the worker

Open Health & readiness. The background worker must be responsive and non-degraded.

Newznab only

Automatic acquisition does not support Torznab or torrent transport. If no compatible Newznab source is enabled, Nooklet stops with a setup action instead of choosing an unusable release.

Daily use

Find a title, choose the scope, follow the outcome.

Search and Discover enter the same request workflow. Recommendations are another doorway—not a different acquisition system.

Movie

Request one title.

  1. Open Search or Discover.
  2. Open the movie and confirm the identity.
  3. Choose the final movie destination.
  4. Review the matching release and submit.
  5. Open Activity and wait for import.

TV

Choose season or episodes.

  1. Open the series and select the intended season.
  2. Keep the full season or narrow to episodes.
  3. Confirm the TV destination and request.
  4. Follow the grouped season plan in Activity.
  5. Confirm imported episodes in Library.
Availability means imported

An NZB in a queue is active work, not an available title. Nooklet confirms availability after processing, safe import, and library observation of the final media file.

Using personal recommendations

After an administrator verifies an OpenAI-compatible provider, open Movie ideas or TV ideas. Add a prompt or genres, optionally use watch-history context, and like, dislike, or open a suggestion. Past picks keeps generated batches; Your taste shows the signals shaping later ideas.

AI is optional. You can always search and request a known title without it.

TV request resilience

A failed pack does not mean a failed season.

The season plan is the durable outcome. Pack and episode downloads are inspectable attempts inside it.

Recovering

Automatic work remains.

Nooklet may be trying another compatible pack, waiting for active capacity, switching to missing aired episodes, or rechecking an unavailable episode. Automatic recovery continues, and Library Search can retry one eligible episode immediately.

Blocked

A shared boundary needs repair.

Follow the displayed storage, destination, downloader, credential, or indexer action. Fix that condition, then choose Resume season recovery.

Completed

Required coverage is present.

Eligible monitored episodes are now represented in the library. Future or unmonitored episodes can remain outside this plan.

  1. 1
    Complete-season pack first

    Search and try a matching release.

  2. 2
    Alternate compatible packs

    A pass may probe eight candidates, while only three releases submitted to the downloader consume the pack budget.

  3. 3
    Individual-episode fallback

    No usable pack, exhausted packs, or incomplete imported coverage moves to missing aired episodes automatically.

  4. 4
    Preserve progress

    Owned files and compatible active work are reused; unavailable episodes keep their own retry schedule.

Restart behavior

The season plan, queue intent, attempts, and retry timing survive a process restart. An interrupted native transfer currently restarts from the stored NZB; byte-level transfer resume is not implemented. Import publishing separately retains the engine-owned source and safely recovers an exactly claimed partial cross-filesystem copy.

Follow the work

Use Activity as the source of truth.

Start with the group status and message before acting on a child attempt. A red child release inside a Recovering season can simply be evidence that the coordinator already moved on.

Active

Work is moving or waiting normally.

Search, queue, transfer, processing, import, or automatic recovery is still eligible.

Needs attention

The next action belongs to you.

Read the bounded failure message, repair the named boundary, and use the offered retry or resume action.

Completed

The request reached a terminal outcome.

Search history to confirm success, cancellation, or a final failure and its recorded reason.

  • Refresh Activity before retrying a queue-control conflict; the item may have entered repair or extraction.
  • Pause is observed between segment operations, not midway through a filesystem write.
  • Repair and extraction cannot be safely cancelled after they begin.
  • One native release runs globally at a time; segments inside that release can transfer concurrently.

Organize and reconcile

Keep Library grounded in real files.

Library folders, title records, requests, and media files are separate on purpose. Scans reconcile the configured filesystem with Nooklet’s understanding of what is actually available.

Nooklet Library overview showing library, title, media file, and monitoring statistics
Browse Movies or TV, search titles, filter monitoring and availability, and open a title to request more or adjust its monitoring behavior.
After an external move

Run a library scan after another tool moves files. Confirm that the destination still resolves inside Nooklet and remains readable; imports additionally require write access.

Shared instance map

Personal choices stay personal. Infrastructure stays administered.

Every user

Personal experience

Account, preferences, request history, recommendation feedback, personal history sources, and personal notification preferences where shown.

Administrator

Instance infrastructure

Connections, indexers, storage, downloader, automation, Health & readiness, and managed user access. Every administrator views and updates the same canonical instance records.

The most common storage surprise

“My media drive has room. Why does Nooklet say it doesn’t?”

The built-in engine checks both DOWNLOAD_ENGINE_WORK_DIR and DOWNLOAD_ENGINE_DIR. The first holds in-flight, repair, and extraction work; the second holds completed output awaiting import. The more constrained filesystem limits admission.

Check this first Settings → Storage → Download workspace

Read both configured and effective paths, their underlying filesystems, active reservation, and estimated capacity for new work.

  1. Identify whether the work or completed-output filesystem is the limiting location.
  2. Confirm completed staging is beneath the intended container mount, such as /downloads/nooklet-engine.
  3. Confirm the spacious host folder is actually bound to /downloads.
  4. Review active downloads, because they reserve transfer and post-processing capacity.
  5. Confirm the container user can write to staging.
  6. If an environment or mount value changed, recreate the container and recheck Storage.

Apply mount or environment changes

docker compose up -d --build --force-recreate
docker compose ps

A plain restart reuses the previous environment and mount specification.

Do not move or delete data blindly

Never use docker compose down -v as a troubleshooting step. It deletes the persistent database volume. Do not delete SQLite, WAL, or SHM files while the app is running.

Symptom-first troubleshooting

Start at the boundary that actually failed.

Try a failed page once more, then use Health, Activity, Storage, and bounded logs to identify the failing layer. Keep any displayed reference number with your reproduction notes.

PageNooklet could not load this page

Try again once. If it repeats, open Health & readiness, keep the displayed reference, and inspect a bounded app-log window.

Health and diagnostics →
DiscoverSearch or discovery is empty

Confirm TMDB is Verified and reachable from the Nooklet runtime. AI is unrelated to known-title search.

Discovery guide →
ReadinessA title is visible but cannot be requested

Open Setup Center and inspect readiness for that media type: indexer category, downloader, destination, native staging, and worker.

Readiness rules →
IndexerNo releases are found

Confirm an enabled, Verified Newznab source includes Movies or TV categories. Torznab results cannot be acquired.

Indexer guide →
ImportA download completed but did not reach Library

Inspect Activity, authenticated worker health, both built-in engine paths, the writable approved destination, and archive tooling.

Downloads and import →
SeasonA season child attempt failed

If the group says Recovering, Nooklet is continuing automatically; expand its episode details or use Library Search to retry one eligible episode. If it says Blocked, repair the named boundary and choose Resume season recovery.

Season behavior →
ConnectionPlex, Tautulli, or local AI cannot connect

Address the service from inside Docker—container localhost is not the host. Allowlist the exact private hostname or IP, then recreate when environment values changed.

Service networking →
HealthThe health probe says degraded or returns 503

The public probe returns component status only: HTTP 200 with degraded means the worker is responsive but work needs attention; HTTP 503 means the database is unavailable or the worker is stale. Sign in to Health for timestamps, stages, and private error detail.

Interpret health →
Sign inAn account cannot sign in

Stop burst retries during the five-minute window. A disabled user needs another administrator; a temporary password must be replaced from Account.

Account recovery →
ContainerThe app will not start

Run quiet Compose validation, inspect the earliest bounded log error, and check port or container-name collisions before rebuilding repeatedly.

Container troubleshooting →

Routine operations

Protect state before changing the runtime.

Nooklet’s SQLite database contains users, settings, requests, history, jobs, and audit events. Application updates and database state must be treated as one recovery pair.

Before an update

Verify health and create an off-host backup.

Record the current Git revision, create a verified database copy, and move it off the Docker volume.

Apply the update

Pull forward and rebuild deliberately.

Use a fast-forward-only pull, rebuild Compose, then read startup and migration logs.

After an update

Verify more than process startup.

Check /api/health, sign in, inspect representative state, and exercise one workflow.

Need the deeper runbook?

The guide gets you oriented. The Wiki carries the operational detail.

Use the full Wiki for platform-specific installation, every configuration field, restore rehearsal, account recovery, advanced networking, API contracts, and contributor documentation.