{"id":50686217,"url":"https://github.com/buzzqw/extto","last_synced_at":"2026-06-08T23:03:35.324Z","repository":{"id":349544469,"uuid":"1202781043","full_name":"buzzqw/extto","owner":"buzzqw","description":"Extreme torrent organizer and downloader for series and movie and comics","archived":false,"fork":false,"pushed_at":"2026-05-29T06:50:33.000Z","size":2536,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T08:29:51.931Z","etag":null,"topics":["all-in-one","jackett","movie","radarr","serie-tv","sonarr","torrent"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"eupl-1.2","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/buzzqw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-06T11:49:23.000Z","updated_at":"2026-05-29T06:50:37.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/buzzqw/extto","commit_stats":null,"previous_names":["buzzqw/extto"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/buzzqw/extto","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buzzqw%2Fextto","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buzzqw%2Fextto/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buzzqw%2Fextto/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buzzqw%2Fextto/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/buzzqw","download_url":"https://codeload.github.com/buzzqw/extto/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buzzqw%2Fextto/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34083848,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["all-in-one","jackett","movie","radarr","serie-tv","sonarr","torrent"],"created_at":"2026-06-08T23:03:31.027Z","updated_at":"2026-06-08T23:03:35.317Z","avatar_url":"https://github.com/buzzqw.png","language":"Python","funding_links":["https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=azanzani@gmail.com\u0026item_name=Support+EXTTO+Project"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"dashboard.png\" alt=\"EXTTO Dashboard\" width=\"860\"/\u003e\n\n# EXTTO\n\n### *The All-in-One Media Automation System*\n\n**Stop running 5 bloated apps to manage your media.**  \nEXTTO is a single, lightweight Python daemon that does everything — from RSS monitoring to Telegram notifications — with a beautiful Web UI you'll actually enjoy using.\n\n[![License: EUPL 1.2](https://img.shields.io/badge/License-EUPL%201.2-blue.svg)](EUPL-1.2%20EN.txt)\n[![Python 3.10+](https://img.shields.io/badge/Python-3.10+-f7c948.svg)](https://www.python.org/)\n[![Self-Hosted](https://img.shields.io/badge/Self--Hosted-✓-2ea44f.svg)]()\n[![Donate](https://img.shields.io/badge/❤️_Support_EXTTO-PayPal-00457C.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=azanzani@gmail.com\u0026item_name=Support+EXTTO+Project)\n\n**English** · [Italiano ↓](#italiano)\n\n\u003c/div\u003e\n\n---\n\n## What is EXTTO?\n\nEXTTO replaces your entire media stack with one self-hosted app.  \nNo more juggling Sonarr + Radarr + Prowlarr + Mylar + a torrent client + a notification bot.  \nJust EXTTO, running quietly on your server, doing everything automatically.\n\n```\nRSS feeds → Smart search → Auto-download → Rename \u0026 Archive → Telegram notification\n```\n\n---\n\n## ✨ Why EXTTO?\n\n| Feature | EXTTO | Sonarr+Radarr+Prowlarr+qBittorrent |\n|---|---|---|\n| Apps to install | **1** | 4+ |\n| RAM usage (idle) | **~80 MB** | ~600 MB+ |\n| Comic book support | **✅ Native** | ❌ Needs Mylar |\n| eMule / eD2k fallback | **✅ Built-in** | ❌ Not possible |\n| RAM disk downloads | **✅ Built-in** | ❌ Not possible |\n| Multi-engine web search | **✅ 6 engines** | ❌ Indexer only |\n| Cloudflare bypass | **✅ FlareSolverr** | ❌ Not possible |\n| Tag-based folder routing | **✅ Built-in** | ❌ Manual |\n| Webhook notifications | **✅ Built-in** | ❌ Via plugins only |\n| Smart gap-fill cooldown | **✅ 24 h per episode** | ❌ Retries every cycle |\n| Automatic backup + Telegram | **✅ Built-in** | ❌ Not possible |\n| Quality score editor | **✅ Full Web UI** | ⚠️ Limited |\n| Per-title exclude rules | **✅ Built-in** | ❌ Not possible |\n| Download source tracking | **✅ Per-torrent tag** | ❌ Not available |\n| Web UI | **✅ Modern, flat** | Mixed |\n\n---\n\n## 🚀 Killer Features\n\n### 🧠 One App, Full Stack\nMonitors RSS feeds, searches Jackett/Prowlarr indexers, scores release quality, downloads via libtorrent (embedded) or your existing qBittorrent / Transmission / aria2, renames files with TMDB metadata, archives to your NAS, notifies you. All automatic.\n\n### 🌐 6-Engine Web Search with Cloudflare Bypass\nWhen your indexers come up empty, EXTTO fans out across **6 public search engines** simultaneously:  \n**BitSearch · The Pirate Bay · Knaben · BTDigg · LimeTorrents · Torrentz2**\n\nEngines protected by Cloudflare are bypassed transparently via the optional **FlareSolverr** sidecar. Web search fires both in scheduled cycles and in manually triggered ones — so when you hit \"Search Now\" you get the full search network, not just RSS.\n\n### 🏷️ Tag-Based Folder Rules\nAssign a tag to any download (automatically or at the moment you add a magnet/torrent) and EXTTO routes the completed file to the matching folder. Series go to `/media/tv`, documentaries to `/media/docs`, comics to `/media/comics` — zero manual sorting.\n\n### 💾 RAM Disk Downloads\nProtect your SSD. EXTTO downloads small torrents directly to a `tmpfs` RAM disk and moves them to permanent storage only when 100% complete. Zero SSD writes during download.  \nCapacity is checked atomically — if two torrents are accepted simultaneously, only one gets the RAM slot; the other falls back to disk without races or `tmpfs` overflow.\n\n### 🫏 eMule / eD2k Resurrection\nStill hunting that obscure 2003 documentary no one seeds anymore? EXTTO integrates with `amuled` and automatically falls back to the eD2k network when torrents fail. No other media manager does this.\n\n### 📚 Comic Books — First Class\nWeekly packs, single issues, automatic monitoring. Downloads directly from GetComics via Mega.nz or torrent. No plugins, no workarounds.\n\n### 🏆 Smart Quality Upgrades — Fully Configurable\nEXTTO scores every release (4K, HDR10, Dolby Vision, DTS-X, codec, source...) and automatically replaces your existing file when a better version is found.  \nEvery weight — resolution, source, codec, audio, release group, DV/REAL/PROPER bonuses — is editable directly from the **Web UI** without touching any config file. No YAML, no restart.\n\n### 🎛️ Modern Web UI — Accordion, Tabs \u0026 Live Dirty Tracking\nThe settings page is organized in collapsible accordion sections (state saved in localStorage) with a dedicated **Integrations tab** for Trakt and Jellyfin. A red dot appears on any tab with unsaved changes so you never lose edits by accident.\n\n### 🔇 Category Filter (beyond Blacklist)\nTwo levels of filtering: the **Blacklist** blocks at parse time but still archives the item for deduplication. The **Category Filter** blocks *and* prevents archiving entirely — those items don't exist for EXTTO. Perfect for permanently ignoring cam-rips, CAM-quality, or entire release groups.\n\n### 🌐 Browser Integration\nClick a `magnet:` link or a `.torrent` file anywhere in your browser — EXTTO receives it instantly. One-time setup via a script generated directly from the Web UI, already configured with your server URL.\n\n### 🔔 Webhook Notifications\nConnect EXTTO to any external service — **ntfy, Gotify, n8n, Home Assistant, Make, Zapier** — with a single URL.  \nEvery download, upgrade, gap-fill, and system event fires a signed JSON POST to your endpoint.  \nOptional HMAC-SHA256 signature for secure verification. No plugins, no extra setup.\n\n```\nnotify_webhook_url    = https://ntfy.sh/my-channel\nnotify_webhook_secret = mysecret     # optional, signs payloads\n```\n\n### 🔍 Smart Gap-Fill with 24 h Cooldown\nThe gap-filler is smarter now. For each missing episode it tracks the last time a live indexer search was performed.  \nThe local archive is always scanned (free), but Jackett and web-search queries fire **at most once per 24 hours** per episode — no more hammering your indexers for the same buco every 6-hour cycle.  \nA configurable `gap_fill_max_per_series` cap prevents a series with many gaps from monopolising search slots.\n\n### 🏷️ Alias-Aware RSS Matching\nWhen an Italian RSS feed publishes a release under an alternative title (e.g. *\"Agenti di S.H.I.E.L.D.\"* instead of the configured *\"Agents of S.H.I.E.L.D.\"*), EXTTO now recognises it automatically.  \nAliases defined in the series config are checked at every stage — RSS parsing, deduplication, feed-match tracking, and gap-fill search queries.\n\n### 💾 Automatic Backup \u0026 Telegram Delivery\nEXTTO backs itself up automatically. Archives rotate with a **GFS scheme** (daily / weekly / monthly / yearly), are sent straight to your **Telegram chat**, and can optionally be uploaded to FTP or Dropbox — all configured from the Web UI, zero external scripts needed.\n\n### 🏷️ Per-Title Exclusion Rules\nBeyond the global blacklist, each series or movie can carry its own **exclude word list**. Useful to separate a sequel from its original, block a specific release group only for one title, or skip extended cuts of a single film — without affecting anything else.\n\n### 📊 Download Source Tracking\nEvery torrent EXTTO accepts is tagged with its **origin** (Jackett, ThePirateBay, Knaben, RSS Feed, Timeframe, Comics…). Visible in the download list and useful to trace retrospectively where a file came from.\n\n### 🔒 Privacy First\nVPN killswitch that binds all traffic to `tun0`/`wg0`. Automatic IP blocklist updates. Your downloads stay private.\n\n### 🌍 Fully Multilingual\nWeb UI available in **Italian, English, German, French, Spanish**. Translations managed via YAML files — easy to extend.\n\n---\n\n## 📦 Installation\n\n```bash\ngit clone https://github.com/buzzqw/extto.git\ncd extto\nchmod +x setup.sh start.sh\n./setup.sh\n```\n\n```bash\n./setup.sh --upgrade    # force-upgrade all Python packages\n```\n\n---\n\n## ▶️ Running EXTTO\n\n**As a systemd service (recommended):**\n```bash\nsudo systemctl enable extto.service\nsudo systemctl start extto.service\n```\n\n**Manually:**\n```bash\n./start.sh              # engine + Web UI on port 5000\n./start.sh --tui        # engine + full-screen Terminal UI\n```\n\nOpen **`http://localhost:5000`** in your browser.\n\n---\n\n## ❤️ Support the Project\n\nEXTTO is free, open-source software built entirely in spare time.  \nIf it saves you hours of configuration, RAM, or disk wear — consider buying the author a coffee.\n\nEvery donation directly funds new features, bug fixes, and keeping the project alive.\n\n\u003cdiv align=\"center\"\u003e\n\n[![Donate with PayPal](https://img.shields.io/badge/Donate-PayPal-00457C?style=for-the-badge\u0026logo=paypal)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=azanzani@gmail.com\u0026item_name=Support+EXTTO+Project)\n\n*Thank you. Seriously.*\n\n\u003c/div\u003e\n\n---\n\n## 🎬 Movie Configuration Tips\n\nGetting the right movie — and not a wrong one with a similar title — depends on how you configure it.\n\n\u003e **Tip — per-movie exclude words:** the `Exclude` field accepts comma-separated words that must *not* appear in the release title. Use it to separate sequels (`romulus`), avoid director's cuts, or block a release group that works badly for that single title only.\n\n| Field | Recommendation |\n|-------|----------------|\n| **Name** | Use at least 2 distinctive words from the title |\n| **Year** | **Always set it.** Without a year the first title match wins — risky for short or generic names |\n| **Exclude** | Comma-separated words that must NOT appear: e.g. `extended,directors cut,romulus` — use this to separate a sequel from its original |\n\n**How matching works:** EXTTO checks that every word in your configured name appears (word-boundary match) in the full RSS release title. If a year is set, the release year must be within ±1. The `exclude` list vetoes the match if any of those words appear.\n\n**Safe config example:**\n```\nName:    Gladiator II\nYear:    2024\nExclude: (empty)\n```\n\n**Risky config (will match any release containing \"alien\"):**\n```\nName:    Alien\nYear:    (empty)\n```\n\n---\n\n## ⚖️ Legal \u0026 Fair Use\n\nEXTTO is a **download automation tool**. It does not host, index, or distribute any copyrighted content.\n\n- EXTTO connects to **indexers you configure** (Jackett, Prowlarr, public RSS feeds). It has no built-in index.\n- What you download is **entirely your responsibility**. Use EXTTO only for content you have the right to access — public domain, Creative Commons, or media you own.\n- The eMule/eD2k and torrent integrations are neutral technologies. EXTTO does not encourage or facilitate piracy.\n- This project is released under the **EUPL 1.2** open-source license.\n\n\u003e *\"With great automation comes great responsibility.\"*\n\n---\n---\n\n\u003ca name=\"italiano\"\u003e\u003c/a\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n# EXTTO\n\n### *Il Sistema di Automazione Media Definitivo*\n\n**Basta tenere accesi 5 programmi pesanti per gestire i tuoi media.**  \nEXTTO è un singolo, leggerissimo servizio Python che fa tutto — dal monitoraggio RSS alle notifiche Telegram — con una Web UI moderna che userai volentieri.\n\n\u003c/div\u003e\n\n---\n\n## Cos'è EXTTO?\n\nEXTTO sostituisce l'intero stack media con una sola app self-hosted.  \nNiente più Sonarr + Radarr + Prowlarr + Mylar + client torrent + bot notifiche.  \nSolo EXTTO, in esecuzione silenziosa sul tuo server, che fa tutto in automatico.\n\n```\nFeed RSS → Ricerca intelligente → Download automatico → Rinomina \u0026 Archivia → Notifica Telegram\n```\n\n---\n\n## ✨ Perché EXTTO?\n\n| Funzionalità | EXTTO | Sonarr+Radarr+Prowlarr+qBittorrent |\n|---|---|---|\n| App da installare | **1** | 4+ |\n| RAM a riposo | **~80 MB** | ~600 MB+ |\n| Fumetti nativi | **✅ Integrato** | ❌ Serve Mylar |\n| Fallback eMule / eD2k | **✅ Integrato** | ❌ Impossibile |\n| Download in RAM disk | **✅ Integrato** | ❌ Impossibile |\n| Ricerca web multi-motore | **✅ 6 motori** | ❌ Solo indexer |\n| Bypass Cloudflare | **✅ FlareSolverr** | ❌ Impossibile |\n| Cartelle per tag | **✅ Integrato** | ❌ Manuale |\n| Notifiche webhook | **✅ Integrato** | ❌ Solo tramite plugin |\n| Gap fill con cooldown | **✅ 24 h per episodio** | ❌ Riprova ad ogni ciclo |\n| Backup automatico + invio Telegram | **✅ Integrato** | ❌ Impossibile |\n| Editor pesi qualità | **✅ Web UI completa** | ⚠️ Limitato |\n| Regole esclusione per titolo | **✅ Integrato** | ❌ Impossibile |\n| Tracciamento sorgente download | **✅ Per torrent** | ❌ Non disponibile |\n| Web UI | **✅ Moderna, flat** | Variabile |\n\n---\n\n## 🚀 Le Funzionalità Che Fanno la Differenza\n\n### 🧠 Un'App, lo Stack Completo\nMonitora feed RSS, cerca su indexer Jackett/Prowlarr, valuta la qualità delle release, scarica via libtorrent (integrato) oppure qBittorrent / Transmission / aria2 esistenti, rinomina con metadati TMDB, archivia sul NAS, notifica su Telegram. Tutto automatico.\n\n### 🌐 Ricerca Web su 6 Motori con Bypass Cloudflare\nQuando gli indexer non trovano nulla, EXTTO espande la ricerca su **6 motori pubblici** in parallelo:  \n**BitSearch · The Pirate Bay · Knaben · BTDigg · LimeTorrents · Torrentz2**\n\nI motori protetti da Cloudflare vengono attraversati in modo trasparente tramite il sidecar opzionale **FlareSolverr**. La ricerca web scatta sia nei cicli schedulati sia in quelli avviati manualmente — quindi premendo \"Controlla ora\" si ottiene l'intera rete di ricerca, non solo RSS.\n\n### 🏷️ Regole Cartelle per Tag\nAssegna un tag a qualsiasi download (automaticamente o al momento in cui aggiungi un magnet/torrent) e EXTTO instrada il file completato nella cartella corrispondente. Serie in `/media/tv`, documentari in `/media/docs`, fumetti in `/media/comics` — zero ordinamento manuale.\n\n### 💾 Download in RAM Disk\nProteggi il tuo SSD. EXTTO scarica i torrent piccoli direttamente su un RAM disk `tmpfs` e li sposta in archivio solo a completamento al 100%. Zero scritture SSD durante il download.  \nLa capacità viene verificata in modo atomico — se due torrent vengono accettati quasi contemporaneamente, solo uno occupa lo slot RAM; l'altro ricade su disco senza race condition né overflow del `tmpfs`.\n\n### 🫏 La Rinascita di eMule / eD2k\nCerchi quel documentario oscuro del 2003 che nessuno seedca più? EXTTO si integra con `amuled` e cade automaticamente sulla rete eD2k quando i torrent falliscono. Nessun altro media manager lo fa.\n\n### 📚 Fumetti — Supporto Nativo\nWeekly pack, numeri singoli, monitoraggio automatico. Download direttamente da GetComics via Mega.nz o torrent. Senza plugin, senza workaround.\n\n### 🏆 Upgrade Qualità Intelligente — Completamente Configurabile\nEXTTO valuta ogni release (4K, HDR10, Dolby Vision, DTS-X, codec, sorgente...) e sostituisce automaticamente il file esistente quando trova una versione migliore.  \nOgni peso — risoluzione, sorgente, codec, audio, gruppi, bonus DV/REAL/PROPER — è modificabile direttamente dalla **Web UI** senza toccare alcun file di configurazione. Niente YAML, niente riavvio.\n\n### 🎛️ Web UI Moderna — Accordion, Tab e Dirty Tracking\nLa pagina impostazioni è organizzata in sezioni accordion collassabili (stato salvato in localStorage) con un tab dedicato **Integrazioni** per Trakt e Jellyfin. Un pallino rosso compare su ogni tab con modifiche non salvate, così non perdi mai le impostazioni per errore.\n\n### 🔇 Filtro Categorie (oltre la Blacklist)\nDue livelli di filtraggio: la **Blacklist** blocca al parsing ma archivia comunque l'item per deduplicazione. Il **Filtro Categorie** blocca *e* impedisce l'archiviazione — quegli item non esistono per EXTTO. Perfetto per ignorare definitivamente cam-rip, qualità CAM o interi release group.\n\n### 🌐 Integrazione Browser\nClicca su un link `magnet:` o su un file `.torrent` ovunque nel browser — EXTTO lo riceve istantaneamente. Setup unico via uno script generato direttamente dalla Web UI, già configurato con l'URL del tuo server.\n\n### 🔔 Notifiche Webhook\nCollega EXTTO a qualsiasi servizio esterno — **ntfy, Gotify, n8n, Home Assistant, Make, Zapier** — con un solo URL.  \nOgni download, upgrade, gap-fill ed evento di sistema invia un POST JSON firmato al tuo endpoint.  \nFirma HMAC-SHA256 opzionale per la verifica sicura. Nessun plugin, nessuna configurazione aggiuntiva.\n\n```\nnotify_webhook_url    = https://ntfy.sh/mio-canale\nnotify_webhook_secret = segreto     # opzionale, firma i payload\n```\n\n### 🔍 Gap Fill Intelligente con Cooldown 24 h\nIl gap filler è diventato più intelligente. Per ogni episodio mancante tiene traccia dell'ultima volta che è stata eseguita una ricerca live su un indexer.  \nL'archivio locale viene sempre interrogato (è gratis), ma le query a Jackett e ai motori web vengono eseguite **al massimo una volta ogni 24 ore** per episodio — fine allo spam degli indexer ad ogni ciclo di 6 ore.  \nUn parametro `gap_fill_max_per_series` configurabile impedisce a una serie con molti buchi di monopolizzare tutti gli slot di ricerca.\n\n### 🏷️ Matching RSS con Alias\nQuando un feed RSS italiano pubblica una release con un titolo alternativo (es. *\"Agenti di S.H.I.E.L.D.\"* invece del nome configurato *\"Agents of S.H.I.E.L.D.\"*), EXTTO ora la riconosce automaticamente.  \nGli alias definiti nella configurazione della serie vengono controllati in ogni fase — parsing RSS, deduplicazione, tracciamento feed-match e query di gap-fill.\n\n### 💾 Backup Automatico e Invio su Telegram\nEXTTO si fa il backup da solo. Gli archivi ruotano con schema **GFS** (giornaliero / settimanale / mensile / annuale), vengono inviati direttamente nella tua **chat Telegram** e possono essere caricati opzionalmente su FTP o Dropbox — tutto configurabile dalla Web UI, senza script esterni.\n\n### 🏷️ Regole di Esclusione per Singolo Titolo\nOltre alla blacklist globale, ogni serie o film può avere la propria **lista di parole da escludere**. Utile per separare un sequel dall'originale, bloccare un release group problematico solo per quel titolo, o saltare le versioni extended di un singolo film — senza influenzare il resto.\n\n### 📊 Tracciamento Sorgente dei Download\nOgni torrent accettato da EXTTO viene etichettato con la **sorgente di provenienza** (Jackett, ThePirateBay, Knaben, Feed RSS, Timeframe, Fumetti…). Visibile nella lista download, utile per risalire retrospettivamente all'origine di un file.\n\n### 🔒 Privacy Prima di Tutto\nVPN killswitch che vincola il traffico a `tun0`/`wg0`. Aggiornamento automatico delle IP blocklist. I tuoi download restano privati.\n\n### 🌍 Completamente Multilingua\nWeb UI disponibile in **Italiano, Inglese, Tedesco, Francese, Spagnolo**. Traduzioni gestite via file YAML — facile da estendere.\n\n---\n\n## 📦 Installazione\n\n```bash\ngit clone https://github.com/buzzqw/extto.git\ncd extto\nchmod +x setup.sh start.sh\n./setup.sh\n```\n\n```bash\n./setup.sh --upgrade    # forza l'aggiornamento dei pacchetti Python\n```\n\n---\n\n## ▶️ Avvio\n\n**Come servizio systemd (raccomandato):**\n```bash\nsudo systemctl enable extto.service\nsudo systemctl start extto.service\n```\n\n**Manuale:**\n```bash\n./start.sh              # motore + Web UI sulla porta 5000\n./start.sh --tui        # motore + interfaccia da Terminale a schermo intero\n```\n\nApri **`http://localhost:5000`** nel browser.\n\n---\n\n## 🎬 Configurazione Film: Come Evitare Match Errati\n\nOttenere il film giusto — e non uno con un titolo simile — dipende da come lo configuri.\n\n\u003e **Suggerimento — parole di esclusione per film:** il campo `Escludi` accetta parole separate da virgola che NON devono comparire nel titolo della release. Usalo per separare sequel (`romulus`), evitare le versioni director's cut, o bloccare un release group che funziona male solo per quel titolo.\n\n| Campo | Raccomandazione |\n|-------|----------------|\n| **Nome** | Usa almeno 2 parole caratterizzanti del titolo |\n| **Anno** | **Impostalo sempre.** Senza anno vince il primo match per nome — pericoloso per titoli corti o generici |\n| **Escludi** | Parole separate da virgola che NON devono comparire nel titolo: es. `extended,directors cut,romulus` — usalo per separare un sequel dall'originale |\n\n**Come funziona il matching:** EXTTO verifica che ogni parola del nome configurato sia presente (word-boundary) nel titolo RSS completo. Se l'anno è impostato, l'anno della release deve corrispondere ±1. La lista `Escludi` veta il match se una di quelle parole compare.\n\n**Config sicura:**\n```\nNome:    Il Gladiatore II\nAnno:    2024\nEscludi: (vuoto)\n```\n\n**Config rischiosa (cattura qualsiasi release con \"alien\"):**\n```\nNome:    Alien\nAnno:    (vuoto)\n```\n\n---\n\n## ❤️ Supporta il Progetto\n\nEXTTO è software libero e open-source, costruito interamente nel tempo libero.  \nSe ti fa risparmiare ore di configurazione, RAM, o usura del disco — considera di offrire un caffè all'autore.\n\nOgni donazione finanzia direttamente nuove funzionalità, correzioni di bug e la sopravvivenza del progetto.\n\n\u003cdiv align=\"center\"\u003e\n\n[![Dona con PayPal](https://img.shields.io/badge/Dona-PayPal-00457C?style=for-the-badge\u0026logo=paypal)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=azanzani@gmail.com\u0026item_name=Support+EXTTO+Project)\n\n*Grazie. Sul serio.*\n\n\u003c/div\u003e\n\n---\n\n## ⚖️ Uso Lecito \u0026 Responsabilità\n\nEXTTO è uno **strumento di automazione dei download**. Non ospita, non indicizza e non distribuisce alcun contenuto protetto da copyright.\n\n- EXTTO si connette agli **indexer che configuri tu** (Jackett, Prowlarr, feed RSS pubblici). Non ha un indice integrato.\n- Ciò che scarichi è **interamente sotto la tua responsabilità**. Usa EXTTO solo per contenuti che hai il diritto di accedere — dominio pubblico, licenze Creative Commons, o media di tua proprietà.\n- Le integrazioni eMule/eD2k e torrent sono tecnologie neutrali. EXTTO non incoraggia né facilita la pirateria.\n- Questo progetto è rilasciato sotto licenza open-source **EUPL 1.2**.\n\n\u003e *\"Con grande automazione viene grande responsabilità.\"*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuzzqw%2Fextto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbuzzqw%2Fextto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuzzqw%2Fextto/lists"}