Medeia-Macina is a text-first media manager and plugin runtime for searching, downloading, tagging, archiving, replaying, and moving media through one CLI. It is built around pipeable commands, rich result tables, and row replay so you can move from search to action without leaving the terminal.
The current UX is plugin-first. Older internal names like `provider` and `tool` still exist in some code paths and authoring APIs, but the user-facing model is now centered on plugins.
3. Let the row replay its plugin-defined action, or pipe it into another command.
4. Use `.config` any time to inspect or update configuration.
That means rows are not just display data. A row can carry selection arguments or a full replay action. Depending on the plugin and row type, plain `@N` might open a nested table, download a file, show details, or trigger another plugin-specific workflow.
## Plugin System
Plugins are the main integration surface for the app.
- Built-in integrations such as HydrusNetwork, yt-dlp/YouTube, FTP, SCP, Soulseek, Telegram, Internet Archive, OpenLibrary, Bandcamp, and others are treated as plugins.
- Plugins can expose named instances, so one plugin can target multiple endpoints, accounts, or servers via `-instance <name>`.
- Bundled and external plugins use the same `plugins/<name>/` layout.
- External plugin search paths include the repo `plugins/` folder, the current working directory `plugins/` folder, `MM_PLUGIN_PATH`, and `MEDEIA_PLUGIN_PATH`.
- Plugin authoring still uses the current Python base class name `ProviderCore.base.Provider`. That is an implementation detail rather than the preferred user-facing term.
See [plugins/README.md](plugins/README.md) for plugin packaging and discovery details.
## Configuration
The old interactive TUI config editor has been discontinued.
Use `.config` from inside the CLI instead:
-`.config` opens the root configuration table.
-`@N` drills into a selected section.
-`@..` goes back.
-`.config plugins` jumps straight to the user-facing plugin section.
- Selecting a value row and running `.config <value>` updates that setting.
This keeps configuration inside the same table-and-selection model as the rest of the app.
The exact meaning of `@1` depends on the current table and plugin. For example, one row may open a nested directory table while another row may download or replay a file-specific action.
## Core Concepts
-`search-file`: search a plugin, source, or configured backend and produce a table.
-`@N`: replay or select row `N` from the most recent table.
-`|`: pipe the selected result into the next command.
-`add-file`: ingest a file into a configured backend or upload through a plugin.
-`.config`: browse and edit configuration from inside the CLI.
-`.mpv`: hand media off to the integrated MPV workflow.