Open http://localhost:8000 — it redirects to /web/.
Overview of configured services with connection status. Each service shows its version and whether it's reachable.
The main interface. Type a natural language command, click Parse to preview how it's interpreted, then Execute to run it. Results and any errors appear below.
Voice input is supported in Chrome and Edge — click the microphone icon to dictate. The example commands at the bottom are clickable.
Browse your Sonarr and Radarr libraries as a poster grid. Switch between TV and Movies with the tabs at the top.
Each card shows the poster, monitoring status, and file size. Hover to reveal action buttons: upgrade quality, toggle monitoring, grab more seasons, or remove the item and its files. Posters load from TVDB/TMDB where available, with a server-side proxy fallback.
Find and add content. Results come from Sonarr or Radarr's indexer search — the same thing as searching inside those apps. Select a result and click Add.
Live status of all configured services — version, URL, API health. Auto-refreshes every 30 seconds.
Five tabs covering your Plex server activity. See Service Reference → Plex for details.
Queue overview for all configured download managers (SABnzbd, NZBget, qBittorrent, Transmission). The speed control panel at the top lets you set a download limit on any client.
Status of active H.265 transcoding jobs. Jobs are started via natural language command or the Command page. Each job shows progress per file, estimated size savings, and a cancel button.
Configure authentication (username/password). Authentication is disabled by default — once credentials are created, all pages and API routes require login.
FastAPI routes are at /api/v1/. Interactive docs: /docs.
GET /web/— DashboardGET /web/command— Command interfaceGET /web/library— Library browserGET /web/search— Search and addGET /web/services— Service statusGET /web/plex— Plex hubGET /web/downloads— Download manager overviewGET /web/transcode— Transcode job statusGET /web/settings— Settings
POST /web/command/parse— Parse previewPOST /web/command/execute— Execute commandGET /web/library/items— Library grid (paginated)GET /web/plex/history— Watch history (supports?account_id=)GET /web/plex/continue— Continue watchingGET /web/plex/ondeck— On deckGET /web/plex/recent— Recently addedGET /web/plex/butler— Butler task listGET /web/downloads/status— Live download queueDELETE /web/plex/session/{key}— Terminate Plex session
POST /api/v1/execute— Execute a natural language commandGET /api/v1/services— Service status JSONGET /api/v1/config— Current configuration (sanitized)GET /health— Health check
The UI is server-rendered Jinja2 with HTMX for partial updates and Alpine.js for client-side state (modals, tabs, the voice input component). Tailwind CSS via CDN. No build step.
Templates live in src/arrmate/interfaces/web/templates/. Extend base.html for new pages; add partials under partials/ for HTMX endpoints.