Skip to content

These docs are for MetaTana 2.0, coming soon

On this page

CLI

MetaTana has a Pro command-line tool for scans, folders, scraping, renaming, exports, Trakt, backups, and running MetaTana without a window. This page lists every command and what each one does.

CLI access is Pro Every command checks for a signed-in MetaTana Pro account before it runs. On the Free plan, or when the account can't be verified, the command stops with an error. The exceptions are metatana owner and metatana backup, which work without an account so you can recover an install that can't sign in or start.

How the CLI runs

The CLI works directly on your local MetaTana database. It does not go through the web app or the local API, so it does not need an API key. It is a separate process with its own database connection, so it is safe to run while the app is open.

The metatana command ships inside the desktop app and the Docker image. metatana --version prints the app version.

Install the command

InstallHow to get metatanaLibrary it uses
macOS appSettings › Maintenance › Advanced. Command-line tool for you › Install links ~/.local/bin/metatana. Command-line tool for all users › Install links /usr/local/bin/metatana after an administrator password prompt. Remove undoes either. The link points at MetaTana.app/Contents/Resources/bin/metatana.The app's own library
Windows appThe installer ships <install folder>\bin\metatana.cmd and offers Add metatana command to PATH (your user's PATH). Open a new Command Prompt or PowerShell window afterwards. Uninstalling removes the PATH entry.The app's own library
Linux .deb or .rpmInstalled for you: /usr/bin/metatana links to /opt/MetaTana/resources/bin/metatana, and /usr/bin/MetaTana opens the app.The app's own library
Linux AppImageSettings › Maintenance › Advanced › Command-line tool for you › Install writes ~/.local/bin/metatana, a small script that runs the command inside the AppImage file.The app's own library
DockerAlready in the image at /usr/local/bin/metatana. Run docker exec <container> metatana …. As root it switches to the container's PUID:PGID, so files it writes stay usable by the server.The server's library in /app/data (METATANA_DATA_DIR, METATANA_DB_PATH)

If your terminal can't find metatana after installing it for your user, add ~/.local/bin to your PATH. Settings never replaces a metatana file it did not create; it reports Another file named metatana is already there instead. On an AppImage install made with the Linux install script, ~/.local/bin/metatana is the script's app launcher, so remove it first, install the command from Settings, then run the install script again. The script keeps the command-line tool and makes MetaTana and the app menu entry open the app.

On macOS and on Linux .deb, .rpm, and .tar.gz installs, metatana with no arguments opens the app. MetaTana always opens the app.

On Windows, metatana prints its output in Command Prompt and PowerShell like any other command. The output may start with one blank line; scripts that read it should skip leading blank lines.

On Linux, metatana also runs as root and with no display, for example over SSH. The AppImage command that Settings writes does the same. If Settings shows Repair next to the command-line tool, click it to write the command again.

Pro sign-in

For the Pro check, the CLI uses the hosted session from METATANA_HOSTED_SESSION_TOKEN when it is set. Otherwise the desktop command reuses the session of the signed-in desktop app. In Docker, and on Linux over SSH without a display, the desktop session can't be read, so set METATANA_HOSTED_SESSION_TOKEN for the Pro check. On Linux without a display the command uses the default desktop data folder (~/.config/metatana/data, or under $XDG_CONFIG_HOME when it is set).

The command uses the same library as the app it came with (see the table above). Set METATANA_DB_PATH or METATANA_DATA_DIR to point it at another one (see Reference: environment variables).

Run metatana --help for the command list, or metatana --help for one command's flags.

Scan and undo

CLI metatana scan <path> Scan a folder and identify media files
metatana scan /media/incoming                         # identify and record matches only
metatana scan /media/incoming --ai                    # allow AI Vision for hard files
metatana scan /media/incoming --move --output /media/library   # also move identified files

scan walks the folder, identifies each media file, and records the matches as a scan job. It prints each file with its match, confidence, and whether it needs review.

Without --move, no files are moved. --move requires --output; only files that don't need review are moved, into an organized folder layout under that folder. AI Vision is off unless you pass --ai. --dry-run is deprecated: scans don't move files unless you ask, and --dry-run with --move moves nothing.

scan also saves each file's media info, such as resolution, and picks up a poster.jpg or fanart.jpg beside each file it doesn't move, so Library shows them right away. It doesn't fetch extra metadata or artwork.

A --move run ends with the exact command that moves its files back, for example To move the files back, run: metatana undo 42.

CLI metatana undo <job-id> Move a scan job's files back
metatana undo 42

Moves files that scan --move relocated back to their original paths. It checks that each file and its original folder are still reachable before moving it.

Folders

CLI metatana sources Add, list, or remove watched folders
metatana sources add /media/movies --type movie       # movie, tv, or anime
metatana sources list
metatana sources remove 3

These are the folders on the Folders page. add checks that the folder is readable before saving it. list prints each folder's ID, which the --source option of other commands takes.

Library tools

CLI metatana health Print a library health report
metatana health

Prints a score out of 1000, item counts for movies, TV, and anime, and a count of files per issue type.

CLI metatana mediainfo Print stream details for library files
metatana mediainfo          # files with no resolution recorded yet
metatana mediainfo --all    # every library file
metatana mediainfo --save   # also store the results

Reads each file and prints its resolution, video codec, and audio and subtitle track counts. Without --save, nothing is stored. --save stores the results in the library the same way Reload media info does on a title's page. Items that need review in MetaTana are printed but not saved.

CLI metatana scrape Scrape metadata into the library
metatana scrape             # every library item
metatana scrape --new       # unscraped items only
metatana scrape --source 3  # one folder (IDs from: metatana sources list)

scrape saves metadata to your library. Each item goes through the same identify and apply steps as bulk Scrape in Library. Confident matches are applied. Uncertain ones wait in the Inbox for you to review. Locked fields are kept.

It changes library metadata only. It does not download artwork, write NFO files, fetch subtitles or trailers, or rename files. --all is the default. At the end it prints how many items were updated, need review, or failed.

CLI metatana rename Rename library files with your saved patterns
metatana rename --dry-run   # print the plan, change nothing
metatana rename             # rename files
metatana rename --source 3  # one folder

rename uses the patterns and options saved in Settings › Files › Naming for movies, TV, and anime. With --dry-run it prints each old and new path and changes nothing. Without --dry-run it renames the files, moving NFO, artwork, and subtitle files with them. Files that already have the right name are skipped, and files it can't rename safely are listed and left alone.

Each run is one batch in Activity (Show › Renames), and you can undo the batch from there. Run --dry-run first.

CLI metatana nfo-rewrite Rewrite NFO files from library metadata
metatana nfo-rewrite --dry-run       # print which NFO files would change
metatana nfo-rewrite                 # rewrite NFO files
metatana nfo-rewrite --source 3      # one folder
metatana nfo-rewrite --format plex   # kodi, emby, jellyfin, plex, or mediaportal2

nfo-rewrite works like Write NFO in the app. It uses the format in Settings › Files › NFO files unless you pass --format, keeps existing NFO content, and includes your metadata edits. --dry-run lists each NFO file as write, unchanged, or unavailable and changes nothing. If any selected item needs review in MetaTana, the run stops and lists those items; review them in the app, or use --source to leave them out. Each run is one entry in Activity in the app, where you can undo it.

CLI metatana subtitles Fetch subtitles for library items
metatana subtitles                       # English subtitles for every item
metatana subtitles --lang en,fr          # several languages
metatana subtitles --missing-only        # only items with no subtitles yet
metatana subtitles --source 3 --overwrite

subtitles uses the same download queue as Fetch subtitles in the app. Like every CLI command it needs Pro, and it also needs an OpenSubtitles or SubDL API key in Settings › Providers › Subtitles (or the matching environment variable); without a key it stops and says so. --lang defaults to en. --overwrite replaces subtitle files that already exist. Items that need review in MetaTana stop the run, as with nfo-rewrite. A download that fails for a temporary reason stays queued, and the MetaTana app tries it again later. At the end it prints how many were downloaded, queued for retry, or failed.

Trailers

CLI metatana trailers Fetch trailers for library items
metatana trailers
metatana trailers --missing-only

For items with a TMDb ID, finds a trailer through TMDb and saves it beside the file as -trailer</code>. Requires <code>yt-dlp</code> on your <code>PATH</code>. Items without a TMDb ID are skipped.</p> </div> </details><h2 id="export" class="scroll-mt-20 group">Export<a href="#export" class="ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal" tabindex="-1" aria-hidden="true">#</a></h2> <details class="docs-endpoint" data-method="GET"> <summary> <span class="docs-endpoint-method">CLI</span> <code class="docs-endpoint-path">metatana export</code> <span class="docs-endpoint-summary">Export the library with a built-in format or a saved template</span> </summary> <div class="docs-endpoint-body"><pre><code class="language-bash">metatana export --format csv # CSV to stdout metatana export --format json --output library.json # also: xml, html, excel metatana export --format html --output library.html # default file: metatana-library.html metatana export --template "Markdown list" --output library.md # a saved export template metatana export --template ./my-layout.txt # or a template file metatana export --format csv --type movie --search "alien" metatana export --format csv --filters "genre:contains:Horror|genre:contains:Family,year:gte:2000" metatana export --format csv --fields title,year,genres,releaseDate,tmdbRating </code></pre> <p>Pass exactly one of <code>--format</code> (<code>csv</code>, <code>json</code>, <code>xml</code>, <code>html</code>, or <code>excel</code>) or <code>--template</code>. <code>--template</code> takes the name of a template saved in <strong>Export templates…</strong> (the <strong>⋯</strong> menu on the <strong>Export</strong> row in <strong>Settings › Maintenance › Backups</strong>), or a path to a template file; the file's extension decides how values are escaped. <code>--type</code> limits the export to <code>movie</code>, <code>tv</code>, or <code>anime</code>, <code>--search</code> to items matching the search text, and <code>--filters</code> to a filter expression where <code>,</code> means all must match and <code>|</code> means any one may match. <code>--fields</code> picks columns for built-in formats. The older snake_case names such as <code>content_rating</code> and <code>file_path</code> still work. Unknown names are skipped with a warning. CSV column headers are the field names (<code>title</code>, <code>releaseDate</code>), not display labels.</p> <p><code>export</code> writes an inventory file. It does not write NFO files. See <a href="/docs/recipes/back-up-your-library">Back up your library</a> for backups.</p> </div> </details><h2 id="trakt" class="scroll-mt-20 group">Trakt<a href="#trakt" class="ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal" tabindex="-1" aria-hidden="true">#</a></h2> <details class="docs-endpoint" data-method="POST"> <summary> <span class="docs-endpoint-method">CLI</span> <code class="docs-endpoint-path">metatana trakt</code> <span class="docs-endpoint-summary">Sign in to Trakt and sync watched state</span> </summary> <div class="docs-endpoint-body"><pre><code class="language-bash">metatana trakt auth # device-code sign-in metatana trakt status # sign-in and credential status metatana trakt sync # push and pull watched state </code></pre> <p>These use the same Trakt sign-in as the <strong>Sync</strong> page in the app. <code>sync</code> prints how many items matched, were pushed, and were pulled. See <a href="/docs/recipes/add-trakt">Add Trakt</a>.</p> </div> </details><h2 id="install-owner" class="scroll-mt-20 group">Install owner<a href="#install-owner" class="ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal" tabindex="-1" aria-hidden="true">#</a></h2> <details class="docs-endpoint" data-method="POST"> <summary> <span class="docs-endpoint-method">CLI</span> <code class="docs-endpoint-path">metatana owner</code> <span class="docs-endpoint-summary">Show or reset which account this install is linked to</span> </summary> <div class="docs-endpoint-body"><pre><code class="language-bash">metatana owner status # is an account linked? metatana owner claim-code # show the claim code metatana owner reset # unlink it docker exec <container> metatana owner reset # Docker </code></pre> <p>The first MetaTana account that signs in to an install becomes its owner, and other accounts see <strong>This MetaTana is linked to a different account.</strong> <code>reset</code> unlinks the owner so the next account to sign in is linked instead. Nothing else changes: the library, settings, and API key stay as they are.</p> <p>An install with no owner has a one-time claim code. Docker and NAS installs print it to the server log every time they start, until an account is linked. <code>claim-code</code> prints it again, and <code>reset</code> prints a new one. Someone signing in from another device enters it on the <strong>Enter the claim code</strong> screen. The desktop app needs no code. When an account is already linked, <code>claim-code</code> prints no code and tells you to run <code>reset</code> first.</p> <p>These commands skip the Pro check on purpose. They are how you recover an install after deleting or losing the linked account. They work only on the machine that runs MetaTana, against its database; nobody can run them over the network. See <a href="/docs/getting-started/accounts-and-pro#one-account-per-install">One Account Per Install</a>.</p> </div> </details><h2 id="backups" class="scroll-mt-20 group">Backups<a href="#backups" class="ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal" tabindex="-1" aria-hidden="true">#</a></h2> <details class="docs-endpoint" data-method="POST"> <summary> <span class="docs-endpoint-method">CLI</span> <code class="docs-endpoint-path">metatana backup</code> <span class="docs-endpoint-summary">List, check, or restore database backups without starting MetaTana</span> </summary> <div class="docs-endpoint-body"><pre><code class="language-bash">metatana backup list # backups, newest first metatana backup list --json metatana backup check # can this MetaTana open the library? metatana backup restore <backup-id> --confirm # restore on the next start metatana backup unlock --confirm-stopped # clear records left by a stopped container </code></pre> <p>These are the same database backups as <strong>Settings › Maintenance › Backups</strong>. They work when MetaTana can't start, and they skip the Pro check.</p> <p>Stop every MetaTana app or container that uses the same data folder before you restore. <code>restore</code> takes a name from <code>backup list</code> and needs <code>--confirm</code>. The backup replaces the library the next time MetaTana starts, and MetaTana saves a copy of the current database first. If that copy fails, the restore is refused.</p> <p><code>check</code> reads the library without changing it. If a newer MetaTana has already upgraded it, <code>check</code> names that version and the backup from before the update that this version can open. Other commands refuse such a library with exit code <code>65</code> and the same message.</p> <p><code>unlock</code> is for a container that was killed hard and left records another container can't check. Run it only after every app, container, and other computer that shares the data folder has stopped. It leaves the database and backup files alone.</p> </div> </details><h2 id="runtime" class="scroll-mt-20 group">Runtime<a href="#runtime" class="ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal" tabindex="-1" aria-hidden="true">#</a></h2> <details class="docs-endpoint" data-method="POST"> <summary> <span class="docs-endpoint-method">CLI</span> <code class="docs-endpoint-path">metatana serve</code> <span class="docs-endpoint-summary">Start the web app without a desktop window</span> </summary> <div class="docs-endpoint-body"><pre><code class="language-bash">metatana serve # http://localhost:3000, listening on 0.0.0.0 metatana serve --port 8080 --host 127.0.0.1 metatana serve --runtime-role web # web only; run background-services separately </code></pre> </div> </details><details class="docs-endpoint" data-method="POST"> <summary> <span class="docs-endpoint-method">CLI</span> <code class="docs-endpoint-path">metatana background-services</code> <span class="docs-endpoint-summary">Run background work without the web server</span> </summary> <div class="docs-endpoint-body"><pre><code class="language-bash">metatana background-services # start in the background metatana background-services --foreground # run in this terminal metatana background-services --status metatana background-services --stop </code></pre> </div> </details><details class="docs-endpoint" data-method="GET"> <summary> <span class="docs-endpoint-method">CLI</span> <code class="docs-endpoint-path">metatana runtime-status</code> <span class="docs-endpoint-summary">Show which runtime parts are running</span> </summary> <div class="docs-endpoint-body"><pre><code class="language-bash">metatana runtime-status metatana runtime-status --json metatana runtime-status --role web --require-running # exits non-zero if not running </code></pre> </div> </details><h2 id="not-in-the-cli" class="scroll-mt-20 group">Not in the CLI<a href="#not-in-the-cli" class="ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal" tabindex="-1" aria-hidden="true">#</a></h2> <p>Library browsing, metadata edits, field locks, media server sync, taking a new backup, Activity history, and resets are not CLI commands. Use the app, or the <a href="/docs/reference/api">API</a> for scripted access. The MCP bridge is also separate from the CLI; see <a href="/docs/reference/api#mcp-bridge">API reference: MCP bridge</a>.</p> <h2 id="going-deeper" class="scroll-mt-20 group">Going deeper<a href="#going-deeper" class="ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal" tabindex="-1" aria-hidden="true">#</a></h2> <ul> <li><a href="/docs/reference/api">Reference: API</a>: the HTTP API for scripted access</li> <li><a href="/docs/reference/environment-variables">Reference: environment variables</a>: database path and other settings</li> <li><a href="/docs/how-it-works/ai-and-agents">AI and agents</a>: MCP bridge setup</li> </ul> </article><nav aria-label="Previous and next pages" class="mt-12 grid grid-cols-2 gap-4"><div class="col-start-1"><a class="flex flex-col gap-1 h-full rounded-[20px] bg-[var(--surface)] p-5 hover:bg-[var(--fill)] transition-colors duration-[var(--dur-fast)] group" href="/docs/reference/api"><span class="flex items-center gap-1 text-[14px] text-[var(--text-3)] group-hover:text-[var(--text)] transition-colors duration-[var(--dur-fast)]"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-left" aria-hidden="true"><path d="m15 18-6-6 6-6"></path></svg>Previous</span><span class="text-[17px] font-medium text-[var(--text)] leading-snug">API</span></a></div><div class="col-start-2"><a class="flex flex-col items-end gap-1 h-full text-right rounded-[20px] bg-[var(--surface)] p-5 hover:bg-[var(--fill)] transition-colors duration-[var(--dur-fast)] group" href="/docs/reference/file-layout"><span class="flex items-center gap-1 text-[14px] text-[var(--text-3)] group-hover:text-[var(--text)] transition-colors duration-[var(--dur-fast)]">Next<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right" aria-hidden="true"><path d="m9 18 6-6-6-6"></path></svg></span><span class="text-[17px] font-medium text-[var(--text)] leading-snug">File Layout</span></a></div></nav></div><div class="min-w-0"><aside aria-label="On this page" class="hidden xl:block"><div class="sticky top-[calc(3.5rem+1rem)]"><p class="px-3 pb-2 text-[14px] font-medium text-[var(--text-3)]">On this page</p><nav class="max-h-[calc(100vh-14rem)] overflow-y-auto px-3 py-3"><ul class="space-y-1"><li class=""><a href="#how-the-cli-runs" class="block rounded-[12px] px-3 py-1.5 text-[14px] leading-snug transition-colors duration-[var(--dur-fast)] text-[var(--text-3)] hover:text-[var(--text)]">How the CLI runs</a></li><li class="ml-3"><a href="#install-the-command" class="block rounded-[12px] px-3 py-1.5 text-[14px] leading-snug transition-colors duration-[var(--dur-fast)] text-[var(--text-3)] hover:text-[var(--text)]">Install the command</a></li><li class="ml-3"><a href="#pro-sign-in" class="block rounded-[12px] px-3 py-1.5 text-[14px] leading-snug transition-colors duration-[var(--dur-fast)] text-[var(--text-3)] hover:text-[var(--text)]">Pro sign-in</a></li><li class=""><a href="#scan-and-undo" class="block rounded-[12px] px-3 py-1.5 text-[14px] leading-snug transition-colors duration-[var(--dur-fast)] text-[var(--text-3)] hover:text-[var(--text)]">Scan and undo</a></li><li class=""><a href="#folders" class="block rounded-[12px] px-3 py-1.5 text-[14px] leading-snug transition-colors duration-[var(--dur-fast)] text-[var(--text-3)] hover:text-[var(--text)]">Folders</a></li><li class=""><a href="#library-tools" class="block rounded-[12px] px-3 py-1.5 text-[14px] leading-snug transition-colors duration-[var(--dur-fast)] text-[var(--text-3)] hover:text-[var(--text)]">Library tools</a></li><li class=""><a href="#trailers" class="block rounded-[12px] px-3 py-1.5 text-[14px] leading-snug transition-colors duration-[var(--dur-fast)] text-[var(--text-3)] hover:text-[var(--text)]">Trailers</a></li><li class=""><a href="#export" class="block rounded-[12px] px-3 py-1.5 text-[14px] leading-snug transition-colors duration-[var(--dur-fast)] text-[var(--text-3)] hover:text-[var(--text)]">Export</a></li><li class=""><a href="#trakt" class="block rounded-[12px] px-3 py-1.5 text-[14px] leading-snug transition-colors duration-[var(--dur-fast)] text-[var(--text-3)] hover:text-[var(--text)]">Trakt</a></li><li class=""><a href="#install-owner" class="block rounded-[12px] px-3 py-1.5 text-[14px] leading-snug transition-colors duration-[var(--dur-fast)] text-[var(--text-3)] hover:text-[var(--text)]">Install owner</a></li><li class=""><a href="#backups" class="block rounded-[12px] px-3 py-1.5 text-[14px] leading-snug transition-colors duration-[var(--dur-fast)] text-[var(--text-3)] hover:text-[var(--text)]">Backups</a></li><li class=""><a href="#runtime" class="block rounded-[12px] px-3 py-1.5 text-[14px] leading-snug transition-colors duration-[var(--dur-fast)] text-[var(--text-3)] hover:text-[var(--text)]">Runtime</a></li><li class=""><a href="#not-in-the-cli" class="block rounded-[12px] px-3 py-1.5 text-[14px] leading-snug transition-colors duration-[var(--dur-fast)] text-[var(--text-3)] hover:text-[var(--text)]">Not in the CLI</a></li><li class=""><a href="#going-deeper" class="block rounded-[12px] px-3 py-1.5 text-[14px] leading-snug transition-colors duration-[var(--dur-fast)] text-[var(--text-3)] hover:text-[var(--text)]">Going deeper</a></li></ul></nav></div></aside></div></div><!--$--><!--/$--></article></div></div></div></main><footer class="relative mt-24 bg-[var(--bg-2)]"><div class="relative max-w-[1240px] mx-auto px-6 pt-16 pb-10 lg:px-8"><div class="mb-14 flex flex-col gap-12 lg:flex-row lg:justify-between lg:gap-8"><div class="flex max-w-xs flex-col gap-3"><a class="flex items-center gap-2.5 font-[family-name:var(--font-display)] text-[17px] font-semibold tracking-[-0.02em] text-[var(--text)]" href="/"><svg width="22" height="22" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M176 96H272L336 160V416H176Z" fill="#fafafa"></path><rect x="144" y="128" width="32" height="48" fill="#fafafa"></rect><rect x="144" y="232" width="32" height="48" fill="#fafafa"></rect><rect x="144" y="336" width="32" height="48" fill="#fafafa"></rect><rect x="336" y="128" width="32" height="48" fill="#fafafa"></rect><rect x="336" y="232" width="32" height="48" fill="#fafafa"></rect><rect x="336" y="336" width="32" height="48" fill="#fafafa"></rect></svg>MetaTana</a><p class="text-[15px] leading-relaxed text-[var(--text-2)]">Fixes your library's metadata before your player scans it.</p></div><div class="grid grid-cols-2 gap-8 sm:grid-cols-3 lg:grid-cols-5 lg:gap-10"><div class="flex min-w-[112px] flex-col gap-3"><h2 class="text-[14px] font-medium text-[var(--text-3)]">Product</h2><ul class="flex flex-col gap-2.5"><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/features">Features</a></li><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/pricing">Pricing</a></li><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/#install">Download</a></li><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/changelog">Changelog</a></li></ul></div><div class="flex min-w-[112px] flex-col gap-3"><h2 class="text-[14px] font-medium text-[var(--text-3)]">Use with</h2><ul class="flex flex-col gap-2.5"><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/plex-metadata-manager">Plex</a></li><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/jellyfin-metadata-manager">Jellyfin</a></li><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/emby-metadata-manager">Emby</a></li><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/kodi-nfo">Kodi NFO</a></li><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/media-organizer">Media organizer</a></li></ul></div><div class="flex min-w-[112px] flex-col gap-3"><h2 class="text-[14px] font-medium text-[var(--text-3)]">Compare</h2><ul class="flex flex-col gap-2.5"><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/tinymediamanager-alternative">tinyMediaManager</a></li><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/filebot-alternative">FileBot</a></li><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/media-companion-alternative">Media Companion</a></li></ul></div><div class="flex min-w-[112px] flex-col gap-3"><h2 class="text-[14px] font-medium text-[var(--text-3)]">Resources</h2><ul class="flex flex-col gap-2.5"><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/docs">Docs</a></li><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/install/unraid">Unraid setup</a></li><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/mcp">MCP</a></li><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/blog">Blog</a></li><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/support">Support</a></li></ul></div><div class="flex min-w-[112px] flex-col gap-3"><h2 class="text-[14px] font-medium text-[var(--text-3)]">Legal</h2><ul class="flex flex-col gap-2.5"><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/terms">Terms</a></li><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/privacy">Privacy</a></li><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/open-source">Open source</a></li><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/cancel">Cancel contracts</a></li><li><a class="text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]" href="/legal/archive">Past versions</a></li></ul></div></div></div><div class="mb-8 flex flex-col gap-2 text-[13px] leading-relaxed text-[var(--text-3)]"><div class="flex flex-wrap items-center gap-x-4 gap-y-2"><span class="inline-flex items-center gap-2"><img src="/logos/tmdb.svg" alt="TMDB" width="34" height="14" class="h-3.5 w-auto opacity-60"/>This product uses TMDB and the TMDB APIs but is not endorsed, certified, or otherwise approved by TMDB.</span><span>Metadata provided by<!-- --> <a href="https://thetvdb.com/" target="_blank" rel="noopener noreferrer" class="underline underline-offset-2 hover:text-[var(--text)]">TheTVDB</a>.</span></div><p>Provider names, logos, metadata, and artwork remain the property of their respective owners. Plex, Jellyfin, Emby, Kodi, FileBot, tinyMediaManager, Media Companion, TMDB and TheTVDB are trademarks of their owners. MetaTana is not affiliated with or endorsed by them. Names are used only to describe compatibility or to compare products.</p></div><div class="flex flex-col gap-6 border-t border-[var(--divider)] pt-6 text-[14px] text-[var(--text-3)] lg:flex-row lg:items-center lg:justify-between"><div class="flex flex-col gap-1"><span>macOS (Apple silicon) · Windows · Linux · Docker</span><span>© <!-- -->2026<!-- --> Watari Labs Pty Ltd. ABN 84 696 983 829.</span></div><nav aria-label="Watari Labs products" class="flex flex-wrap items-center gap-x-6 gap-y-3"><a href="https://watari.dev" class="transition-colors hover:text-[var(--text)]">Watari Labs</a><a href="https://metatana.com" class="group inline-flex items-center gap-2 transition-colors hover:text-[var(--text)]"><span class="h-1.5 w-1.5 rounded-full" style="background-color:#10b981" aria-hidden="true"></span>MetaTana</a><a href="https://labtether.com" class="group inline-flex items-center gap-2 transition-colors hover:text-[var(--text)]"><span class="h-1.5 w-1.5 rounded-full" style="background-color:#ff0080" aria-hidden="true"></span>LabTether</a><a href="https://momentbackup.com" class="group inline-flex items-center gap-2 transition-colors hover:text-[var(--text)]"><span class="h-1.5 w-1.5 rounded-full" style="background-color:#6f9be8" aria-hidden="true"></span>MomentBackup</a><a href="https://x.com/Watari_Labs_" target="_blank" rel="noopener noreferrer" class="transition-colors hover:text-[var(--text)]">Follow on X</a></nav></div></div></footer><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--><script src="/_next/static/immutable/chunks/36k8in9a291ok.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[53501,[\"/_next/static/immutable/chunks/3jhbchtsp4peb.js\"],\"default\"]\n3:I[39756,[\"/_next/static/immutable/chunks/2qop_-jodr0hu.js\"],\"default\"]\n4:I[8821,[\"/_next/static/immutable/chunks/3jhbchtsp4peb.js\",\"/_next/static/immutable/chunks/2xvel1r-fvivd.js\"],\"default\"]\n5:I[37457,[\"/_next/static/immutable/chunks/2qop_-jodr0hu.js\"],\"default\"]\n6:I[22016,[\"/_next/static/immutable/chunks/3jhbchtsp4peb.js\",\"/_next/static/immutable/chunks/34u-3ms-ly8gl.js\",\"/_next/static/immutable/chunks/2fhem8ns6fhsn.js\"],\"\"]\n1b:I[68027,[\"/_next/static/immutable/chunks/3jhbchtsp4peb.js\"],\"default\",1]\n:HL[\"/_next/static/immutable/chunks/16i67ci35884r.css\",\"style\"]\n:HL[\"/_next/static/immutable/media/83afe278b6a6bb3c-s.p.45535valc9rzk.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/immutable/media/ab57efd000576a30-s.p.2q0khlq77_eaw.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n19:X\n0:{\"P\":null,\"c\":[\"\",\"docs\",\"reference\",\"cli\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"docs\",{\"children\":[[\"slug\",\"reference/cli\",\"oc\",[]],{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/immutable/chunks/16i67ci35884r.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/immutable/chunks/3jhbchtsp4peb.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"inter_1ec4dd9f-module__UMPaKG__variable inter_tight_d0a535f6-module__yVhuTq__variable\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"bg-[var(--bg)] text-[var(--text)] font-[family-name:var(--font-sans)] antialiased\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Organization\\\",\\\"@id\\\":\\\"https://metatana.com/#organization\\\",\\\"name\\\":\\\"MetaTana\\\",\\\"legalName\\\":\\\"Watari Labs Pty Ltd\\\",\\\"url\\\":\\\"https://metatana.com\\\",\\\"logo\\\":\\\"https://metatana.com/logo.svg\\\",\\\"email\\\":\\\"support@watari.dev\\\",\\\"sameAs\\\":[\\\"https://watari.dev\\\",\\\"https://github.com/watari-dev\\\",\\\"https://x.com/Watari_Labs_\\\"]}\"}}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"WebSite\\\",\\\"@id\\\":\\\"https://metatana.com/#website\\\",\\\"name\\\":\\\"MetaTana\\\",\\\"url\\\":\\\"https://metatana.com\\\",\\\"inLanguage\\\":\\\"en\\\",\\\"publisher\\\":{\\\"@id\\\":\\\"https://metatana.com/#organization\\\"}}\"}}],[\"$\",\"a\",null,{\"href\":\"#main-content\",\"className\":\"sr-only focus:not-sr-only focus:fixed focus:top-2 focus:left-2 focus:z-[100] focus:px-4 focus:py-2 focus:rounded-[var(--radius-sm)] focus:bg-[var(--panel)] focus:text-[var(--text)] focus:outline focus:outline-2 focus:outline-[var(--accent)]\",\"children\":\"Skip to content\"}],[\"$\",\"$L2\",null,{}],[\"$\",\"main\",null,{\"id\":\"main-content\",\"className\":\"pt-14\",\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$4\",\"errorStyles\":[],\"errorScripts\":[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/immutable/chunks/2xvel1r-fvivd.js\",\"async\":true,\"nonce\":\"$undefined\"}]],\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"section\",null,{\"className\":\"relative overflow-hidden\",\"children\":[[\"$\",\"div\",null,{\"className\":\"ambient top\",\"aria-hidden\":true}],[\"$\",\"div\",null,{\"className\":\"relative mx-auto max-w-[720px] px-6 pt-28 pb-28 lg:px-8\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"t-page text-[var(--text)]\",\"children\":\"Page not found\"}],[\"$\",\"div\",null,{\"className\":\"mt-8 flex flex-wrap gap-3\",\"children\":[[\"$\",\"$L6\",null,{\"href\":\"/\",\"className\":\"cta-emerald\",\"children\":\"Home\"}],[\"$\",\"$L6\",null,{\"href\":\"/docs\",\"className\":\"cta-ghost\",\"children\":\"Docs\"}]]}],[\"$\",\"ul\",null,{\"className\":\"mt-12 flex flex-wrap gap-x-6 gap-y-3 text-[15px]\",\"children\":[[\"$\",\"li\",\"/pricing\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/pricing\",\"className\":\"text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Pricing\"}]}],[\"$\",\"li\",\"/docs\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/docs\",\"className\":\"text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Docs\"}]}],[\"$\",\"li\",\"/changelog\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/changelog\",\"className\":\"text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Changelog\"}]}],[\"$\",\"li\",\"/support\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/support\",\"className\":\"text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Support\"}]}]]}]]}]]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],[\"$\",\"footer\",null,{\"className\":\"relative mt-24 bg-[var(--bg-2)]\",\"children\":[\"$\",\"div\",null,{\"className\":\"relative max-w-[1240px] mx-auto px-6 pt-16 pb-10 lg:px-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-14 flex flex-col gap-12 lg:flex-row lg:justify-between lg:gap-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex max-w-xs flex-col gap-3\",\"children\":[[\"$\",\"$L6\",null,{\"href\":\"/\",\"className\":\"flex items-center gap-2.5 font-[family-name:var(--font-display)] text-[17px] font-semibold tracking-[-0.02em] text-[var(--text)]\",\"children\":[[\"$\",\"svg\",null,{\"width\":22,\"height\":22,\"viewBox\":\"0 0 512 512\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"aria-hidden\":true,\"children\":[\"$L7\",\"$L8\",\"$L9\",\"$La\",\"$Lb\",\"$Lc\",\"$Ld\"]}],\"MetaTana\"]}],\"$Le\"]}],\"$Lf\"]}],\"$L10\",\"$L11\"]}]}],\"$L12\",\"$L13\",\"$L14\",\"$L15\"]}]}]]}],{\"children\":[\"$L16\",{\"children\":[\"$L17\",{\"children\":[\"$L18\",{},null,false,null]},null,false,\"$19\"]},null,false,null]},null,false,null],\"$L1a\",false]],\"m\":\"$undefined\",\"G\":[\"$1b\",[\"$L1c\"]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\"}\n1e:I[76821,[\"/_next/static/immutable/chunks/3jhbchtsp4peb.js\"],\"AttributionCapture\"]\n1f:I[42472,[\"/_next/static/immutable/chunks/3jhbchtsp4peb.js\"],\"GoogleAdsDownloadMeasurement\"]\n20:I[2355,[\"/_next/static/immutable/chunks/3jhbchtsp4peb.js\"],\"Analytics\"]\n21:I[57215,[\"/_next/static/immutable/chunks/3jhbchtsp4peb.js\"],\"SpeedInsights\"]\n22:I[3934,[\"/_next/static/immutable/chunks/3jhbchtsp4peb.js\",\"/_next/static/immutable/chunks/34u-3ms-ly8gl.js\"],\"DocsLayout\"]\n25:I[97367,[\"/_next/static/immutable/chunks/2qop_-jodr0hu.js\"],\"OutletBoundary\"]\n26:\"$Sreact.suspense\"\n28:I[97367,[\"/_next/static/immutable/chunks/2qop_-jodr0hu.js\"],\"ViewportBoundary\"]\n2a:I[97367,[\"/_next/static/immutable/chunks/2qop_-jodr0hu.js\"],\"MetadataBoundary\"]\n:HL[\"/logos/tmdb.svg\",\"image\"]\n7:[\"$\",\"path\",null,{\"d\":\"M176 96H272L336 160V416H176Z\",\"fill\":\"#fafafa\"}]\n8:[\"$\",\"rect\",null,{\"x\":\"144\",\"y\":\"128\",\"width\":\"32\",\"height\":\"48\",\"fill\":\"#fafafa\"}]\n9:[\"$\",\"rect\",null,{\"x\":\"144\",\"y\":\"232\",\"width\":\"32\",\"height\":\"48\",\"fill\":\"#fafafa\"}]\na:[\"$\",\"rect\",null,{\"x\":\"144\",\"y\":\"336\",\"width\":\"32\",\"height\":\"48\",\"fill\":\"#fafafa\"}]\nb:[\"$\",\"rect\",null,{\"x\":\"336\",\"y\":\"128\",\"width\":\"32\",\"height\":\"48\",\"fill\":\"#fafafa\"}]\nc:[\"$\",\"rect\",null,{\"x\":\"336\",\"y\":\"232\",\"width\":\"32\",\"height\":\"48\",\"fill\":\"#fafafa\"}]\nd:[\"$\",\"rect\",null,{\"x\":\"336\",\"y\":\"336\",\"width\":\"32\",\"height\":\"48\",\"fill\":\"#fafafa\"}]\ne:[\"$\",\"p\",null,{\"className\":\"text-[15px] leading-relaxed text-[var(--text-2)]\",\"children\":\"Fixes your library's metadata before your player scans it.\"}]\nf:[\"$\",\"div\",null,{\"className\":\"grid grid-cols-2 gap-8 sm:grid-cols-3 lg:grid-cols-5 lg:gap-10\",\"children\":[[\"$\",\"div\",\"Product\",{\"className\":\"flex min-w-[112px] flex-col gap-3\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-[14px] font-medium text-[var(--text-3)]\",\"children\":\"Product\"}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-2.5\",\"children\":[[\"$\",\"li\",\"Features\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/features\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Features\"}]}],[\"$\",\"li\",\"Pricing\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/pricing\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Pricing\"}]}],[\"$\",\"li\",\"Download\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/#install\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Download\"}]}],[\"$\",\"li\",\"Changelog\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/changelog\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Changelog\"}]}]]}]]}],[\"$\",\"div\",\"Use with\",{\"className\":\"flex min-w-[112px] flex-col gap-3\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-[14px] font-medium text-[var(--text-3)]\",\"children\":\"Use with\"}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-2.5\",\"children\":[[\"$\",\"li\",\"Plex\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/plex-metadata-manager\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Plex\"}]}],[\"$\",\"li\",\"Jellyfin\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/jellyfin-metadata-manager\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Jellyfin\"}]}],[\"$\",\"li\",\"Emby\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/emby-metadata-manager\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Emby\"}]}],[\"$\",\"li\",\"Kodi NFO\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/kodi-nfo\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Kodi NFO\"}]}],[\"$\",\"li\",\"Media organizer\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/media-organizer\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Media organizer\"}]}]]}]]}],[\"$\",\"div\",\"Compare\",{\"className\":\"flex min-w-[112px] flex-col gap-3\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-[14px] font-medium text-[var(--text-3)]\",\"children\":\"Compare\"}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-2.5\",\"children\":[[\"$\",\"li\",\"tinyMediaManager\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/tinymediamanager-alternative\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"tinyMediaManager\"}]}],[\"$\",\"li\",\"FileBot\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/filebot-alternative\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"FileBot\"}]}],[\"$\",\"li\",\"Media Companion\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/media-companion-alternative\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Media Companion\"}]}]]}]]}],[\"$\",\"div\",\"Resources\",{\"className\":\"flex min-w-[112px] flex-col gap-3\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-[14px] font-medium text-[var(--text-3)]\",\"children\":\"Resources\"}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-2.5\",\"children\":[[\"$\",\"li\",\"Docs\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/docs\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Docs\"}]}],[\"$\",\"li\",\"Unraid setup\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/install/unraid\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Unraid setup\"}]}],[\"$\",\"li\",\"MCP\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/mcp\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"MCP\"}]}],[\"$\",\"li\",\"Blog\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/blog\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Blog\"}]}],[\"$\",\"li\",\"Support\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/support\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Support\"}]}]]}]]}],\"$L1d\"]}]\n10:[\"$\",\"div\",null,{\"className\":\"mb-8 flex flex-col gap-2 text-[13px] leading-relaxed text-[var(--text-3)]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center gap-x-4 gap-y-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-2\",\"children\":[[\"$\",\"img\",null,{\"src\":\"/logos/tmdb.svg\",\"alt\":\"TMDB\",\"width\":34,\"height\":14,\"className\":\"h-3.5 w-auto opacity-60\"}],\"This product uses TMDB and the TMDB APIs but is not endorsed, certified, or otherwise approved by TMDB.\"]}],[\"$\",\"span\",null,{\"children\":[\"Metadata provided by\",\" \",[\"$\",\"a\",null,{\"href\":\"https://thetvdb.com/\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"underline underline-offset-2 hover:text-[var(--text)]\",\"children\":\"TheTVDB\"}],\".\"]}]]}],[\"$\",\"p\",null,{\"children\":\"Provider names, logos, metadata, and artwork remain the property of their respective owners. Plex, Jellyfin, Emby, Kodi, FileBot, tinyMediaManager, Media Companion, TMDB and TheTVDB are trademarks of their owners. MetaTana is not affiliated with or endorsed by them. Names are used only to describe compatibility or to compare products.\"}]]}]\n11:[\"$\",\"div\",null,{\"className\":\"flex flex-col gap-6 border-t border-[var(--divider)] pt-6 text-[14px] text-[var(--text-3)] lg:flex-row lg:items-center lg:justify-between\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col gap-1\",\"children\":[[\"$\",\"span\",null,{\"children\":\"macOS (Apple silicon) · Windows · Linux · Docker\"}],[\"$\",\"span\",null,{\"children\":[\"© \",2026,\" Watari Labs Pty Ltd. ABN 84 696 983 829.\"]}]]}],[\"$\",\"nav\",null,{\"aria-label\":\"Watari Labs products\",\"className\":\"flex flex-wrap items-center gap-x-6 gap-y-3\",\"children\":[[\"$\",\"a\",null,{\"href\":\"https://watari.dev\",\"className\":\"transition-colors hover:text-[var(--text)]\",\"children\":\"Watari Labs\"}],[[\"$\",\"a\",\"MetaTana\",{\"href\":\"https://metatana.com\",\"className\":\"group inline-flex items-center gap-2 transition-colors hover:text-[var(--text)]\",\"children\":[[\"$\",\"span\",null,{\"className\":\"h-1.5 w-1.5 rounded-full\",\"style\":{\"backgroundColor\":\"#10b981\"},\"aria-hidden\":\"true\"}],\"MetaTana\"]}],[\"$\",\"a\",\"LabTether\",{\"href\":\"https://labtether.com\",\"className\":\"group inline-flex items-center gap-2 transition-colors hover:text-[var(--text)]\",\"children\":[[\"$\",\"span\",null,{\"className\":\"h-1.5 w-1.5 rounded-full\",\"style\":{\"backgroundColor\":\"#ff0080\"},\"aria-hidden\":\"true\"}],\"LabTether\"]}],[\"$\",\"a\",\"MomentBackup\",{\"href\":\"https://momentbackup.com\",\"className\":\"group inline-flex items-center gap-2 transition-colors hover:text-[var(--text)]\",\"children\":[[\"$\",\"span\",null,{\"className\":\"h-1.5 w-1.5 rounded-full\",\"style\":{\"backgroundColor\":\"#6f9be8\"},\"aria-hidden\":\"true\"}],\"MomentBackup\"]}]],[\"$\",\"a\",null,{\"href\":\"https://x.com/Watari_Labs_\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"transition-colors hover:text-[var(--text)]\",\"children\":\"Follow on X\"}]]}]]}]\n12:[\"$\",\"$L1e\",null,{}]\n13:[\"$\",\"$L1f\",null,{}]\n14:[\"$\",\"$L20\",null,{}]\n15:[\"$\",\"$L21\",null,{}]\n16:[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/immutable/chunks/34u-3ms-ly8gl.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L22\",null,{\"sections\":[{\"label\":\"Start\",\"dirKey\":\"getting-started\",\"items\":[{\"slug\":\"getting-started\",\"title\":\"Getting Started\"},{\"slug\":\"getting-started/installation\",\"title\":\"Installation\"},{\"slug\":\"getting-started/installation/desktop\",\"title\":\"Desktop Installation\"},{\"slug\":\"getting-started/installation/docker\",\"title\":\"Docker Installation\"},{\"slug\":\"getting-started/installation/unraid\",\"title\":\"Unraid Installation\"},{\"slug\":\"getting-started/installation/truenas\",\"title\":\"TrueNAS Installation\"},{\"slug\":\"getting-started/first-library\",\"title\":\"First Folder\"},{\"slug\":\"getting-started/accounts-and-pro\",\"title\":\"Accounts And Pro\"},{\"slug\":\"getting-started/upgrading-to-2\",\"title\":\"Upgrading to 2.0\"}]},{\"label\":\"Pages\",\"dirKey\":\"pages\",\"items\":[{\"slug\":\"pages\",\"title\":\"Pages\"},{\"slug\":\"pages/home\",\"title\":\"Home\"},{\"slug\":\"pages/library\",\"title\":\"Library\"},{\"slug\":\"pages/inbox\",\"title\":\"Inbox\"},{\"slug\":\"pages/folders\",\"title\":\"Folders\"},{\"slug\":\"pages/sync\",\"title\":\"Sync\"},{\"slug\":\"pages/activity\",\"title\":\"Activity\"},{\"slug\":\"pages/settings\",\"title\":\"Settings\"},{\"slug\":\"pages/help\",\"title\":\"Help\"}]},{\"label\":\"Tasks\",\"dirKey\":\"recipes\",\"items\":[{\"slug\":\"recipes\",\"title\":\"Tasks\"},{\"slug\":\"recipes/filter-and-search-library\",\"title\":\"Filter And Search Your Library\"},{\"slug\":\"recipes/edit-metadata-on-a-movie\",\"title\":\"Edit Metadata On A Movie\"},{\"slug\":\"recipes/fix-a-wrong-identity-match\",\"title\":\"Fix A Wrong Identity Match\"},{\"slug\":\"recipes/re-scrape-and-review-diff\",\"title\":\"Re-Scrape A Movie And Review The Diff\"},{\"slug\":\"recipes/lock-fields\",\"title\":\"Lock Fields So A Rescrape Doesn't Overwrite Them\"},{\"slug\":\"recipes/manage-a-tv-show\",\"title\":\"Manage A TV Show\"},{\"slug\":\"recipes/reorder-episodes\",\"title\":\"Reorder Episodes By Absolute Number\"},{\"slug\":\"recipes/curate-show-artwork\",\"title\":\"Curate Show Artwork\"},{\"slug\":\"recipes/work-through-metadata-tasks\",\"title\":\"Work Through The Metadata Tasks Queue\"},{\"slug\":\"recipes/use-ai-vision\",\"title\":\"Use AI Vision For Hard Files\"},{\"slug\":\"recipes/triage-attention-items\",\"title\":\"Triage What Needs Your Attention\"},{\"slug\":\"recipes/find-and-resolve-duplicates\",\"title\":\"Find And Resolve Duplicates\"},{\"slug\":\"recipes/add-your-first-folder\",\"title\":\"Add Your First File Or Folder\"},{\"slug\":\"recipes/set-up-an-arrivals-folder\",\"title\":\"Set Up An Arrivals Folder\"},{\"slug\":\"recipes/migrate-from-tinymediamanager\",\"title\":\"Migrate From tinyMediaManager\"},{\"slug\":\"recipes/connect-a-media-server\",\"title\":\"Connect A Media Server\"},{\"slug\":\"recipes/add-trakt\",\"title\":\"Add Trakt And Sync Watched State\"},{\"slug\":\"recipes/local-api-key\",\"title\":\"Set Up The Local API Key (Pro)\"},{\"slug\":\"recipes/back-up-your-library\",\"title\":\"Back Up Your Library\"},{\"slug\":\"recipes/move-or-restore-a-library\",\"title\":\"Move Or Restore A Library\"},{\"slug\":\"recipes/recover-from-a-bad-rename\",\"title\":\"Recover From A Bad Rename\"}]},{\"label\":\"How MetaTana works\",\"dirKey\":\"how-it-works\",\"items\":[{\"slug\":\"how-it-works\",\"title\":\"How MetaTana Works\"},{\"slug\":\"how-it-works/scanning-and-matching\",\"title\":\"Scanning And Matching\"},{\"slug\":\"how-it-works/metadata\",\"title\":\"Metadata And Scraping\"},{\"slug\":\"how-it-works/providers\",\"title\":\"Providers\"},{\"slug\":\"how-it-works/nfo-and-artwork\",\"title\":\"NFO And Artwork\"},{\"slug\":\"how-it-works/naming-and-organizing\",\"title\":\"Naming And Organizing\"},{\"slug\":\"how-it-works/watch-state\",\"title\":\"Media Servers And Watch State\"},{\"slug\":\"how-it-works/ai-and-agents\",\"title\":\"AI And Agents (Pro)\"}]},{\"label\":\"Pro \u0026 Skyhook\",\"dirKey\":\"skyhook\",\"items\":[{\"slug\":\"skyhook\",\"title\":\"Skyhook\"},{\"slug\":\"skyhook/hosted-metadata\",\"title\":\"Hosted Metadata\"},{\"slug\":\"skyhook/ai-vision\",\"title\":\"AI Vision\"},{\"slug\":\"skyhook/privacy-and-data\",\"title\":\"Privacy And Data\"},{\"slug\":\"skyhook/credits-and-billing\",\"title\":\"Credits And Billing\"},{\"slug\":\"skyhook/provider-policy\",\"title\":\"Provider Policy\"}]},{\"label\":\"Reference\",\"dirKey\":\"reference\",\"items\":[{\"slug\":\"reference\",\"title\":\"Reference\"},{\"slug\":\"reference/api-keys\",\"title\":\"API Keys\"},{\"slug\":\"reference/deployment-modes\",\"title\":\"Deployment Modes\"},{\"slug\":\"reference/environment-variables\",\"title\":\"Environment Variables\"},{\"slug\":\"reference/api\",\"title\":\"API\"},{\"slug\":\"reference/cli\",\"title\":\"CLI\"},{\"slug\":\"reference/file-layout\",\"title\":\"File Layout\"},{\"slug\":\"reference/nfo-format\",\"title\":\"NFO Format\"}]},{\"label\":\"Troubleshooting\",\"dirKey\":\"troubleshooting\",\"items\":[{\"slug\":\"troubleshooting\",\"title\":\"Troubleshooting\"},{\"slug\":\"troubleshooting/ui-looks-stale\",\"title\":\"UI Looks Stale Or Doesn't Update\"},{\"slug\":\"troubleshooting/scan-found-too-little\",\"title\":\"Scan Found Too Few Files\"},{\"slug\":\"troubleshooting/scan-stuck-or-slow\",\"title\":\"Scan Stuck Or Slow\"},{\"slug\":\"troubleshooting/wrong-match\",\"title\":\"Wrong Identity Match\"},{\"slug\":\"troubleshooting/rescrape-keeps-bad-value\",\"title\":\"Rescrape Keeps Bringing Back A Bad Value\"},{\"slug\":\"troubleshooting/sidecar-did-not-appear\",\"title\":\"Sidecar Didn't Appear On Disk\"},{\"slug\":\"troubleshooting/artwork-not-loading\",\"title\":\"Artwork Not Loading\"},{\"slug\":\"troubleshooting/hosted-feature-fails\",\"title\":\"Hosted Feature Fails\"},{\"slug\":\"troubleshooting/playback-client-cannot-see-files\",\"title\":\"Playback Client Can't See Files\"},{\"slug\":\"troubleshooting/migration-from-other-app-stuck\",\"title\":\"Migration From Another App Is Stuck\"},{\"slug\":\"troubleshooting/install-and-sign-in\",\"title\":\"Install And Sign-In Problems\"}]}],\"searchIndex\":[{\"slug\":\"getting-started\",\"title\":\"Getting Started\",\"excerpt\":\"Getting Started MetaTana is a local-first metadata manager for media you already own. It scans the folders you choose, identifies what is there, and helps keep metadata, artwork, sidecars, naming, and\"},{\"slug\":\"getting-started/installation\",\"title\":\"Installation\",\"excerpt\":\"Installation Choose the environment where MetaTana will stay available. Every option uses the same library model; the main difference is how MetaTana reaches your files and how updates are installed. \"},{\"slug\":\"getting-started/installation/desktop\",\"title\":\"Desktop Installation\",\"excerpt\":\"Desktop Installation Use the desktop app when MetaTana will run on a Mac with Apple silicon, a Windows PC, or a Linux workstation with direct or mounted access to your media. \u003cdiv class=\\\"docs-callout\\\"\"},{\"slug\":\"getting-started/installation/docker\",\"title\":\"Docker Installation\",\"excerpt\":\"Docker Installation Use Docker when MetaTana should run on a server, NAS, homelab host, or other always-on machine. The public image supports native and pulls. Installing on Unraid? Use the Unraid ins\"},{\"slug\":\"getting-started/installation/unraid\",\"title\":\"Unraid Installation\",\"excerpt\":\"Unraid Installation MetaTana is published in Unraid Community Applications, so the quickest install is: Open Apps on your Unraid server. Search for MetaTana and select Install. Set your media path and\"},{\"slug\":\"getting-started/installation/truenas\",\"title\":\"TrueNAS Installation\",\"excerpt\":\"TrueNAS Installation MetaTana is listed in TrueNAS Community Apps. Install it from the TrueNAS Apps screen so TrueNAS manages the container, storage, and updates. \u003cdiv class=\\\"docs-callout\\\"\u003e \u003cdiv class\"},{\"slug\":\"getting-started/first-library\",\"title\":\"First Folder\",\"excerpt\":\"First Folder Your first folder is a review pass, not a blind automation run. Treat the first scan as evidence-gathering: see what MetaTana found, fix the wrong matches before they propagate, and only \"},{\"slug\":\"getting-started/accounts-and-pro\",\"title\":\"Accounts And Pro\",\"excerpt\":\"Accounts And Pro MetaTana is local-first, but a hosted account adds Pro services such as hosted metadata, hosted AI Vision credits, account billing, and device linking. \u003cdiv class=\\\"docs-callout\\\"\u003e \u003cdiv\"},{\"slug\":\"getting-started/upgrading-to-2\",\"title\":\"Upgrading to 2.0\",\"excerpt\":\"Upgrading to 2.0 MetaTana 2.0 is coming soon. It replaces the 1.x sidebar of fourteen pages with six main pages plus Settings and Help, and moves several Settings tabs. Your library, edits and saved k\"},{\"slug\":\"pages\",\"title\":\"Pages\",\"excerpt\":\"Pages MetaTana has six pages in the sidebar: Home, Library, Inbox, Folders, Sync, and Activity. Settings and Help sit at the bottom. Each page has one job, and this section has one reference page for \"},{\"slug\":\"pages/home\",\"title\":\"Home\",\"excerpt\":\"Home Home is the first page in the sidebar. It says what came in and when, what waits for you, and what needs fixing, each with one action. Press G then H to open it from anywhere. First start On a fr\"},{\"slug\":\"pages/library\",\"title\":\"Library\",\"excerpt\":\"Library The Library is where you browse and edit. Every title MetaTana has filed appears here, in a grid or a list, and each title, show, and person opens as its own page with an editor. This page wal\"},{\"slug\":\"pages/inbox\",\"title\":\"Inbox\",\"excerpt\":\"Inbox The Inbox is one list of the decisions only you can make. MetaTana files what it is sure about on its own. Everything that waits for your OK shows up here, grouped by kind. What counts Inbox cou\"},{\"slug\":\"pages/folders\",\"title\":\"Folders\",\"excerpt\":\"Folders Folders is the page for the folders MetaTana watches and where their files go: each watched folder and its settings, how files are named, the destinations sorted files are filed into, and the \"},{\"slug\":\"pages/sync\",\"title\":\"Sync\",\"excerpt\":\"Sync Sync keeps MetaTana, your playback servers (Plex, Jellyfin, Kodi, Emby), and Trakt in step. Watched state, progress, metadata, and NFO repair move in both directions, and you control each kind of\"},{\"slug\":\"pages/activity\",\"title\":\"Activity\",\"excerpt\":\"Activity Activity lists what is running and everything that ran: scans, filed titles, fetches, renames, syncs, tool runs, and failures, with Undo and Retry where they apply. When something happened, o\"},{\"slug\":\"pages/settings\",\"title\":\"Settings\",\"excerpt\":\"Settings Settings sits at the bottom of the sidebar. It has five sections: General, Account, Providers, Files, and Maintenance. Settings save as you change them, and each section keeps less-used contr\"},{\"slug\":\"pages/help\",\"title\":\"Help\",\"excerpt\":\"Help Help sits at the bottom of the sidebar, below Settings. It has guides, your support reports and their replies, update status, and the keyboard shortcuts. Press ? on any page to open it at the sho\"},{\"slug\":\"recipes\",\"title\":\"Tasks\",\"excerpt\":\"Tasks Each task is a short walkthrough for one job: when to use it, the steps, and what a good result looks like. They are grouped by the page where the job starts. New to MetaTana? Start with one fol\"},{\"slug\":\"recipes/filter-and-search-library\",\"title\":\"Filter And Search Your Library\",\"excerpt\":\"Filter And Search Your Library Once your library has more than a hundred titles, scrolling stops working. The Library page has layers of filters: chips for common lists, a search box for free text, fi\"},{\"slug\":\"recipes/edit-metadata-on-a-movie\",\"title\":\"Edit Metadata On A Movie\",\"excerpt\":\"Edit Metadata On A Movie Provider data is usually good enough, but sometimes you want to change a value: fix a translated title, correct a year, rewrite an overview, or lock a field so a rescrape neve\"},{\"slug\":\"recipes/fix-a-wrong-identity-match\",\"title\":\"Fix A Wrong Identity Match\",\"excerpt\":\"Fix A Wrong Identity Match A file landed with the wrong title, year, or episode number. Search for the right identity, apply it, and lock it. \u003cdiv class=\\\"docs-callout\\\"\u003e \u003cdiv class=\\\"docs-callout-body\\\"\u003e\"},{\"slug\":\"recipes/re-scrape-and-review-diff\",\"title\":\"Re-Scrape A Movie And Review The Diff\",\"excerpt\":\"Re-Scrape A Movie And Review The Diff Provider data changes. Artwork gets replaced. Translations appear. A rescrape refreshes a title from the providers without losing your edits, and Review changes l\"},{\"slug\":\"recipes/lock-fields\",\"title\":\"Lock Fields So A Rescrape Doesn't Overwrite Them\",\"excerpt\":\"Lock Fields So A Rescrape Doesn't Overwrite Them You fixed a movie title by hand, picked specific artwork, or rewrote an overview the way you want it. A value you type yourself is already kept on resc\"},{\"slug\":\"recipes/manage-a-tv-show\",\"title\":\"Manage A TV Show\",\"excerpt\":\"Manage A TV Show Shows have moving parts movies don't: seasons, episodes, episode order policies, per-season artwork. This recipe opens a show and walks through the actions you'll use most: rescraping\"},{\"slug\":\"recipes/reorder-episodes\",\"title\":\"Reorder Episodes By Absolute Number\",\"excerpt\":\"Reorder Episodes By Absolute Number Anime, long-running serials, and shows with story arcs sometimes come with more than one episode order: aired, DVD, absolute, a streaming service's own split, and s\"},{\"slug\":\"recipes/curate-show-artwork\",\"title\":\"Curate Show Artwork\",\"excerpt\":\"Curate Show Artwork Shows have show-level artwork slots (Poster, Backdrop, Banner, Logo, Clearart, Character Art, Key Art, Landscape, and more) plus season artwork. Most are filled from providers on t\"},{\"slug\":\"recipes/work-through-metadata-tasks\",\"title\":\"Work Through The Metadata Tasks Queue\",\"excerpt\":\"Work Through The Metadata Tasks Queue Library › Needs attention lists every title that needs metadata, artwork, or sidecar work, and lets you fix many of them in one pass. Use it when editing titles o\"},{\"slug\":\"recipes/use-ai-vision\",\"title\":\"Use AI Vision For Hard Files\",\"excerpt\":\"Use AI Vision For Hard Files \u003cdiv class=\\\"docs-callout\\\" data-variant=\\\"pro\\\"\u003e \u003cdiv class=\\\"docs-callout-body\\\"\u003e \u003cspan class=\\\"docs-callout-title\\\"\u003ePro, with credits\u003c/span\u003e AI Vision uses your Pro account and\"},{\"slug\":\"recipes/triage-attention-items\",\"title\":\"Triage What Needs Your Attention\",\"excerpt\":\"Triage What Needs Your Attention After a scan, most titles land with a match and clean metadata. Some need a decision from you, and a few have something to fix. Home shows both, and the Library's Need\"},{\"slug\":\"recipes/find-and-resolve-duplicates\",\"title\":\"Find And Resolve Duplicates\",\"excerpt\":\"Find And Resolve Duplicates Duplicate files happen: an episode that sits in two folders, a file copied twice during a migration. MetaTana lists every set of copies of one title in the Inbox, so you ca\"},{\"slug\":\"recipes/add-your-first-folder\",\"title\":\"Add Your First File Or Folder\",\"excerpt\":\"Add Your First File Or Folder You installed MetaTana and want to see your media show up in the app. This recipe goes from a fresh install to a filled Library in about a minute, depending on how many f\"},{\"slug\":\"recipes/set-up-an-arrivals-folder\",\"title\":\"Set Up An Arrivals Folder\",\"excerpt\":\"Set Up An Arrivals Folder Watch an incoming folder so MetaTana identifies new media, sorts it into your library folders, and asks you before it moves anything. Use this for an incoming folder, a drop \"},{\"slug\":\"recipes/migrate-from-tinymediamanager\",\"title\":\"Migrate From tinyMediaManager\",\"excerpt\":\"Migrate From tinyMediaManager Bring over tinyMediaManager (tMM) folders and the settings MetaTana understands, without rebuilding from scratch. The importer shows a preview before it changes anything.\"},{\"slug\":\"recipes/connect-a-media-server\",\"title\":\"Connect A Media Server\",\"excerpt\":\"Connect A Media Server Plex, Jellyfin, Kodi, and Emby are the players MetaTana keeps in step with your library. Add a server, set up path mappings, then run the first sync. Step 1: Open Sync Select Sy\"},{\"slug\":\"recipes/add-trakt\",\"title\":\"Add Trakt And Sync Watched State\",\"excerpt\":\"Add Trakt And Sync Watched State Trakt keeps your watched history across devices. Connect it on the Sync page, then pull history from Trakt, push MetaTana's history to it, or both. \u003cdiv class=\\\"docs-ca\"},{\"slug\":\"recipes/local-api-key\",\"title\":\"Set Up The Local API Key (Pro)\",\"excerpt\":\"Set Up The Local API Key (Pro) \u003cdiv class=\\\"docs-callout\\\" data-variant=\\\"pro\\\"\u003e \u003cdiv class=\\\"docs-callout-body\\\"\u003e \u003cspan class=\\\"docs-callout-title\\\"\u003ePro feature\u003c/span\u003e Using the local app API with an API key\"},{\"slug\":\"recipes/back-up-your-library\",\"title\":\"Back Up Your Library\",\"excerpt\":\"Back Up Your Library MetaTana stores everything it knows about your library in a single SQLite database plus the sidecar files on disk next to your media. MetaTana backs up that database for you every\"},{\"slug\":\"recipes/move-or-restore-a-library\",\"title\":\"Move Or Restore A Library\",\"excerpt\":\"Move Or Restore A Library Use this when your media moved (a new drive, a renamed share, a new mount point) or when you restore a MetaTana backup on another computer. MetaTana keeps every title, edit, \"},{\"slug\":\"recipes/recover-from-a-bad-rename\",\"title\":\"Recover From A Bad Rename\",\"excerpt\":\"Recover From A Bad Rename You ran a rename (by hand, with a bulk action, or as part of an organize) and the result is wrong. The wrong files moved into the wrong folder, an episode got the wrong numbe\"},{\"slug\":\"how-it-works\",\"title\":\"How MetaTana Works\",\"excerpt\":\"How MetaTana Works MetaTana is a local-first app with a hosted account service beside it. The app owns your library: scanning, matching, metadata, files on disk, and sync. The hosted side owns your ac\"},{\"slug\":\"how-it-works/scanning-and-matching\",\"title\":\"Scanning And Matching\",\"excerpt\":\"Scanning And Matching A scan finds the media files in a folder, reads what is already known about them, and matches each one to a title. It is progressive: useful early results first, then better ones\"},{\"slug\":\"how-it-works/metadata\",\"title\":\"Metadata And Scraping\",\"excerpt\":\"Metadata And Scraping MetaTana treats metadata as a cycle, not a one-time scrape: values come in from several places, you review what would change, MetaTana saves what you accept, then writes files on\"},{\"slug\":\"how-it-works/providers\",\"title\":\"Providers\",\"excerpt\":\"Providers Providers supply title identity, IDs, descriptions, dates, people, ratings, artwork, subtitles, and trailers. MetaTana can use your own provider keys, or Skyhook (Pro), MetaTana's hosted met\"},{\"slug\":\"how-it-works/nfo-and-artwork\",\"title\":\"NFO And Artwork\",\"excerpt\":\"NFO And Artwork MetaTana keeps its decisions in its library database and writes NFO, artwork, subtitle, and trailer files next to your media only when a folder or a workflow asks for them. Those files\"},{\"slug\":\"how-it-works/naming-and-organizing\",\"title\":\"Naming And Organizing\",\"excerpt\":\"Naming And Organizing Renaming and organizing change files on disk, so do them after the metadata is reviewed. \u003cdiv class=\\\"docs-callout\\\" data-variant=\\\"warning\\\"\u003e \u003cdiv class=\\\"docs-callout-body\\\"\u003e \u003cspan c\"},{\"slug\":\"how-it-works/watch-state\",\"title\":\"Media Servers And Watch State\",\"excerpt\":\"Media Servers And Watch State MetaTana keeps your library in step with Plex, Jellyfin, Emby, and Kodi, and with Trakt (Pro). It makes the local metadata clean before a server imports it, then syncs wa\"},{\"slug\":\"how-it-works/ai-and-agents\",\"title\":\"AI And Agents (Pro)\",\"excerpt\":\"AI And Agents (Pro) MetaTana can be driven through its local API and local MCP bridge. API-key access and MCP are Pro features: both require a signed-in Pro account, and both keep the app's normal per\"},{\"slug\":\"skyhook\",\"title\":\"Skyhook\",\"excerpt\":\"Skyhook Skyhook is MetaTana's hosted metadata and AI layer for Pro workflows. \u003cdiv class=\\\"docs-callout\\\" data-variant=\\\"pro\\\"\u003e \u003cdiv class=\\\"docs-callout-body\\\"\u003e \u003cspan class=\\\"docs-callout-title\\\"\u003ePro only\u003c/s\"},{\"slug\":\"skyhook/hosted-metadata\",\"title\":\"Hosted Metadata\",\"excerpt\":\"Hosted Metadata Hosted metadata is Skyhook's provider-backed metadata layer. \u003cdiv class=\\\"docs-callout\\\" data-variant=\\\"pro\\\"\u003e \u003cdiv class=\\\"docs-callout-body\\\"\u003e \u003cspan class=\\\"docs-callout-title\\\"\u003ePro required\"},{\"slug\":\"skyhook/ai-vision\",\"title\":\"AI Vision\",\"excerpt\":\"AI Vision AI Vision helps identify difficult media when filenames, folder context, local NFO, and provider search are not enough. \u003cdiv class=\\\"docs-callout\\\" data-variant=\\\"pro\\\"\u003e \u003cdiv class=\\\"docs-callout\"},{\"slug\":\"skyhook/privacy-and-data\",\"title\":\"Privacy And Data\",\"excerpt\":\"Privacy And Data Skyhook receives only the data it needs for each request. \u003cdiv class=\\\"docs-callout\\\"\u003e \u003cdiv class=\\\"docs-callout-body\\\"\u003e \u003cspan class=\\\"docs-callout-title\\\"\u003eThe boundary in one sentence\u003c/spa\"},{\"slug\":\"skyhook/credits-and-billing\",\"title\":\"Credits And Billing\",\"excerpt\":\"Credits And Billing Skyhook AI features use MetaTana's hosted account and credit model. \u003cdiv class=\\\"docs-callout\\\" data-variant=\\\"pro\\\"\u003e \u003cdiv class=\\\"docs-callout-body\\\"\u003e \u003cspan class=\\\"docs-callout-title\\\"\u003eP\"},{\"slug\":\"skyhook/provider-policy\",\"title\":\"Provider Policy\",\"excerpt\":\"Provider Policy Skyhook turns on a provider only after checking its terms. The app being able to talk to a provider does not mean Skyhook uses it. \u003cdiv class=\\\"docs-callout\\\"\u003e \u003cdiv class=\\\"docs-callout-b\"},{\"slug\":\"reference\",\"title\":\"Reference\",\"excerpt\":\"Reference Lookup pages for setting up and running MetaTana outside the app's own pages: keys, environment variables, the API and command-line tool, where files live, and the NFO format. For every sett\"},{\"slug\":\"reference/api-keys\",\"title\":\"API Keys\",\"excerpt\":\"API Keys MetaTana can use local provider keys for direct metadata, artwork, subtitle, AI, and sync workflows. Pro hosted features can also use MetaTana-managed hosted provider access where enabled. \u003cd\"},{\"slug\":\"reference/deployment-modes\",\"title\":\"Deployment Modes\",\"excerpt\":\"Deployment Modes MetaTana runs in three ways. \u003cdiv class=\\\"docs-callout\\\"\u003e \u003cdiv class=\\\"docs-callout-body\\\"\u003e \u003cspan class=\\\"docs-callout-title\\\"\u003eThe short version\u003c/span\u003e \u003cstrong\u003eDesktop\u003c/strong\u003e if MetaTana \"},{\"slug\":\"reference/environment-variables\",\"title\":\"Environment Variables\",\"excerpt\":\"Environment Variables Environment variables are mainly for Docker and other installs without a window. Desktop users normally set the same values in Settings; environment variables are an alternative,\"},{\"slug\":\"reference/api\",\"title\":\"API\",\"excerpt\":\"API MetaTana has a local app API at . The web UI uses it, and so do scripts and the MCP bridge. This page covers how authentication works, where to find the full endpoint list, how to make your first \"},{\"slug\":\"reference/cli\",\"title\":\"CLI\",\"excerpt\":\"CLI MetaTana has a Pro command-line tool for scans, folders, scraping, renaming, exports, Trakt, backups, and running MetaTana without a window. This page lists every command and what each one does. \u003c\"},{\"slug\":\"reference/file-layout\",\"title\":\"File Layout\",\"excerpt\":\"File Layout This page shows where MetaTana keeps its state on disk, and where it writes sidecar files next to your media. Where state lives (per platform) MetaTana keeps its state in one folder: the S\"},{\"slug\":\"reference/nfo-format\",\"title\":\"NFO Format\",\"excerpt\":\"NFO Format NFO files are XML sidecars that travel next to your media. They make metadata portable: MetaTana reads them on scan, writes them after edits, and downstream tools (Plex, Jellyfin, Kodi, Emb\"},{\"slug\":\"troubleshooting\",\"title\":\"Troubleshooting\",\"excerpt\":\"Troubleshooting Start with the symptom. Each page below opens with a short \\\"what you see\\\" description, walks the checks in order of likelihood, and gives a fix for each one. Pick a symptom \u003cdiv class=\"},{\"slug\":\"troubleshooting/ui-looks-stale\",\"title\":\"UI Looks Stale Or Doesn't Update\",\"excerpt\":\"UI Looks Stale Or Doesn't Update You changed something (edited metadata, ran a scan, applied a rename) and the app still shows the old state. Maybe the change was saved but the screen disagrees. Maybe\"},{\"slug\":\"troubleshooting/scan-found-too-little\",\"title\":\"Scan Found Too Few Files\",\"excerpt\":\"Scan Found Too Few Files You pointed MetaTana at a folder with 200 media files and the Library shows 12. Or 0. Either MetaTana can't see the files, decided they aren't media, or skipped them while rea\"},{\"slug\":\"troubleshooting/scan-stuck-or-slow\",\"title\":\"Scan Stuck Or Slow\",\"excerpt\":\"Scan Stuck Or Slow A scan started but never finishes, runs for hours on a small library, or seems to hang at one step. A scan goes through six steps, and each can slow down for different reasons. This\"},{\"slug\":\"troubleshooting/wrong-match\",\"title\":\"Wrong Identity Match\",\"excerpt\":\"Wrong Identity Match A file showed up in your library with the wrong title, year, or episode number. Maybe it picked the 1976 remake instead of the 1933 original. Maybe an episode mapped to S02E03 ins\"},{\"slug\":\"troubleshooting/rescrape-keeps-bad-value\",\"title\":\"Rescrape Keeps Bringing Back A Bad Value\",\"excerpt\":\"Rescrape Keeps Bringing Back A Bad Value You corrected a field. Saved. Ran a refresh or rescrape later. The wrong value came back. A value you type yourself is kept on every rescrape, so either your e\"},{\"slug\":\"troubleshooting/sidecar-did-not-appear\",\"title\":\"Sidecar Didn't Appear On Disk\",\"excerpt\":\"Sidecar Didn't Appear On Disk You ran a scrape, applied metadata, selected Save. Library shows the change. But the NFO or artwork file you expected next to your media isn't there. Either the action on\"},{\"slug\":\"troubleshooting/artwork-not-loading\",\"title\":\"Artwork Not Loading\",\"excerpt\":\"Artwork Not Loading A poster slot is empty after a fetch, an image shows a broken-image icon, or the same artwork keeps coming back after every refresh. Artwork has more moving parts than text fields:\"},{\"slug\":\"troubleshooting/hosted-feature-fails\",\"title\":\"Hosted Feature Fails\",\"excerpt\":\"Hosted Feature Fails Skyhook, AI Vision, the MCP bridge, and the local API key all depend on your MetaTana account. When one fails with a sign-in error, a credit error, or a \\\"Pro required\\\" message, th\"},{\"slug\":\"troubleshooting/playback-client-cannot-see-files\",\"title\":\"Playback Client Can't See Files\",\"excerpt\":\"Playback Client Can't See Files You added titles to MetaTana, wrote NFOs, and Plex, Jellyfin, Kodi, or Emby still don't show them, or show them with old metadata. Getting a change from MetaTana (which\"},{\"slug\":\"troubleshooting/migration-from-other-app-stuck\",\"title\":\"Migration From Another App Is Stuck\",\"excerpt\":\"Migration From Another App Is Stuck You ran the importer to bring your setup over from another media manager. The preview looked right, you applied it, and now something's off: folders missing, paths \"},{\"slug\":\"troubleshooting/install-and-sign-in\",\"title\":\"Install And Sign-In Problems\",\"excerpt\":\"Install And Sign-In Problems Start here if MetaTana will not open, will not sign you in, will not accept your TMDb key, or cannot see your media folder. 421 Misdirected Request on your own domain What\"}],\"children\":\"$L23\"}]]}]\n17:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n18:[\"$\",\"$1\",\"c\",{\"children\":[\"$L24\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/immutable/chunks/2fhem8ns6fhsn.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L25\",null,{\"children\":[\"$\",\"$26\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@27\"}]}]]}]\n1a:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L28\",null,{\"children\":\"$L29\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L2a\",null,{\"children\":[\"$\",\"$26\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L2b\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\n1c:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/immutable/chunks/16i67ci35884r.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n19:C\n1d:[\"$\",\"div\",\"Legal\",{\"className\":\"flex min-w-[112px] flex-col gap-3\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-[14px] font-medium text-[var(--text-3)]\",\"children\":\"Legal\"}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-2.5\",\"children\":[[\"$\",\"li\",\"Terms\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/terms\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Terms\"}]}],[\"$\",\"li\",\"Privacy\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/privacy\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Privacy\"}]}],[\"$\",\"li\",\"Open source\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/open-source\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Open source\"}]}],[\"$\",\"li\",\"Cancel contracts\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/cancel\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Cancel contracts\"}]}],[\"$\",\"li\",\"Past versions\",{\"children\":[\"$\",\"$L6\",null,{\"href\":\"/legal/archive\",\"className\":\"text-[15px] text-[var(--text-2)] transition-colors hover:text-[var(--text)]\",\"children\":\"Past versions\"}]}]]}]]}]\n23:[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]\n2c:I[39824,[\"/_next/static/immutable/chunks/3jhbchtsp4peb.js\",\"/_next/static/immutable/chunks/34u-3ms-ly8gl.js\",\"/_next/static/immutable/chunks/2fhem8ns6fhsn.js\"],\"TableOfContents\"]\n2d:T6e84,\u003ch1 id=\"cli\" class=\"scroll-mt-20 group\"\u003eCLI\u003ca href=\"#cli\" class=\"ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal\" tabindex=\"-1\" aria-hidden=\"true\"\u003e#\u003c/a\u003e\u003c/h1\u003e\n\u003cp\u003eMetaTana has a Pro command-line tool for scans, folders, scraping, renaming, exports, Trakt, backups, and running MetaTana without a window. This page lists every command and what each one does.\u003c/p\u003e\n\u003cdiv class=\"docs-callout\" data-variant=\"pro\"\u003e\n \u003cdiv class=\"docs-callout-body\"\u003e\n \u003cspan class=\"docs-callout-title\"\u003eCLI access is Pro\u003c/span\u003e\n Every command checks for a signed-in MetaTana Pro account before it runs. On the Free plan, or when the account can't be verified, the command stops with an error. The exceptions are \u003ccode\u003emetatana owner\u003c/code\u003e and \u003ccode\u003emetatana backup\u003c/code\u003e, which work without an account so you can recover an install that can't sign in or start.\n \u003c/div\u003e\n\u003c/div\u003e\u003ch2 id=\"how-the-cli-runs\" class=\"scroll-mt-20 group\"\u003eHow the CLI runs\u003ca href=\"#how-the-cli-runs\" class=\"ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal\" tabindex=\"-1\" aria-hidden=\"true\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe CLI works directly on your local MetaTana database. It does not go through the web app or the local API, so it does not need an API key. It is a separate process with its own database connection, so it is safe to run while the app is open.\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003emetatana\u003c/code\u003e command ships inside the desktop app and the Docker image. \u003ccode\u003emetatana --version\u003c/code\u003e prints the app version.\u003c/p\u003e\n\u003ch3 id=\"install-the-command\" class=\"scroll-mt-20 group\"\u003eInstall the command\u003ca href=\"#install-the-command\" class=\"ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal\" tabindex=\"-1\" aria-hidden=\"true\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cdiv class=\"docs-table-scroll\"\u003e\n\u003ctable class=\"docs-env\"\u003e\n\u003cthead\u003e\u003ctr\u003e\u003cth\u003eInstall\u003c/th\u003e\u003cth\u003eHow to get \u003ccode\u003emetatana\u003c/code\u003e\u003c/th\u003e\u003cth\u003eLibrary it uses\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\u003ctd\u003emacOS app\u003c/td\u003e\u003ctd\u003e\u003cstrong\u003eSettings › Maintenance › Advanced\u003c/strong\u003e. \u003cstrong\u003eCommand-line tool for you\u003c/strong\u003e › \u003cstrong\u003eInstall\u003c/strong\u003e links \u003ccode\u003e~/.local/bin/metatana\u003c/code\u003e. \u003cstrong\u003eCommand-line tool for all users\u003c/strong\u003e › \u003cstrong\u003eInstall\u003c/strong\u003e links \u003ccode\u003e/usr/local/bin/metatana\u003c/code\u003e after an administrator password prompt. \u003cstrong\u003eRemove\u003c/strong\u003e undoes either. The link points at \u003ccode\u003eMetaTana.app/Contents/Resources/bin/metatana\u003c/code\u003e.\u003c/td\u003e\u003ctd\u003eThe app's own library\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eWindows app\u003c/td\u003e\u003ctd\u003eThe installer ships \u003ccode\u003e\u0026lt;install folder\u0026gt;\\bin\\metatana.cmd\u003c/code\u003e and offers \u003cstrong\u003eAdd metatana command to PATH\u003c/strong\u003e (your user's PATH). Open a new Command Prompt or PowerShell window afterwards. Uninstalling removes the PATH entry.\u003c/td\u003e\u003ctd\u003eThe app's own library\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eLinux .deb or .rpm\u003c/td\u003e\u003ctd\u003eInstalled for you: \u003ccode\u003e/usr/bin/metatana\u003c/code\u003e links to \u003ccode\u003e/opt/MetaTana/resources/bin/metatana\u003c/code\u003e, and \u003ccode\u003e/usr/bin/MetaTana\u003c/code\u003e opens the app.\u003c/td\u003e\u003ctd\u003eThe app's own library\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eLinux AppImage\u003c/td\u003e\u003ctd\u003e\u003cstrong\u003eSettings › Maintenance › Advanced\u003c/strong\u003e › \u003cstrong\u003eCommand-line tool for you\u003c/strong\u003e › \u003cstrong\u003eInstall\u003c/strong\u003e writes \u003ccode\u003e~/.local/bin/metatana\u003c/code\u003e, a small script that runs the command inside the AppImage file.\u003c/td\u003e\u003ctd\u003eThe app's own library\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eDocker\u003c/td\u003e\u003ctd\u003eAlready in the image at \u003ccode\u003e/usr/local/bin/metatana\u003c/code\u003e. Run \u003ccode\u003edocker exec \u0026lt;container\u0026gt; metatana …\u003c/code\u003e. As root it switches to the container's \u003ccode\u003ePUID\u003c/code\u003e:\u003ccode\u003ePGID\u003c/code\u003e, so files it writes stay usable by the server.\u003c/td\u003e\u003ctd\u003eThe server's library in \u003ccode\u003e/app/data\u003c/code\u003e (\u003ccode\u003eMETATANA_DATA_DIR\u003c/code\u003e, \u003ccode\u003eMETATANA_DB_PATH\u003c/code\u003e)\u003c/td\u003e\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\u003cp\u003eIf your terminal can\u0026#39;t find \u003ccode\u003emetatana\u003c/code\u003e after installing it for your user, add \u003ccode\u003e~/.local/bin\u003c/code\u003e to your \u003ccode\u003ePATH\u003c/code\u003e. Settings never replaces a \u003ccode\u003emetatana\u003c/code\u003e file it did not create; it reports \u003cstrong\u003eAnother file named metatana is already there\u003c/strong\u003e instead. On an AppImage install made with the \u003ca href=\"/docs/getting-started/installation/desktop#linux-install-script\"\u003eLinux install script\u003c/a\u003e, \u003ccode\u003e~/.local/bin/metatana\u003c/code\u003e is the script\u0026#39;s app launcher, so remove it first, install the command from Settings, then run the install script again. The script keeps the command-line tool and makes \u003ccode\u003eMetaTana\u003c/code\u003e and the app menu entry open the app.\u003c/p\u003e\n\u003cp\u003eOn macOS and on Linux .deb, .rpm, and .tar.gz installs, \u003ccode\u003emetatana\u003c/code\u003e with no arguments opens the app. \u003ccode\u003eMetaTana\u003c/code\u003e always opens the app.\u003c/p\u003e\n\u003cp\u003eOn Windows, \u003ccode\u003emetatana\u003c/code\u003e prints its output in Command Prompt and PowerShell like any other command. The output may start with one blank line; scripts that read it should skip leading blank lines.\u003c/p\u003e\n\u003cp\u003eOn Linux, \u003ccode\u003emetatana\u003c/code\u003e also runs as root and with no display, for example over SSH. The AppImage command that Settings writes does the same. If Settings shows \u003cstrong\u003eRepair\u003c/strong\u003e next to the command-line tool, click it to write the command again.\u003c/p\u003e\n\u003ch3 id=\"pro-sign-in\" class=\"scroll-mt-20 group\"\u003ePro sign-in\u003ca href=\"#pro-sign-in\" class=\"ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal\" tabindex=\"-1\" aria-hidden=\"true\"\u003e#\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eFor the Pro check, the CLI uses the hosted session from \u003ccode\u003eMETATANA_HOSTED_SESSION_TOKEN\u003c/code\u003e when it is set. Otherwise the desktop command reuses the session of the signed-in desktop app. In Docker, and on Linux over SSH without a display, the desktop session can\u0026#39;t be read, so set \u003ccode\u003eMETATANA_HOSTED_SESSION_TOKEN\u003c/code\u003e for the Pro check. On Linux without a display the command uses the default desktop data folder (\u003ccode\u003e~/.config/metatana/data\u003c/code\u003e, or under \u003ccode\u003e$XDG_CONFIG_HOME\u003c/code\u003e when it is set).\u003c/p\u003e\n\u003cp\u003eThe command uses the same library as the app it came with (see the table above). Set \u003ccode\u003eMETATANA_DB_PATH\u003c/code\u003e or \u003ccode\u003eMETATANA_DATA_DIR\u003c/code\u003e to point it at another one (see \u003ca href=\"/docs/reference/environment-variables\"\u003eReference: environment variables\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eRun \u003ccode\u003emetatana --help\u003c/code\u003e for the command list, or \u003ccode\u003emetatana \u003ccommand\u003e --help\u003c/code\u003e for one command\u0026#39;s flags.\u003c/p\u003e\n\u003ch2 id=\"scan-and-undo\" class=\"scroll-mt-20 group\"\u003eScan and undo\u003ca href=\"#scan-and-undo\" class=\"ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal\" tabindex=\"-1\" aria-hidden=\"true\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdetails class=\"docs-endpoint\" data-method=\"POST\"\u003e\n \u003csummary\u003e\n \u003cspan class=\"docs-endpoint-method\"\u003eCLI\u003c/span\u003e\n \u003ccode class=\"docs-endpoint-path\"\u003emetatana scan \u0026lt;path\u0026gt;\u003c/code\u003e\n \u003cspan class=\"docs-endpoint-summary\"\u003eScan a folder and identify media files\u003c/span\u003e\n \u003c/summary\u003e\n \u003cdiv class=\"docs-endpoint-body\"\u003e\u003cpre\u003e\u003ccode class=\"language-bash\"\u003emetatana scan /media/incoming # identify and record matches only\nmetatana scan /media/incoming --ai # allow AI Vision for hard files\nmetatana scan /media/incoming --move --output /media/library # also move identified files\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003escan\u003c/code\u003e walks the folder, identifies each media file, and records the matches as a scan job. It prints each file with its match, confidence, and whether it needs review.\u003c/p\u003e\n\u003cp\u003eWithout \u003ccode\u003e--move\u003c/code\u003e, no files are moved. \u003ccode\u003e--move\u003c/code\u003e requires \u003ccode\u003e--output\u003c/code\u003e; only files that don\u0026#39;t need review are moved, into an organized folder layout under that folder. AI Vision is off unless you pass \u003ccode\u003e--ai\u003c/code\u003e. \u003ccode\u003e--dry-run\u003c/code\u003e is deprecated: scans don\u0026#39;t move files unless you ask, and \u003ccode\u003e--dry-run\u003c/code\u003e with \u003ccode\u003e--move\u003c/code\u003e moves nothing.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003escan\u003c/code\u003e also saves each file\u0026#39;s media info, such as resolution, and picks up a \u003ccode\u003eposter.jpg\u003c/code\u003e or \u003ccode\u003efanart.jpg\u003c/code\u003e beside each file it doesn\u0026#39;t move, so Library shows them right away. It doesn\u0026#39;t fetch extra metadata or artwork.\u003c/p\u003e\n\u003cp\u003eA \u003ccode\u003e--move\u003c/code\u003e run ends with the exact command that moves its files back, for example \u003ccode\u003eTo move the files back, run: metatana undo 42\u003c/code\u003e.\u003c/p\u003e\n \u003c/div\u003e\n\u003c/details\u003e\u003cdetails class=\"docs-endpoint\" data-method=\"POST\"\u003e\n \u003csummary\u003e\n \u003cspan class=\"docs-endpoint-method\"\u003eCLI\u003c/span\u003e\n \u003ccode class=\"docs-endpoint-path\"\u003emetatana undo \u0026lt;job-id\u0026gt;\u003c/code\u003e\n \u003cspan class=\"docs-endpoint-summary\"\u003eMove a scan job's files back\u003c/span\u003e\n \u003c/summary\u003e\n \u003cdiv class=\"docs-endpoint-body\"\u003e\u003cpre\u003e\u003ccode class=\"language-bash\"\u003emetatana undo 42\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eMoves files that \u003ccode\u003escan --move\u003c/code\u003e relocated back to their original paths. It checks that each file and its original folder are still reachable before moving it.\u003c/p\u003e\n \u003c/div\u003e\n\u003c/details\u003e\u003ch2 id=\"folders\" class=\"scroll-mt-20 group\"\u003eFolders\u003ca href=\"#folders\" class=\"ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal\" tabindex=\"-1\" aria-hidden=\"true\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdetails class=\"docs-endpoint\" data-method=\"POST\"\u003e\n \u003csummary\u003e\n \u003cspan class=\"docs-endpoint-method\"\u003eCLI\u003c/span\u003e\n \u003ccode class=\"docs-endpoint-path\"\u003emetatana sources\u003c/code\u003e\n \u003cspan class=\"docs-endpoint-summary\"\u003eAdd, list, or remove watched folders\u003c/span\u003e\n \u003c/summary\u003e\n \u003cdiv class=\"docs-endpoint-body\"\u003e\u003cpre\u003e\u003ccode class=\"language-bash\"\u003emetatana sources add /media/movies --type movie # movie, tv, or anime\nmetatana sources list\nmetatana sources remove 3\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThese are the folders on the \u003cstrong\u003eFolders\u003c/strong\u003e page. \u003ccode\u003eadd\u003c/code\u003e checks that the folder is readable before saving it. \u003ccode\u003elist\u003c/code\u003e prints each folder\u0026#39;s ID, which the \u003ccode\u003e--source\u003c/code\u003e option of other commands takes.\u003c/p\u003e\n \u003c/div\u003e\n\u003c/details\u003e\u003ch2 id=\"library-tools\" class=\"scroll-mt-20 group\"\u003eLibrary tools\u003ca href=\"#library-tools\" class=\"ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal\" tabindex=\"-1\" aria-hidden=\"true\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdetails class=\"docs-endpoint\" data-method=\"GET\"\u003e\n \u003csummary\u003e\n \u003cspan class=\"docs-endpoint-method\"\u003eCLI\u003c/span\u003e\n \u003ccode class=\"docs-endpoint-path\"\u003emetatana health\u003c/code\u003e\n \u003cspan class=\"docs-endpoint-summary\"\u003ePrint a library health report\u003c/span\u003e\n \u003c/summary\u003e\n \u003cdiv class=\"docs-endpoint-body\"\u003e\u003cpre\u003e\u003ccode class=\"language-bash\"\u003emetatana health\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003ePrints a score out of 1000, item counts for movies, TV, and anime, and a count of files per issue type.\u003c/p\u003e\n \u003c/div\u003e\n\u003c/details\u003e\u003cdetails class=\"docs-endpoint\" data-method=\"GET\"\u003e\n \u003csummary\u003e\n \u003cspan class=\"docs-endpoint-method\"\u003eCLI\u003c/span\u003e\n \u003ccode class=\"docs-endpoint-path\"\u003emetatana mediainfo\u003c/code\u003e\n \u003cspan class=\"docs-endpoint-summary\"\u003ePrint stream details for library files\u003c/span\u003e\n \u003c/summary\u003e\n \u003cdiv class=\"docs-endpoint-body\"\u003e\u003cpre\u003e\u003ccode class=\"language-bash\"\u003emetatana mediainfo # files with no resolution recorded yet\nmetatana mediainfo --all # every library file\nmetatana mediainfo --save # also store the results\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eReads each file and prints its resolution, video codec, and audio and subtitle track counts. Without \u003ccode\u003e--save\u003c/code\u003e, nothing is stored. \u003ccode\u003e--save\u003c/code\u003e stores the results in the library the same way \u003cstrong\u003eReload media info\u003c/strong\u003e does on a title\u0026#39;s page. Items that need review in MetaTana are printed but not saved.\u003c/p\u003e\n \u003c/div\u003e\n\u003c/details\u003e\u003cdetails class=\"docs-endpoint\" data-method=\"POST\"\u003e\n \u003csummary\u003e\n \u003cspan class=\"docs-endpoint-method\"\u003eCLI\u003c/span\u003e\n \u003ccode class=\"docs-endpoint-path\"\u003emetatana scrape\u003c/code\u003e\n \u003cspan class=\"docs-endpoint-summary\"\u003eScrape metadata into the library\u003c/span\u003e\n \u003c/summary\u003e\n \u003cdiv class=\"docs-endpoint-body\"\u003e\u003cpre\u003e\u003ccode class=\"language-bash\"\u003emetatana scrape # every library item\nmetatana scrape --new # unscraped items only\nmetatana scrape --source 3 # one folder (IDs from: metatana sources list)\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003escrape\u003c/code\u003e saves metadata to your library. Each item goes through the same identify and apply steps as bulk \u003cstrong\u003eScrape\u003c/strong\u003e in Library. Confident matches are applied. Uncertain ones wait in the Inbox for you to review. Locked fields are kept.\u003c/p\u003e\n\u003cp\u003eIt changes library metadata only. It does not download artwork, write NFO files, fetch subtitles or trailers, or rename files. \u003ccode\u003e--all\u003c/code\u003e is the default. At the end it prints how many items were updated, need review, or failed.\u003c/p\u003e\n \u003c/div\u003e\n\u003c/details\u003e\u003cdetails class=\"docs-endpoint\" data-method=\"POST\"\u003e\n \u003csummary\u003e\n \u003cspan class=\"docs-endpoint-method\"\u003eCLI\u003c/span\u003e\n \u003ccode class=\"docs-endpoint-path\"\u003emetatana rename\u003c/code\u003e\n \u003cspan class=\"docs-endpoint-summary\"\u003eRename library files with your saved patterns\u003c/span\u003e\n \u003c/summary\u003e\n \u003cdiv class=\"docs-endpoint-body\"\u003e\u003cpre\u003e\u003ccode class=\"language-bash\"\u003emetatana rename --dry-run # print the plan, change nothing\nmetatana rename # rename files\nmetatana rename --source 3 # one folder\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003erename\u003c/code\u003e uses the patterns and options saved in \u003cstrong\u003eSettings › Files › Naming\u003c/strong\u003e for movies, TV, and anime. With \u003ccode\u003e--dry-run\u003c/code\u003e it prints each old and new path and changes nothing. Without \u003ccode\u003e--dry-run\u003c/code\u003e it renames the files, moving NFO, artwork, and subtitle files with them. Files that already have the right name are skipped, and files it can\u0026#39;t rename safely are listed and left alone.\u003c/p\u003e\n\u003cp\u003eEach run is one batch in \u003cstrong\u003eActivity\u003c/strong\u003e (\u003cstrong\u003eShow › Renames\u003c/strong\u003e), and you can undo the batch from there. Run \u003ccode\u003e--dry-run\u003c/code\u003e first.\u003c/p\u003e\n \u003c/div\u003e\n\u003c/details\u003e\u003cdetails class=\"docs-endpoint\" data-method=\"POST\"\u003e\n \u003csummary\u003e\n \u003cspan class=\"docs-endpoint-method\"\u003eCLI\u003c/span\u003e\n \u003ccode class=\"docs-endpoint-path\"\u003emetatana nfo-rewrite\u003c/code\u003e\n \u003cspan class=\"docs-endpoint-summary\"\u003eRewrite NFO files from library metadata\u003c/span\u003e\n \u003c/summary\u003e\n \u003cdiv class=\"docs-endpoint-body\"\u003e\u003cpre\u003e\u003ccode class=\"language-bash\"\u003emetatana nfo-rewrite --dry-run # print which NFO files would change\nmetatana nfo-rewrite # rewrite NFO files\nmetatana nfo-rewrite --source 3 # one folder\nmetatana nfo-rewrite --format plex # kodi, emby, jellyfin, plex, or mediaportal2\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003enfo-rewrite\u003c/code\u003e works like \u003cstrong\u003eWrite NFO\u003c/strong\u003e in the app. It uses the format in \u003cstrong\u003eSettings › Files › NFO files\u003c/strong\u003e unless you pass \u003ccode\u003e--format\u003c/code\u003e, keeps existing NFO content, and includes your metadata edits. \u003ccode\u003e--dry-run\u003c/code\u003e lists each NFO file as write, unchanged, or unavailable and changes nothing. If any selected item needs review in MetaTana, the run stops and lists those items; review them in the app, or use \u003ccode\u003e--source\u003c/code\u003e to leave them out. Each run is one entry in Activity in the app, where you can undo it.\u003c/p\u003e\n \u003c/div\u003e\n\u003c/details\u003e\u003cdetails class=\"docs-endpoint\" data-method=\"POST\"\u003e\n \u003csummary\u003e\n \u003cspan class=\"docs-endpoint-method\"\u003eCLI\u003c/span\u003e\n \u003ccode class=\"docs-endpoint-path\"\u003emetatana subtitles\u003c/code\u003e\n \u003cspan class=\"docs-endpoint-summary\"\u003eFetch subtitles for library items\u003c/span\u003e\n \u003c/summary\u003e\n \u003cdiv class=\"docs-endpoint-body\"\u003e\u003cpre\u003e\u003ccode class=\"language-bash\"\u003emetatana subtitles # English subtitles for every item\nmetatana subtitles --lang en,fr # several languages\nmetatana subtitles --missing-only # only items with no subtitles yet\nmetatana subtitles --source 3 --overwrite\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003esubtitles\u003c/code\u003e uses the same download queue as \u003cstrong\u003eFetch subtitles\u003c/strong\u003e in the app. Like every CLI command it needs Pro, and it also needs an OpenSubtitles or SubDL API key in \u003cstrong\u003eSettings › Providers › Subtitles\u003c/strong\u003e (or the matching environment variable); without a key it stops and says so. \u003ccode\u003e--lang\u003c/code\u003e defaults to \u003ccode\u003een\u003c/code\u003e. \u003ccode\u003e--overwrite\u003c/code\u003e replaces subtitle files that already exist. Items that need review in MetaTana stop the run, as with \u003ccode\u003enfo-rewrite\u003c/code\u003e. A download that fails for a temporary reason stays queued, and the MetaTana app tries it again later. At the end it prints how many were downloaded, queued for retry, or failed.\u003c/p\u003e\n \u003c/div\u003e\n\u003c/details\u003e\u003ch2 id=\"trailers\" class=\"scroll-mt-20 group\"\u003eTrailers\u003ca href=\"#trailers\" class=\"ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal\" tabindex=\"-1\" aria-hidden=\"true\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdetails class=\"docs-endpoint\" data-method=\"POST\"\u003e\n \u003csummary\u003e\n \u003cspan class=\"docs-endpoint-method\"\u003eCLI\u003c/span\u003e\n \u003ccode class=\"docs-endpoint-path\"\u003emetatana trailers\u003c/code\u003e\n \u003cspan class=\"docs-endpoint-summary\"\u003eFetch trailers for library items\u003c/span\u003e\n \u003c/summary\u003e\n \u003cdiv class=\"docs-endpoint-body\"\u003e\u003cpre\u003e\u003ccode class=\"language-bash\"\u003emetatana trailers\nmetatana trailers --missing-only\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eFor items with a TMDb ID, finds a trailer through TMDb and saves it beside the file as \u003ccode\u003e\u003ctitle\u003e-trailer\u003c/code\u003e. Requires \u003ccode\u003eyt-dlp\u003c/code\u003e on your \u003ccode\u003ePATH\u003c/code\u003e. Items without a TMDb ID are skipped.\u003c/p\u003e\n \u003c/div\u003e\n\u003c/details\u003e\u003ch2 id=\"export\" class=\"scroll-mt-20 group\"\u003eExport\u003ca href=\"#export\" class=\"ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal\" tabindex=\"-1\" aria-hidden=\"true\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdetails class=\"docs-endpoint\" data-method=\"GET\"\u003e\n \u003csummary\u003e\n \u003cspan class=\"docs-endpoint-method\"\u003eCLI\u003c/span\u003e\n \u003ccode class=\"docs-endpoint-path\"\u003emetatana export\u003c/code\u003e\n \u003cspan class=\"docs-endpoint-summary\"\u003eExport the library with a built-in format or a saved template\u003c/span\u003e\n \u003c/summary\u003e\n \u003cdiv class=\"docs-endpoint-body\"\u003e\u003cpre\u003e\u003ccode class=\"language-bash\"\u003emetatana export --format csv # CSV to stdout\nmetatana export --format json --output library.json # also: xml, html, excel\nmetatana export --format html --output library.html # default file: metatana-library.html\nmetatana export --template \"Markdown list\" --output library.md # a saved export template\nmetatana export --template ./my-layout.txt # or a template file\nmetatana export --format csv --type movie --search \"alien\"\nmetatana export --format csv --filters \"genre:contains:Horror|genre:contains:Family,year:gte:2000\"\nmetatana export --format csv --fields title,year,genres,releaseDate,tmdbRating\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003ePass exactly one of \u003ccode\u003e--format\u003c/code\u003e (\u003ccode\u003ecsv\u003c/code\u003e, \u003ccode\u003ejson\u003c/code\u003e, \u003ccode\u003exml\u003c/code\u003e, \u003ccode\u003ehtml\u003c/code\u003e, or \u003ccode\u003eexcel\u003c/code\u003e) or \u003ccode\u003e--template\u003c/code\u003e. \u003ccode\u003e--template\u003c/code\u003e takes the name of a template saved in \u003cstrong\u003eExport templates…\u003c/strong\u003e (the \u003cstrong\u003e⋯\u003c/strong\u003e menu on the \u003cstrong\u003eExport\u003c/strong\u003e row in \u003cstrong\u003eSettings › Maintenance › Backups\u003c/strong\u003e), or a path to a template file; the file\u0026#39;s extension decides how values are escaped. \u003ccode\u003e--type\u003c/code\u003e limits the export to \u003ccode\u003emovie\u003c/code\u003e, \u003ccode\u003etv\u003c/code\u003e, or \u003ccode\u003eanime\u003c/code\u003e, \u003ccode\u003e--search\u003c/code\u003e to items matching the search text, and \u003ccode\u003e--filters\u003c/code\u003e to a filter expression where \u003ccode\u003e,\u003c/code\u003e means all must match and \u003ccode\u003e|\u003c/code\u003e means any one may match. \u003ccode\u003e--fields\u003c/code\u003e picks columns for built-in formats. The older snake_case names such as \u003ccode\u003econtent_rating\u003c/code\u003e and \u003ccode\u003efile_path\u003c/code\u003e still work. Unknown names are skipped with a warning. CSV column headers are the field names (\u003ccode\u003etitle\u003c/code\u003e, \u003ccode\u003ereleaseDate\u003c/code\u003e), not display labels.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eexport\u003c/code\u003e writes an inventory file. It does not write NFO files. See \u003ca href=\"/docs/recipes/back-up-your-library\"\u003eBack up your library\u003c/a\u003e for backups.\u003c/p\u003e\n \u003c/div\u003e\n\u003c/details\u003e\u003ch2 id=\"trakt\" class=\"scroll-mt-20 group\"\u003eTrakt\u003ca href=\"#trakt\" class=\"ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal\" tabindex=\"-1\" aria-hidden=\"true\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdetails class=\"docs-endpoint\" data-method=\"POST\"\u003e\n \u003csummary\u003e\n \u003cspan class=\"docs-endpoint-method\"\u003eCLI\u003c/span\u003e\n \u003ccode class=\"docs-endpoint-path\"\u003emetatana trakt\u003c/code\u003e\n \u003cspan class=\"docs-endpoint-summary\"\u003eSign in to Trakt and sync watched state\u003c/span\u003e\n \u003c/summary\u003e\n \u003cdiv class=\"docs-endpoint-body\"\u003e\u003cpre\u003e\u003ccode class=\"language-bash\"\u003emetatana trakt auth # device-code sign-in\nmetatana trakt status # sign-in and credential status\nmetatana trakt sync # push and pull watched state\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThese use the same Trakt sign-in as the \u003cstrong\u003eSync\u003c/strong\u003e page in the app. \u003ccode\u003esync\u003c/code\u003e prints how many items matched, were pushed, and were pulled. See \u003ca href=\"/docs/recipes/add-trakt\"\u003eAdd Trakt\u003c/a\u003e.\u003c/p\u003e\n \u003c/div\u003e\n\u003c/details\u003e\u003ch2 id=\"install-owner\" class=\"scroll-mt-20 group\"\u003eInstall owner\u003ca href=\"#install-owner\" class=\"ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal\" tabindex=\"-1\" aria-hidden=\"true\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdetails class=\"docs-endpoint\" data-method=\"POST\"\u003e\n \u003csummary\u003e\n \u003cspan class=\"docs-endpoint-method\"\u003eCLI\u003c/span\u003e\n \u003ccode class=\"docs-endpoint-path\"\u003emetatana owner\u003c/code\u003e\n \u003cspan class=\"docs-endpoint-summary\"\u003eShow or reset which account this install is linked to\u003c/span\u003e\n \u003c/summary\u003e\n \u003cdiv class=\"docs-endpoint-body\"\u003e\u003cpre\u003e\u003ccode class=\"language-bash\"\u003emetatana owner status # is an account linked?\nmetatana owner claim-code # show the claim code\nmetatana owner reset # unlink it\ndocker exec \u0026lt;container\u0026gt; metatana owner reset # Docker\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThe first MetaTana account that signs in to an install becomes its owner, and other accounts see \u003cstrong\u003eThis MetaTana is linked to a different account.\u003c/strong\u003e \u003ccode\u003ereset\u003c/code\u003e unlinks the owner so the next account to sign in is linked instead. Nothing else changes: the library, settings, and API key stay as they are.\u003c/p\u003e\n\u003cp\u003eAn install with no owner has a one-time claim code. Docker and NAS installs print it to the server log every time they start, until an account is linked. \u003ccode\u003eclaim-code\u003c/code\u003e prints it again, and \u003ccode\u003ereset\u003c/code\u003e prints a new one. Someone signing in from another device enters it on the \u003cstrong\u003eEnter the claim code\u003c/strong\u003e screen. The desktop app needs no code. When an account is already linked, \u003ccode\u003eclaim-code\u003c/code\u003e prints no code and tells you to run \u003ccode\u003ereset\u003c/code\u003e first.\u003c/p\u003e\n\u003cp\u003eThese commands skip the Pro check on purpose. They are how you recover an install after deleting or losing the linked account. They work only on the machine that runs MetaTana, against its database; nobody can run them over the network. See \u003ca href=\"/docs/getting-started/accounts-and-pro#one-account-per-install\"\u003eOne Account Per Install\u003c/a\u003e.\u003c/p\u003e\n \u003c/div\u003e\n\u003c/details\u003e\u003ch2 id=\"backups\" class=\"scroll-mt-20 group\"\u003eBackups\u003ca href=\"#backups\" class=\"ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal\" tabindex=\"-1\" aria-hidden=\"true\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdetails class=\"docs-endpoint\" data-method=\"POST\"\u003e\n \u003csummary\u003e\n \u003cspan class=\"docs-endpoint-method\"\u003eCLI\u003c/span\u003e\n \u003ccode class=\"docs-endpoint-path\"\u003emetatana backup\u003c/code\u003e\n \u003cspan class=\"docs-endpoint-summary\"\u003eList, check, or restore database backups without starting MetaTana\u003c/span\u003e\n \u003c/summary\u003e\n \u003cdiv class=\"docs-endpoint-body\"\u003e\u003cpre\u003e\u003ccode class=\"language-bash\"\u003emetatana backup list # backups, newest first\nmetatana backup list --json\nmetatana backup check # can this MetaTana open the library?\nmetatana backup restore \u0026lt;backup-id\u0026gt; --confirm # restore on the next start\nmetatana backup unlock --confirm-stopped # clear records left by a stopped container\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThese are the same database backups as \u003cstrong\u003eSettings › Maintenance › Backups\u003c/strong\u003e. They work when MetaTana can\u0026#39;t start, and they skip the Pro check.\u003c/p\u003e\n\u003cp\u003eStop every MetaTana app or container that uses the same data folder before you restore. \u003ccode\u003erestore\u003c/code\u003e takes a name from \u003ccode\u003ebackup list\u003c/code\u003e and needs \u003ccode\u003e--confirm\u003c/code\u003e. The backup replaces the library the next time MetaTana starts, and MetaTana saves a copy of the current database first. If that copy fails, the restore is refused.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003echeck\u003c/code\u003e reads the library without changing it. If a newer MetaTana has already upgraded it, \u003ccode\u003echeck\u003c/code\u003e names that version and the backup from before the update that this version can open. Other commands refuse such a library with exit code \u003ccode\u003e65\u003c/code\u003e and the same message.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eunlock\u003c/code\u003e is for a container that was killed hard and left records another container can\u0026#39;t check. Run it only after every app, container, and other computer that shares the data folder has stopped. It leaves the database and backup files alone.\u003c/p\u003e\n \u003c/div\u003e\n\u003c/details\u003e\u003ch2 id=\"runtime\" class=\"scroll-mt-20 group\"\u003eRuntime\u003ca href=\"#runtime\" class=\"ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal\" tabindex=\"-1\" aria-hidden=\"true\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cdetails class=\"docs-endpoint\" data-method=\"POST\"\u003e\n \u003csummary\u003e\n \u003cspan class=\"docs-endpoint-method\"\u003eCLI\u003c/span\u003e\n \u003ccode class=\"docs-endpoint-path\"\u003emetatana serve\u003c/code\u003e\n \u003cspan class=\"docs-endpoint-summary\"\u003eStart the web app without a desktop window\u003c/span\u003e\n \u003c/summary\u003e\n \u003cdiv class=\"docs-endpoint-body\"\u003e\u003cpre\u003e\u003ccode class=\"language-bash\"\u003emetatana serve # http://localhost:3000, listening on 0.0.0.0\nmetatana serve --port 8080 --host 127.0.0.1\nmetatana serve --runtime-role web # web only; run background-services separately\n\u003c/code\u003e\u003c/pre\u003e\n \u003c/div\u003e\n\u003c/details\u003e\u003cdetails class=\"docs-endpoint\" data-method=\"POST\"\u003e\n \u003csummary\u003e\n \u003cspan class=\"docs-endpoint-method\"\u003eCLI\u003c/span\u003e\n \u003ccode class=\"docs-endpoint-path\"\u003emetatana background-services\u003c/code\u003e\n \u003cspan class=\"docs-endpoint-summary\"\u003eRun background work without the web server\u003c/span\u003e\n \u003c/summary\u003e\n \u003cdiv class=\"docs-endpoint-body\"\u003e\u003cpre\u003e\u003ccode class=\"language-bash\"\u003emetatana background-services # start in the background\nmetatana background-services --foreground # run in this terminal\nmetatana background-services --status\nmetatana background-services --stop\n\u003c/code\u003e\u003c/pre\u003e\n \u003c/div\u003e\n\u003c/details\u003e\u003cdetails class=\"docs-endpoint\" data-method=\"GET\"\u003e\n \u003csummary\u003e\n \u003cspan class=\"docs-endpoint-method\"\u003eCLI\u003c/span\u003e\n \u003ccode class=\"docs-endpoint-path\"\u003emetatana runtime-status\u003c/code\u003e\n \u003cspan class=\"docs-endpoint-summary\"\u003eShow which runtime parts are running\u003c/span\u003e\n \u003c/summary\u003e\n \u003cdiv class=\"docs-endpoint-body\"\u003e\u003cpre\u003e\u003ccode class=\"language-bash\"\u003emetatana runtime-status\nmetatana runtime-status --json\nmetatana runtime-status --role web --require-running # exits non-zero if not running\n\u003c/code\u003e\u003c/pre\u003e\n \u003c/div\u003e\n\u003c/details\u003e\u003ch2 id=\"not-in-the-cli\" class=\"scroll-mt-20 group\"\u003eNot in the CLI\u003ca href=\"#not-in-the-cli\" class=\"ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal\" tabindex=\"-1\" aria-hidden=\"true\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eLibrary browsing, metadata edits, field locks, media server sync, taking a new backup, Activity history, and resets are not CLI commands. Use the app, or the \u003ca href=\"/docs/reference/api\"\u003eAPI\u003c/a\u003e for scripted access. The MCP bridge is also separate from the CLI; see \u003ca href=\"/docs/reference/api#mcp-bridge\"\u003eAPI reference: MCP bridge\u003c/a\u003e.\u003c/p\u003e\n\u003ch2 id=\"going-deeper\" class=\"scroll-mt-20 group\"\u003eGoing deeper\u003ca href=\"#going-deeper\" class=\"ml-2 opacity-0 group-hover:opacity-100 text-[var(--accent)] no-underline transition-opacity duration-[var(--dur-fast)] text-base font-normal\" tabindex=\"-1\" aria-hidden=\"true\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"/docs/reference/api\"\u003eReference: API\u003c/a\u003e: the HTTP API for scripted access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/docs/reference/environment-variables\"\u003eReference: environment variables\u003c/a\u003e: database path and other settings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/docs/how-it-works/ai-and-agents\"\u003eAI and agents\u003c/a\u003e: MCP bridge setup\u003c/li\u003e\n\u003c/ul\u003e\n24:[\"$\",\"div\",null,{\"className\":\"grid gap-6 xl:grid-cols-[minmax(0,820px)_240px] xl:gap-10\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BreadcrumbList\\\",\\\"itemListElement\\\":[{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":1,\\\"name\\\":\\\"Docs\\\",\\\"item\\\":\\\"https://metatana.com/docs\\\"},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":2,\\\"name\\\":\\\"Reference\\\",\\\"item\\\":\\\"https://metatana.com/docs/reference\\\"},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":3,\\\"name\\\":\\\"CLI\\\",\\\"item\\\":\\\"https://metatana.com/docs/reference/cli\\\"}]}\"}}],[\"$\",\"div\",null,{\"className\":\"min-w-0 space-y-6\",\"children\":[[\"$\",\"$L2c\",null,{\"headings\":[{\"id\":\"how-the-cli-runs\",\"text\":\"How the CLI runs\",\"level\":2},{\"id\":\"install-the-command\",\"text\":\"Install the command\",\"level\":3},{\"id\":\"pro-sign-in\",\"text\":\"Pro sign-in\",\"level\":3},{\"id\":\"scan-and-undo\",\"text\":\"Scan and undo\",\"level\":2},{\"id\":\"folders\",\"text\":\"Folders\",\"level\":2},{\"id\":\"library-tools\",\"text\":\"Library tools\",\"level\":2},{\"id\":\"trailers\",\"text\":\"Trailers\",\"level\":2},{\"id\":\"export\",\"text\":\"Export\",\"level\":2},{\"id\":\"trakt\",\"text\":\"Trakt\",\"level\":2},{\"id\":\"install-owner\",\"text\":\"Install owner\",\"level\":2},{\"id\":\"backups\",\"text\":\"Backups\",\"level\":2},{\"id\":\"runtime\",\"text\":\"Runtime\",\"level\":2},{\"id\":\"not-in-the-cli\",\"text\":\"Not in the CLI\",\"level\":2},{\"id\":\"going-deeper\",\"text\":\"Going deeper\",\"level\":2}],\"variant\":\"compact\"}],[\"$\",\"article\",null,{\"className\":\"prose-metatana\",\"dangerouslySetInnerHTML\":{\"__html\":\"$2d\"}}],\"$L2e\",\"$L2f\"]}],\"$L30\"]}]\n31:I[54204,[\"/_next/static/immutable/chunks/3jhbchtsp4peb.js\",\"/_next/static/immutable/chunks/34u-3ms-ly8gl.js\",\"/_next/static/immutable/chunks/2fhem8ns6fhsn.js\"],\"DocsCodeCopy\"]\n32:I[5014,[\"/_next/static/immutable/chunks/3jhbchtsp4peb.js\",\"/_next/static/immutable/chunks/34u-3ms-ly8gl.js\",\"/_next/static/immutable/chunks/2fhem8ns6fhsn.js\"],\"default\"]\n2e:[\"$\",\"$L31\",null,{}]\n2f:[\"$\",\"nav\",null,{\"aria-label\":\"Previous and next pages\",\"className\":\"mt-12 grid grid-cols-2 gap-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"col-start-1\",\"children\":[\"$\",\"$L6\",null,{\"href\":\"/docs/reference/api\",\"className\":\"flex flex-col gap-1 h-full rounded-[20px] bg-[var(--surface)] p-5 hover:bg-[var(--fill)] transition-colors duration-[var(--dur-fast)] group\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex items-center gap-1 text-[14px] text-[var(--text-3)] group-hover:text-[var(--text)] transition-colors duration-[var(--dur-fast)]\",\"children\":[[\"$\",\"$L32\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"m15 18-6-6 6-6\",\"key\":\"1wnfg3\"}]],\"className\":\"lucide-chevron-left\",\"size\":14,\"aria-hidden\":\"true\"}],\"Previous\"]}],[\"$\",\"span\",null,{\"className\":\"text-[17px] font-medium text-[var(--text)] leading-snug\",\"children\":\"API\"}]]}]}],[\"$\",\"div\",null,{\"className\":\"col-start-2\",\"children\":[\"$\",\"$L6\",null,{\"href\":\"/docs/reference/file-layout\",\"className\":\"flex flex-col items-end gap-1 h-full text-right rounded-[20px] bg-[var(--surface)] p-5 hover:bg-[var(--fill)] transition-colors duration-[var(--dur-fast)] group\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex items-center gap-1 text-[14px] text-[var(--text-3)] group-hover:text-[var(--text)] transition-colors duration-[var(--dur-fast)]\",\"children\":[\"Next\",[\"$\",\"$L32\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"m9 18 6-6-6-6\",\"key\":\"mthhwq\"}]],\"className\":\"lucide-chevron-right\",\"size\":14,\"aria-hidden\":\"true\"}]]}],[\"$\",\"span\",null,{\"className\":\"text-[17px] font-medium text-[var(--text)] leading-snug\",\"children\":\"File Layout\"}]]}]}]]}]\n30:[\"$\",\"div\",null,{\"className\":\"min-w-0\",\"children\":[\"$\",\"$L2c\",null,{\"headings\":\"$24:props:children:1:props:children:0:props:headings\",\"variant\":\"desktop\"}]}]\n29:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#07080a\"}]]\n33:I[27201,[\"/_next/static/immutable/chunks/2qop_-jodr0hu.js\"],\"IconMark\"]\n27:null\n2b:[[\"$\",\"title\",\"0\",{\"children\":\"CLI | MetaTana Docs\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"CLI MetaTana has a Pro command-line tool for scans, folders, scraping, renaming, exports, Trakt, backups, and running MetaTana without a window. This page \"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"MetaTana\"}],[\"$\",\"link\",\"3\",{\"rel\":\"manifest\",\"href\":\"/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"4\",{\"rel\":\"canonical\",\"href\":\"https://metatana.com/docs/reference/cli\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:title\",\"content\":\"CLI | MetaTana Docs\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:description\",\"content\":\"CLI MetaTana has a Pro command-line tool for scans, folders, scraping, renaming, exports, Trakt, backups, and running MetaTana without a window. This page \"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:url\",\"content\":\"https://metatana.com\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:site_name\",\"content\":\"MetaTana\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:image\",\"content\":\"https://metatana.com/opengraph-image.png?opengraph-image.2h3v81-57ms1t.png\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image:alt\",\"content\":\"MetaTana by Watari Labs — Organize your media. Keep your files yours.\\n\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:site\",\"content\":\"@Watari_Labs_\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:creator\",\"content\":\"@Watari_Labs_\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:title\",\"content\":\"CLI | MetaTana Docs\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:description\",\"content\":\"CLI MetaTana has a Pro command-line tool for scans, folders, scraping, renaming, exports, Trakt, backups, and running MetaTana without a window. This page \"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:image\",\"content\":\"https://metatana.com/opengraph-image.png?opengraph-image.2h3v81-57ms1t.png\"}],[\"$\",\"meta\",\"22\",{\"name\":\"twitter:image:alt\",\"content\":\"MetaTana by Watari Labs — Organize your media. Keep your files yours.\\n\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"24\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"25\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"link\",\"26\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0scxryhehzlvp.ico\",\"sizes\":\"32x32\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"27\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\",\"sizes\":\"any\",\"type\":\"image/svg+xml\"}],[\"$\",\"$L33\",\"28\",{}]]\n"])</script></body></html>