117 lines
5.7 KiB
Markdown
117 lines
5.7 KiB
Markdown
---
|
|
title: Inkheart
|
|
created: 2026-06-07
|
|
updated: 2026-06-07
|
|
type: app
|
|
tags: [catalogue, books, pdf, reader, rust, svelte, bibliotheque]
|
|
confidence: medium
|
|
contested: false
|
|
sources: [https://selfh.st/apps/?tag=books, https://gitlab.com/Nystik/inkheart]
|
|
---
|
|
|
|
# 📖 Inkheart
|
|
|
|
> **Lecteur et indexeur PDF minimaliste auto-hébergé** : parcourez, recherchez en plein texte, annotez et partagez vos PDFs en deep-link direct vers une page précise.
|
|
|
|
| Métadonnée | Valeur |
|
|
| :--- | :--- |
|
|
| **Site web** | [gitlab.com/Nystik/inkheart](https://gitlab.com/Nystik/inkheart) |
|
|
| **GitLab** | [Nystik/inkheart](https://gitlab.com/Nystik/inkheart) |
|
|
| **License** | MIT |
|
|
| **Langage** | Rust (backend), Svelte (frontend), PDF.js |
|
|
| **Étoiles** | ~150 ⭐ (GitLab) |
|
|
| **Dernière MAJ** | 2026-05 (v1.3.0) |
|
|
| **Catégorie** | [[cat-books]] |
|
|
|
|
## Description
|
|
|
|
Inkheart est né d'un constat simple : la plupart des lecteurs PDF auto-hébergeables (Paperless-ngx, Calibre, etc.) sont **trop lourds** quand on veut juste **browsing + lecture + lien direct vers une page**. Le mainteneur Nystik voulait pouvoir **lier une page précise d'un PDF depuis Notion** et lire des PDF trop gros pour Google Drive — Inkheart est exactement ce petit outil chirurgical.
|
|
|
|
L'indexation est **filesystem-based** (pas de base de données à gérer) avec un index full-text gardé en mémoire et persisté sur disque. Le rendu utilise **PDF.js** côté navigateur, ce qui garantit la compatibilité avec n'importe quel viewer moderne. Le tout en **Rust pour le backend** (performances, binaire unique) et **Svelte pour le frontend** (SPA légère).
|
|
|
|
Inkheart supporte les **collections** (regroupements自定义), les **pinned folders** (raccourcis sidebar), la **recherche full-text** sur l'ensemble du contenu extrait de chaque PDF, le **deep-linking** vers une page précise (`/pdf/123#page=42`), le **sauvegarde de progression** automatique par fichier, et un **mode de visualisation configurable** (page simple, spreads pairs, spreads impairs). Authentification optionnelle via Firebase Auth avec whitelist.
|
|
|
|
**Points forts** : binaire Rust très rapide, image Docker multi-arch (amd64 + arm64 pour Raspberry Pi), lecteur PDF.js fluide, recherche full-text, deep-linking utile, configuration TOML simple, telemetry Plausible désactivable.
|
|
|
|
**Points faibles** : **PDF uniquement** (pas d'ePub, pas de Mobi), index full-text **en mémoire** donc à éviter au-delà de quelques milliers de PDFs, pas de métadonnées stockées (tout est filesystem), **bus factor 1** (un seul mainteneur), interface jeune.
|
|
|
|
## Installation
|
|
|
|
### Via Docker (recommandé)
|
|
|
|
Image officielle `nobbe/inkheart` sur Docker Hub, multi-architecture (x86_64 + aarch64).
|
|
|
|
```yaml
|
|
# docker-compose.yml
|
|
services:
|
|
inkheart:
|
|
image: nobbe/inkheart:latest
|
|
container_name: inkheart
|
|
restart: unless-stopped
|
|
network_mode: bridge
|
|
ports:
|
|
- "8080:8080"
|
|
volumes:
|
|
- /chemin/vers/pdfs:/media
|
|
- ./covers:/covers
|
|
- ./thumbnails:/thumbnails
|
|
- ./config:/config
|
|
environment:
|
|
- MEDIA_DIR=/media
|
|
- CONFIG_PATH=/config/inkheart.toml
|
|
- BIND_ADDR=0.0.0.0
|
|
- TELEMETRY_ENABLED=false
|
|
```
|
|
|
|
> Créez les répertoires `covers/`, `thumbnails/` et `config/` **avant** le premier démarrage.
|
|
|
|
### Installation manuelle
|
|
|
|
Voir `https://gitlab.com/Nystik/inkheart` : cloner, `cargo build --release --no-default-features` (sans telemetry), configurer `inkheart.toml`, lancer le binaire.
|
|
|
|
## Configuration
|
|
|
|
1. Monter vos PDFs dans `/media`.
|
|
2. Démarrer le conteneur ; le **premier scan** extrait le texte de chaque page (peut être long sur de grosses bibliothèques).
|
|
3. Accéder à `http://IP:8080`, créer la première collection.
|
|
4. Activer l'auth Firebase si vous voulez restreindre l'accès (whitelist par email).
|
|
5. Pour servir derrière un sous-chemin : `BASE_PATH=/pdfs` + reverse-proxy Nginx/Caddy.
|
|
6. Désactiver la télémétrie Plausible via `TELEMETRY_ENABLED=false` (sinon un ping anonymisé par page d'index).
|
|
|
|
## Alternatives
|
|
|
|
### Open source
|
|
- [[app-stump]] — Comics/manga/LN, plus large mais aussi plus lourd
|
|
- **Paperless-ngx** — GED complète (OCR, tags, correspondants) — surdimensionné pour juste lire
|
|
- **Calibre** — Le monstre, EPUB/MOBI/PDF mais stack Python lourde
|
|
- **Hammond** — Lecteur PDF auto-hébergé, plus minimal qu'Inkheart
|
|
- **Docspell** — Idem Paperless, plus orienté archivage
|
|
|
|
### Propriétaires
|
|
- **Google Drive** — Viewer PDF intégré, pas de deep-link public stable
|
|
- **Readwise Reader** — Outil de lecture highlight multi-formats, freemium, pas self-hostable
|
|
- **Zotero** — Gestionnaire biblio avec lecteur PDF intégré, freemium
|
|
|
|
## Sécurité
|
|
|
|
- ⚠️ **Bus factor 1** : un seul mainteneur (Nystik), pas de roadmap publique large
|
|
- ✅ **Auth optionnelle** via Firebase Auth (whitelist)
|
|
- ⚠️ **Telemetry Plausible activée par défaut** — bien lire ce qui est collecté (compteur d'installations, version, taille de biblio bucketisée, pays) ; désactiver via env
|
|
- ✅ Pas d'auth native = à mettre derrière un [[app-caddy]] + basic auth ou [[app-authentik]] si exposé
|
|
- ⚠️ Index full-text **en RAM** : prévoir de la RAM proportionnelle à la taille de la bibliothèque
|
|
- ⚠️ PDF peut contenir du JavaScript embarqué : PDF.js est sandboxé mais restez prudent
|
|
|
|
## Ressources
|
|
|
|
- [GitLab Nystik/inkheart](https://gitlab.com/Nystik/inkheart)
|
|
- [Docker Hub nobbe/inkheart](https://hub.docker.com/r/nobbe/inkheart)
|
|
- [selfh.st Books](https://selfh.st/apps/?tag=books)
|
|
|
|
## Pages Liées
|
|
|
|
- [[cat-books]] — Catégorie Books
|
|
- [[app-stump]] — Lecteur comics/manga OPDS plus large
|
|
- [[app-calibre]] — Géant EPUB/PDF, plus complet mais plus lourd
|
|
- [[recettes-docker-compose]] — Templates Docker
|
|
- [[app-caddy]] — Reverse-proxy HTTPS recommandé
|