# πŸ“š Bookish **Convertitore e reader di ebook self-hostato** β€” Flask, Pandoc, WeasyPrint, SQLite. Carica un ebook in qualsiasi formato, convertilo in un altro, o leggilo direttamente nel browser con un reader completo. I segnalibri e la posizione di lettura sono persistenti su database SQLite, identificati univocamente dal contenuto del file (SHA256). --- ## FunzionalitΓ  ### πŸ”„ Convertitore | Formato | Input | Output | |---------|-------|--------| | EPUB | βœ… | βœ… | | PDF | βœ… | βœ… | | DOCX | βœ… | βœ… | | Markdown | βœ… | βœ… | | Testo (TXT) | βœ… | βœ… | | HTML | βœ… | βœ… | | FB2 | βœ… | βœ… | | MOBI | βœ… | ❌ | | LaTeX | βœ… | βœ… | - Drag & drop upload - Barra progresso in tempo reale (SSE) - Download automatico del convertito ### πŸ“– Reader - **EPUB** via [epub.js](https://github.com/futurepress/epub.js) - **PDF** via [pdf.js](https://mozilla.github.io/pdf.js/) - **Testo/Markdown/DOCX/FB2/HTML** renderizzati come HTML Caratteristiche reader: - Zoom e regolazione font - Temi: chiaro, scuro, seppia - Ricerca full-text con risultati navigabili - Indice navigabile (TOC) per EPUB e PDF - **Segnalibri** persistenti su SQLite con sync server + localStorage - **Salvataggio posizione** lettura (server + localStorage) - **Slider larghezza** area di lettura (40–100%) - **Aiuto contestuale** con scorciatoie da tastiera - Pulsante πŸ”– con feedback visivo (toast + pulse) - Navigazione tastiera (← β†’) e schermo intero - Temi: chiaro, scuro, seppia ### βš™οΈ Motore di conversione - **Pandoc** come motore primario (decine di formati) - **WeasyPrint** per PDF con layout avanzato - **python-docx** per DOCX con stili - **BeautifulSoup** per post-processing HTML/tabelle ### πŸ—„οΈ Archiviazione persistente - **SQLite** (`bookish.db`) per segnalibri e posizioni di lettura - **Content Hash** (SHA256) come identificatore univoco del libro - **localStorage** come fallback offline - Stessi segnalibri anche su PC diverso (stessa LAN) --- ## Requisiti - Python 3.10+ - Pandoc (incluso via pypandoc-binary) - Librerie di sistema per WeasyPrint (libpango, libcairo) ## Installazione ```bash git clone http://192.168.0.183:8085/truetype/bookish.git cd bookish python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` ## Avvio ```bash ./run.sh # oppure su porta specifica: ./run.sh 8080 ``` L'app cerca automaticamente una porta libera a partire da quella specificata. Il database SQLite (`bookish.db`) viene creato automaticamente al primo avvio. Apri il browser su `http://localhost:5000` (o la porta assegnata). --- ## Architettura ``` bookish/ β”œβ”€β”€ app.py # Entry point β”œβ”€β”€ config.py # Configurazioni β”œβ”€β”€ requirements.txt β”œβ”€β”€ run.sh β”œβ”€β”€ bookish.db # SQLite (creato al primo avvio) β”œβ”€β”€ bookish/ β”‚ β”œβ”€β”€ __init__.py # Flask factory + init DB β”‚ β”œβ”€β”€ routes/ β”‚ β”‚ β”œβ”€β”€ convert.py # Upload, SSE progress, download β”‚ β”‚ β”œβ”€β”€ reader.py # Reader view + content_hash β”‚ β”‚ └── api.py # API REST bookmarks + positions β”‚ β”œβ”€β”€ services/ β”‚ β”‚ β”œβ”€β”€ converter.py # Conversione Pandoc + pipeline β”‚ β”‚ β”œβ”€β”€ sse_manager.py # SSE progress manager β”‚ β”‚ β”œβ”€β”€ formatter.py # PDF/HTML post-processing β”‚ β”‚ └── database.py # SQLite manager β”‚ β”œβ”€β”€ templates/ β”‚ β”‚ β”œβ”€β”€ base.html # Layout base β”‚ β”‚ β”œβ”€β”€ index.html # Convertitore β”‚ β”‚ └── reader.html # Reader β”‚ └── static/ β”‚ β”œβ”€β”€ css/style.css β”‚ β”œβ”€β”€ js/main.js # Frontend convertitore β”‚ β”œβ”€β”€ js/reader.js # Frontend reader (oltre 800 righe) β”‚ └── logo.svg β”œβ”€β”€ uploads/ # File caricati (temporanei) β”œβ”€β”€ converted/ # File convertiti (temporanei) └── docs/ # Documentazione ``` Vedi [docs/architecture.md](docs/architecture.md) per dettagli. --- ## API Endpoints | Metodo | Path | Descrizione | |--------|------|-------------| | POST | `/upload` | Carica file e avvia conversione | | GET | `/progress/` | SSE stream progresso | | GET | `/download/` | Scarica file convertito | | GET | `/formats?input=` | Formati disponibili per input | | GET | `/reader` | Pagina reader | | GET | `/reader/` | Reader per file specifico | | GET | `/reader/serve/` | Serve il file al reader | | GET | `/reader/formats` | Formati supportati dal reader | | GET | `/api/bookmarks/` | Segnalibri di un libro | | POST | `/api/bookmarks` | Aggiunge segnalibro | | DELETE | `/api/bookmarks/` | Elimina segnalibro | | GET | `/api/position/` | Posizione di lettura | | PUT | `/api/position/` | Salva posizione di lettura | --- ## Deployment Adatto per Proxmox LXC, Docker o VM leggera. Vedi [docs/deploy.md](docs/deploy.md). --- ## Licenza MIT