Kino Server
The signed macOS host application supervises its private database, API, scanner, updates, backups, and recovery tools.
Kinotron / Documentation
Kino Server handbook
Everything you need to understand, install, and care for Kino Server—from the first movie folder to storage-local indexing on a NAS.
Overview
Kino Server turns movies and TV shows you have legally acquired into a private streaming catalog. Your source files remain on storage you choose. The Server organizes them, stores catalog data and artwork, authenticates your household, and sends compatible media to Kinotron clients.
Adding a library does not upload your source media to Kinotron. Kino reads the folders you select and keeps its database, artwork, logs, and generated media on your Server or in destinations you configure.
The signed macOS host application supervises its private database, API, scanner, updates, backups, and recovery tools.
The web, Apple TV, iPhone, and iPad experiences browse your catalog and play from your own Server.
Media can live on directly attached disks or mounted network storage under one common media root.
An optional storage-local helper inventories large NAS libraries without repeatedly walking every folder over the network.
Architecture
Kinotron signs in, browses the catalog, and requests playback.
Owns accounts, catalog truth, playback decisions, and durable state.
Holds the original media and, when enabled, rebuildable derivatives.
Kino’s database is the catalog authority. A NAS index agent reports file inventory; it does not become a second media server and does not own accounts, watch state, or catalog metadata.
Before you begin
A network share must mount at the same macOS path after a restart. If the Server expects /Volumes/Media, a temporary path such as /Volumes/Media-1 is a different location.
Quick start
Download the signed installer, complete the macOS installation, and open Kino Server from Applications.
Choose Set Up Kino. The app walks you through media, access, and artwork information, then creates secure Server settings for you.
Choose Start Server. Wait until Database, API, and Scanner report ready, then choose Open Kino.
The first browser to open a fresh Server is offered the one-time local owner-account form.
In Admin → Libraries, add separate movie and TV-show folders beneath your configured media root.
Use the same Server address and account on your Kinotron clients.
Server setup
Download the latest Apple silicon installer, open it, and follow the macOS prompts. The installer places Kino Server.app in Applications. Server updates replace only the signed application; your configuration, database, media, generated data, and logs stay outside it.
Open Kino Server and choose Set Up Kino. The five-step guide prepares the supported configuration without asking you to edit files or generate secrets:
/Volumes/Media can contain separate Movies and TV Shows folders.http:// or https://.Kino records the address, but it does not create DNS or a TLS certificate. Configure those separately and make sure the address already reaches this Mac.
Kino creates private 256-bit sign-in keys, writes its protected settings, initializes its managed PostgreSQL database, validates the immutable payload, and starts the API and scanner. The status card should show Database, API, and Scanner as running. Open Kino opens the selected address.
Closing the window leaves the Server running. Quitting Kino Server stops its child processes cleanly. The application registers itself to start at login so it can resume after the Mac signs in.
Open Kino. When no users exist, the sign-in page becomes a one-time owner-account setup. Create a strong password. After the first account exists, this bootstrap route closes automatically.
Choose Review Setup… in the Server window or Settings. Kino preserves existing secrets while updating your media location, access address, or TMDB token. Its settings, managed database, generated media, backups, and logs live below ~/Library/Application Support/Kino and remain separate from application updates.
Your catalog
Open Admin → Libraries → Add library. Each library represents one content kind and one folder beneath MEDIA_ROOT.
If you rename or relocate a folder, edit the library path in Admin. Verify that the new location is readable before removing the old mount. Kino deliberately avoids guessing when a configured root disappears.
Keep movie folders separate from TV folders. Clear filenames, season folders, and episode numbers improve matching. Files excluded through a library’s inventory-exclusion settings remain outside the catalog.
Normal watchers and periodic reconciliation keep enabled libraries current. Use the Admin rescan control when you need to request a fresh walk. A large first scan may take time because Kino also probes media and retrieves metadata.
Daily operation
| Control | What it does |
|---|---|
| Start Server | Validates the payload and starts the database, API, then scanner in dependency order. |
| Stop | Stops the scanner, API, and managed database cleanly. |
| Restart | Performs an orderly stop and start after a configuration or service change. |
| Open Kino | Opens the PUBLIC_BASE_URL from your configuration. |
| Open Data Folder | Reveals Kino’s private settings, database, generated storage, backups, and logs in Finder. |
| Show Logs | Reveals API, scanner, and database output and error logs. |
Health proves the API process is alive. Readiness is stricter: it checks the database, media root, writable storage, required media tools, and scanner heartbeat. A healthy but not-ready Server should not be treated as available for normal use.
curl --fail --silent --show-error http://localhost:3001/api/health
curl --fail --silent --show-error http://localhost:3001/api/ready
Household access
The first local account is the Server owner and administrator. Add household users in Admin → Users, where you can control roles and restrict a user to selected libraries. Keep at least one enabled local administrator as recovery access.
Each client needs the exact Server address and a valid account. When pairing or signing in fails, first open the same address in a browser on that device. This separates a Server or TLS problem from a client-specific problem.
Never expose the raw local API port directly to the public internet. Put Kino behind an HTTPS reverse proxy that strips untrusted forwarding headers. Configure only the proxy’s exact address or narrow CIDR as trusted.
Maintenance
Choose Kino Server → Check for Updates… from the application menu or menu-bar item. Routine releases arrive through a signed HTTPS Sparkle feed. The update replaces the application, not the private data below ~/Library/Application Support/Kino.
Protection
In the Server window, choose Configure Backups…. Select a destination, retention policy, schedule, and recovery passphrase. Scheduled backups require the passphrase to be stored in this Mac’s Keychain.
A Kino backup is a verified, encrypted .kinobackup bundle containing the database archive, catalog, manifest, and configuration copy. It does not duplicate your source movie and TV files; protect those through your storage system’s own backup strategy.
If you lose administrator access but the Server configuration and database remain intact, use Recover Local Administrator… from the Server window.
Network and security
On a trusted local network, an explicit local address can be useful while setting up. For remote access, use a stable DNS name and TLS certificate through a reverse proxy. Set PUBLIC_BASE_URL to the address users actually enter.
Large network libraries
A NAS index agent is an optional, authenticated Docker service that runs beside the media. It inventories files locally, persists a small SQLite index, and sends compact snapshots and ordered changes to Kino Server. This avoids repeated recursive directory walks over SMB or AFP.
The Server still streams media from its mounted library path. The agent accelerates inventory and can prepare supported local artifacts; it does not replace the mount or become the catalog authority.
/v1 request with a long bearer token.NAS deployment
Do not assemble the production Compose by hand. Kino Admin generates the immutable agent identity, one-time 256-bit token, exact library UUIDs, current image, path mappings, resource limits, health check, and security settings.
Make every library available at a stable path such as /Volumes/MediaNAS. Add those libraries to Kino before generating agent setup.
Open Admin → Libraries. Under Storage index agents, choose Add agent.
Enter a name, the agent URL such as http://nas-address:8099, the Kino mount prefix such as /Volumes/MediaNAS, the matching NAS prefix such as /volume1/Media, and a persistent state directory such as /volume1/docker/kino-index-agent.
Choose Generate setup. Copy the complete Compose immediately; the bearer token is displayed once.
Ensure the state directory exists. Open Container Manager → Project → Create, name the project, paste the generated Compose, and build it.
Wait for the container health state to become healthy. Return to the agent in Kino Admin and choose Verify. Verification checks both the token and every expected root.
The generated deployment publishes port 8099, stores its SQLite database in the state directory, uses a read-only container filesystem, drops Linux capabilities, enables no-new-privileges, rotates logs, and applies a 1 GiB hard memory limit with a 256 MiB reservation.
/Volumes/MediaNAS and /volumes/MediaNAS are not interchangeable. The Kino prefix and NAS prefix must describe the same folder tree from each machine’s point of view.
Indexer lifecycle
The first local audit walks each configured root and builds a compact snapshot. Kino preserves its existing catalog while a root initializes. Large libraries can take time; Admin shows the active audit’s item and folder counts.
After initialization, filesystem events become ordered deltas. Kino consumes those changes using a cursor. If a consumer falls too far behind the retained change history, it requests a fresh snapshot rather than guessing.
By default, the agent runs an audit every six hours. The audit reconciles the SQLite inventory with disk state and repairs anything missed while the container or NAS was unavailable.
If the helper is unreachable or degraded, Kino reports that provider state and preserves the catalog. It does not silently fall back to a recursive network scan, because that could overload the network or mistake a mount outage for mass deletion.
Indexer maintenance
Token rotation intentionally disconnects the old container. Apply the replacement Compose promptly. When you add a library below an existing agent prefix, regenerate and redeploy so its exact root and UUID are included. Editing a library path removes the stale mapping immediately.
Removing an agent returns its mapped libraries to normal filesystem inventory. Kino does not delete the NAS container or its SQLite state directory; remove those manually only when you are certain they are no longer needed.
Troubleshooting
| Symptom | Check | Action |
|---|---|---|
| Server is not set up | The main action says Set Up Kino. | Complete the guided setup. If it was interrupted, reopen it and review each choice. |
| Healthy but not ready | /api/ready and the first API or scanner error log. | Restore database, media-root, storage, tool, or scanner readiness instead of repeatedly restarting. |
| Library appears empty | Mac mount path, library path, permissions, and scanner state. | Restore the exact mount, confirm the selected folder is beneath MEDIA_ROOT, then request a rescan. |
| Metadata is missing | TMDB token validity, scanner log, filename quality, and network access. | Correct the credential or match, then rescan the affected library. |
| Client cannot connect | Open the same Server URL in that device’s browser. | Fix DNS, TLS, proxy, or reachability before changing the client. |
| Agent verify fails | URL, port 8099, bearer token, and advertised roots. | Apply the newest generated Compose to the matching NAS and verify again. |
| Agent stays initializing | Container logs, audit counts, disk activity, and root permissions. | Allow the first audit to progress; fix the first stable error if counts stop changing. |
ENOSPC with watch | Host inotify watch limit. | Raise fs.inotify.max_user_watches and restart the agent. |
| Volume truly full | df -h and the agent state/library volumes. | Free space or expand storage before restarting work. |
| Filesystem has no inodes | df -i. | Remove unnecessary small files or repair/expand the filesystem. Raising inotify does not add inodes. |
Choose Show Logs in Kino Server. Check the error logs in startup order: database, API, then scanner. Resolve the first stable error rather than later failures caused by it. Use Review Setup… when the media location, access address, or metadata token needs correction.
In Synology Container Manager, confirm the project is running and the container is healthy. Its logs should identify invalid configuration, unreadable roots, watch exhaustion, or a failed audit without returning private paths through the public health endpoint.
Linux watch capacity
The agent uses one Linux inotify watch for every directory below its roots. Synology’s default can be too low for a large media tree. Linux may report ENOSPC when the watch allowance is exhausted even though the disk has plenty of free bytes and inodes.
cat /proc/sys/fs/inotify/max_user_watches
The validated setting used during Synology testing is 524288. Apply it on the NAS host, then restart the index-agent container:
/sbin/sysctl -w fs.inotify.max_user_watches=524288
/sbin/sysctl -w fs.inotify.max_user_watches=524288
df -h
df -i
ENOSPC together with watch points to inotify capacity. A volume at 100% in df -h is byte exhaustion. A filesystem at 100% in df -i is inode exhaustion. These are three different conditions with different remedies.
Compatibility and help
Kinotron’s NAS index agents have been tested on Synology NAS with Container Manager on compatible x86-64 hardware. The documented deployment, resource limits, persistent storage, health checks, and inotify remediation reflect that tested environment.
Other Docker-capable NAS platforms may work, but we cannot guarantee compatibility today. Container engines, CPU architecture, filesystem event behavior, volume permissions, networking, and management interfaces vary between vendors.
If you try another NAS, we will help troubleshoot it. Share the NAS model, CPU architecture, OS and container-engine versions, redacted Compose, container health, relevant log excerpt, root-mapping shape, and the output of the capacity checks above. Never include the bearer token or private credentials.