Features
Tankōbon is a library manager and reader for digital comics, BD and manga. It opens CBZ, CBR and PDF files. The user interface is in English and French (see Language); labels below are quoted as they appear in the French interface.
The mouse pointer turns into a hand over everything that can be clicked (buttons, links, menus, checkboxes and their labels), and keeps the usual arrow over disabled controls.
Home
"Accueil" is the page shown when the app starts, first entry of the sidebar. Its title is "Bienvenue" followed by your nickname, and every block has the same heading and the same covers. It shows a "Reprendre la lecture" block with the covers of the last five books you opened and started but did not finish (past the first page, last page not reached, no "Lu" tag), most recently opened first, each with its title and page ("Page 4 / 10"). Clicking one opens it in the reader at its saved page. A "Retirer de cette liste" button shows over the cover's corner when you hover it: after a confirmation, it resets the book's reading to 0 % so it leaves the block (a book you had already finished keeps its "Lu" mark). The block is hidden when there is nothing to resume. Below it, a "Derniers ajouts" block shows the 5 books most recently added to the library (by date added, newest first), each as its cover and title; clicking one opens it in the reader. An empty library shows a short message instead. A "À lire" block suggests five books drawn at random among those not finished yet (a book already started counts; one at its last page or tagged Lu doesn't). For a book that belongs to a series, only the first unread volume of the series is a candidate: volume 1, unless the previous volumes are already read, in which case the next one; shown as covers like the other blocks; clicking a book opens it in the reader and the shuffle icon beside the title ("Tirer d'autres livres") draws a new selection. The draw is made once the library is loaded and doesn't change when a book is edited elsewhere. A "Une deuxième chance" block lists the five lowest-rated books (rated 1 or 2 stars, worst first, then by title; unrated books are not listed) as covers like the other blocks, each with its stars; the shuffle icon beside the title draws another selection among all the poorly rated books; click a cover to open the book, the stars can be changed right there and a book rated 3 or more leaves the list. A "Redécouvrez vos favoris" block shows the 5 best-rated books of the library (highest rating first, and among equal ratings the one opened longest ago first) as covers with their title and stars; clicking one opens it in the reader. The shuffle icon beside the title draws another selection among the books rated 4 or more (the best-rated ones when there are too few). It is hidden while no book is rated. More blocks will be added to the page. "Afficher la page d'accueil" (Paramètres › Affichage, "Pages") turns the page off: the "Accueil" entry leaves the sidebar and the app starts on the library. Paramètres › Accueil manages the blocks: the blocks are listed in a table (one column per option) where each block has a toggle to show or hide it, a number of books to show (3 to 30, 5 by default) up/down buttons ("Monter"/"Descendre") to set the order, and an "i" icon whose hover text explains what the block shows. By default a block is a single row of covers in a view of fixed size: when the books don't all fit, arrows at the edges scroll the row. The "Affichage" choice of each block can switch it to "Retour à la ligne", where the covers flow over as many lines as the window width needs. "Masquer si vide" (a toggle) hides a block while it has nothing to show; off, the block stays with a short message instead. It is on by default for "Reprendre la lecture" and "Redécouvrez vos favoris" (which were always hidden when empty) and off for the other blocks. The choices are part of the exported settings.
Library
- Settings menu: the title of each settings page names its section ("Paramètres › Affichage"). Paramètres is split in two groups in the sidebar. "Utilisateur" holds what is personal to each user: Accueil, Affichage, Lecteur (reading) and Bibliothèque (their folders and organized folder) and Métadonnées (lookup sources and API keys). "Bibliothèque partagée" holds what is common to everyone: Organisation (tree and file name, resynchronization, duplicates) and Données. "À propos" is not a setting: it has its own entry in the sidebar.
- Page sizes: once comics are added (file, folder, resynchronization, JSON import, or a book opened for the first time), the app measures their pages in the background, one book at a time, and shows each book's average page size ("Pages ~1 200 × 1 800 px", the simple average of the pages' widths and heights) on its row in the library. A bar at the bottom of the window shows "Mesure de la taille des pages…" with a progress gauge while the measure runs; the library stays usable meanwhile. Pages whose size can't be read are left out of the average (a PDF's pages are measured at the size they are rendered at). A book that can't be measured shows no size and is tried again at the next start.
- Adding comics: "Ajouter un fichier" adds one comic to the library without opening it (a message says whether it was added or was already there); "Ajouter un dossier…" adds every CBZ/CBR/PDF found in a folder and its subfolders, with a progress bar, which stays on screen at the end of the scan until you close it with its cross. Comics already in the library are skipped, and a file that can't be opened is counted as failed without stopping the scan. The folder dialog opens in the folder you added last time (if it still exists).
- Resynchronizing (the folders are listed in Paramètres › Bibliothèque, a personal page; the action is in Paramètres › Organisation, with the library's other maintenance actions): the folders added with "Ajouter un dossier…" are remembered for the user who added them and listed in Paramètres › Bibliothèque (each can be forgotten, which keeps its comics in the library and only stops this user's resynchronization from walking it; the other users keep theirs). "Resynchroniser maintenant" (Paramètres › Organisation) walks them again: new comics are added and comics whose file no longer exists are removed from the library, with their progress, rating, tags and reading-list places (the comic files are never touched; only missing
.nfosidecars and cover thumbnails are written, see below). Comics that aren't under one of these folders (a file added on its own) are checked one by one: they are removed when their file is gone but the directory that held it still exists (if that directory is unreadable too, an unplugged drive for instance, they stay). A folder that can't be read, an unplugged drive for instance, is skipped and reported instead of emptied. When some files could not be opened, the result message counts them and "Afficher les fichiers illisibles…" opens a pop-up listing each file's path with the reason it failed (the first 200 only, the count stays exact); the list disappears with the next resynchronization. "Resynchroniser la bibliothèque au démarrage" (off by default, personal) does the same in the background at every start, for the user the app opens on. The date of the last resynchronization (personal too) is shown next to the button. The bottom of the sidebar shows the state of the synchronization on every page: a progress gauge ("Synchronisation… 12 / 340") while a resynchronization, a folder scan or an organization runs, wherever it was started (including at launch), otherwise the date of the last resynchronization; the collapsed sidebar only shows a spinning icon while one runs. The folder list isn't part of the JSON export, and clearing the library keeps it. - One operation on the files at a time: adding a file or a folder, a resynchronization, an organization of the library and the cleaning of the books don't run together. When one is already running, the new one is refused with a message and can be started again once the first is done (an organization offered after an addition stays on offer).
- Cloud drives with files on demand (OneDrive on Windows): a resynchronization only checks that known files still exist, which doesn't make the drive download them. The background measure of page sizes and the covers shown in the library skip a comic that is only in the cloud (its cover appears if it was already cached); both happen once it has been opened, which is what downloads it.
- Opening the library from another computer or path: a comic inside one of these folders (or the organized folder) is recorded relative to its folder, so a database kept on a shared, network or cloud drive opens wherever the folders are mounted. The folder's location on each computer is kept on that computer only (
library-roots.jsonin the user data directory). On a computer where a folder isn't found, Paramètres › Bibliothèque lists it under "Dossiers à localiser": "Localiser ce dossier…" says where it is, and its comics open again. Comics added on their own, outside every folder, keep their full path. Forgetting a folder keeps its comics (and the way they are recorded). The JSON export still names comics by full path. - Information file (
.nfo): a text file named like the comic with the extension.nfo(Tome 1.cbzandTome 1.nfo, in the same folder) fills in the book's information when the comic is added to the library (a file, a folder or a resynchronization). It is XML:<title>,<series>,<volume>(or<number>),<releasedate>(or<premiered>,<year>;AAAA,AAAA-MMorAAAA-MM-JJ),<language>(a code such asfr) and one<author role="writer">Prénom Nom</author>per person (roles: writer, artist, colorist, inker, letterer, cover; no or an unknown role gives "Auteur";<writer>or<artist>elements work too). A title read there is kept like one typed by hand. An.nfowithout a comic of the same name is ignored, as is one beside a comic already in the library (use the edit form for those). The file is limited to 256 KiB, its values are cleaned and cut to a sensible length, at most 50 authors are read, and an invalid field (an impossible date, say) is skipped without stopping the others. The ISBN isn't read. Conversely, unless "Écrire un fichier d'informations (.nfo) à côté de chaque BD" (Paramètres › Organisation, shared, checked by default) is unchecked, each resynchronization writes the missing sidecars: a comic inside one of the library's folders that has no.nfogets one, written from its information in the library (title, series, volume, date, language, authors) in the same format; an existing.nfois never overwritten, a comic added on its own (outside the folders) gets none, and a folder that can't be written to is skipped silently. The number of files created is shown in the result message of Paramètres › Organisation, and the progress bar follows the writing. - Format: each row's detail line shows the file's format (CBZ, CBR or PDF) after the page counter, read from the file extension.
- Organizing the library (Paramètres › Organisation, shared by every user; the organized folder is chosen by each user in Paramètres › Bibliothèque › "Dossier organisé"): off by default. The "Activer la bibliothèque organisée" box of Paramètres › Bibliothèque turns it on; while it is unchecked, the "Dossier organisé" block and the whole Organisation page (including the resynchronization, duplicates, cleaning and conversion actions) are hidden. Once an organized folder is chosen ("Choisir…"), the comics you add (a file, a folder, or new ones found by a resynchronization) can be moved into it. "Arborescence" picks how the folder is laid out. By default ("Un sous-dossier par BD"), each comic goes in its own subfolder named after the original file followed by its identifier, for example
Astérix T01 (3f2a…)/Astérix T01.cbz(a very long name is cut to fit the system's limit). Otherwise, choose one to three levels among "Première lettre", "Année", "Auteur", "Série" and "Album": the file goes in the last level's folder, for exampleA/Astérix/Astérix le Gaulois.cbzwith first letter then series, and the page shows an example. The first letter and the year can only be the first level, and the first letter needs a second level: it is that level's first letter without its accent (É→E), its first digit, or#for any other character. The author is the first writer credited (else the first person credited), as "Last name First name"; a comic with no year or no author goes into an "Inconnu" folder, one with no series into a folder named after its title. "Nom des fichiers" renames the files as they are moved, from a template of fields:{series},{volume},{title},{year}and{author}, for example{series} - T{volume} - {title}givesTintin - T20 - Tintin au Tibet.cbz, and the page shows the name it gives a sample album.{volume:2}pads the volume with zeros to that many digits (T{volume:2}givesT07for the volume 7; widths 1 to 4, on{volume}only): only a whole number is padded, volumes such asHS,12.1or1/2stay as they are, and a padded name read back by the lookup dialog's file name rule gives the volume without its zeros. Left empty (the default), files keep their original name; the extension is always kept. A comic without a fiche (no series, volume, release date, language or author) keeps its original name too, whatever the template, rather than being named "Inconnu - TInconnu". A missing series, volume, year or author gives "Inconnu", and the characters a file name can't hold become_; a/, a\or an unknown field ({serie}) is refused, with a message, and nothing is saved until it is fixed. In the default layout, the comic's subfolder takes the new name too. When two comics of the same name end up in the same folder, the second one's file is renamed with its identifier, for exampleTome 1 (3f2a…).cbz. Changing the tree or the file name moves nothing by itself: "Organiser toute la bibliothèque…" moves and renames the comics to their new place, as well as those whose details (series, volume, title, year, credits) changed since they were moved, and deletes the folders it leaves empty. A comic's cover and.nfofile move and are renamed with it. "Demander s'il faut les déplacer" asks after each addition from the library page or a manual resynchronization (a resynchronization at startup never asks); "Toujours les déplacer" moves them without asking. The progress, rating, tags, details and reading lists of a moved comic are kept. The organized folder is added to the resynchronized folders, and a comic dropped there by hand is moved into its own subfolder at the next resynchronization (whatever the mode, except off). Comics already in the library aren't moved when the option is turned on: "Organiser toute la bibliothèque…" does it on demand, after a confirmation giving the number of comics not in their place yet, with a progress bar (it can't run during a resynchronization, nor the other way round). The folders the comics leave are not deleted (except the subfolders of the organized folder left empty). A comic that can't be moved (file in use, drive unplugged) stays where it was, still in the library, and is counted as "could not be moved". - Ignoring leading articles (Paramètres › Organisation, shared by every user, off by default): "Ignorer les articles en début de nom" files a name under its first real word. With it on, an article at the start of a series or album name goes to the end in parentheses: "Le vent du nord" becomes "Vent du nord (Le)", "L'été indien" becomes "Été indien (L')", and "The Walking Dead" "Walking Dead (The)". It applies to the series and album folders of the tree, to the letter folder ("Le vent du nord" goes under V) and to the
{series}and{title}fields of the file name template; the author and year folders and the original file names (no template) are untouched. "Articles à ignorer" is the list it uses, editable and separated by commas (default: le, la, les, l', un, une, des, d', the, a, an); an article ending with an apostrophe is attached to the next word, the others must be followed by a space, matching ignores case. Like the tree, changing it moves nothing by itself: "Organiser toute la bibliothèque…" applies it to the books already organized. - Cleaning the books (Paramètres › Organisation, "Nettoyer les livres…", shared by every user): removes the files that are not images (
ComicInfo.xml,Thumbs.db, text files…) from the CBZ archives of the whole library, in two steps. A first pass only analyzes and lists the kinds of files found by extension, with the number of books and the size they take; you untick the kinds to keep, then confirm. An archive is rewritten beside the original and replaces it only once the new one has been checked (same pages), so a failure leaves the book as it was. Only CBZ files can be rewritten (CBR and PDF, and cloud files not downloaded, are left out and counted). The action used to be an eraser button in the library toolbar, where it could also work on the selected books only; it now always works on the whole library. - Converting CBR to CBZ (Paramètres › Organisation, "Convertir les CBR en CBZ…", shared by every user): a CBR (RAR) can't be rewritten, so it can't be cleaned or otherwise edited; this writes each CBR of the organized folder as a CBZ in the same folder (same name,
(2)… if taken), after a confirmation giving the number of books. The CBZ is checked (same pages, same number of files) before it exists; the book keeps its progress, rating, tags, details and reading lists, and its cover and.nfofollow. The original CBR is moved to a.deletedByTankobonfolder at the root of the organized folder (not walked by the library: it is never added back). Only the organized folder is concerned (it needs the organization on and its folder reachable), and the action can't run during a resynchronization or another operation on the files. A book that can't be converted stays a CBR, untouched, and is counted as failed. "Vider le dossier .deletedByTankobon…" deletes everything in that folder for good (not to the trash), after a confirmation giving the number of files and their size. - Cleaning the folders (Paramètres › Organisation, "Nettoyer les dossiers…", shared by every user): moves the orphan folders of the organized folder to its
.deletedByTankobonfolder (renamed(2)… if the name is taken), after a confirmation giving their number. A folder is orphan when it holds no book (CBZ, CBR or PDF) at any depth, only.nfofiles, cover images or other orphan folders (an empty folder counts); a folder holding any other file is kept. Nothing is deleted: "Vider le dossier .deletedByTankobon…" does that. The organized folder itself is never moved, and only it is walked: the folders books are added from are untouched. It needs the organization on and its folder reachable, and can't run during a resynchronization or another operation on the files. - Damaged files: comics are read in a separate process, so a corrupted or booby-trapped file (a PDF with an absurdly large page, say) can at worst fail to open, show an "unreadable file" error or be counted as failed during a folder scan; the app itself keeps running. If the reader's process stops while a book is open, reopen the book.
- Covers: each comic is shown with a thumbnail of its first page; clicking it opens the comic. Thumbnails are made when a comic is added or opened, and kept on disk so the library doesn't reopen every file to show them. The thumbnail is a small compressed image saved next to the comic, like the
.nfo:Tome 1.cbzgetsTome 1.cover.webpin the same folder. It follows the file when the library organization moves it, and a library folder shared between machines (a synced drive) carries its covers, so another machine doesn't have to open every comic. "Garder chaque vignette à côté de sa BD" (Paramètres › Organisation, shared, checked by default) controls this: unchecked, new thumbnails are extracted into the application's local cache only and nothing is written beside the comics (covers already beside them are still used). When the folder can't be written to, the thumbnail is kept in the application's local cache instead, which also serves the covers made before this feature. A comic whose thumbnail is missing gets one the first time the library shows it, and each resynchronization extracts the missing covers of the comics inside the library's folders (the number is shown in the result message of Paramètres › Organisation; a file that is only in the cloud is skipped). On a cloud drive with files on demand, a cover that is only in the cloud isn't downloaded to draw the library. - Large libraries: the library list only draws the comics near the screen, so it stays smooth with tens of thousands of comics, and searching doesn't lag while typing. Every view (library, reading lists, sidebar, settings) shows the same data and is updated as soon as something changes, including after a folder scan, an import or when a comic is opened in the reader.
- File information: for each comic the library shows its page count, the number of files in the archive and its size on disk. They are computed when the comic is opened or scanned, and refreshed each time it is reopened.
- Looking up a book's information (magnifier button on each comic, "Rechercher les infos"): finds the book's series, volume or issue number, title, release date, language and credits (writer, artist, colorist, inker, letterer, cover artist). Nothing is searched when the dialog opens: the user first picks how to look the book up. Search in APIs takes a title or series and a volume. The fields start from the book's own information (its series and volume, else its title) when it has some; when it has none, they show the file name as it is. In both cases a "file name rule" can read the series and volume out of the file name instead. A rule is written like the library's file name template (
{series} - T{volume}, with the{series},{volume},{title},{year}and{author}fields;_counts as a space, case is ignored in the fixed text) and must match the whole name. When the dialog opens, the most recent rule already used that fits the file name is applied at once (the fields are filled in, nothing to pick); if none fits, the latest one is shown in the field. The rules already used (the last 10, most recent first) and the library's file name template are listed under the field: a click puts one in the field, and the cross next to a rule already used forgets it (the library's template has none, it is not stored). The title of the rule block is a button that folds or unfolds it (only the title stays when folded); the choice is remembered for the next lookups. The dialog also has a checkbox per enabled API (Comic Vine, Google Books) to say which to query, and a Bédéthèque checkbox, always there. Ticked, the search finds the series on Bédéthèque by its name, then opens the album of the volume asked for (a numbered volume,HS1,INT01… or the only album of a one-shot) with its authors and release date; if that volume isn't in the series, its albums are listed to pick from. The box starts ticked or not according to Paramètres › Métadonnées › « Rechercher sur Bédéthèque par défaut » (off at first). From a page link reads the link of a book's page on Bédéthèque (https://www.bedetheque.com/BD-….html), BDfugue (product page) or Nautiljon (volume page) and goes straight to the review. The search starts only when the user presses the button, and the "Arrêter" button gives up a search in progress (the requests to the sources are aborted, and closing the dialog does the same). The dialog shows the book's own cover and title at the top (under its file path), so the results can be compared with it when in doubt. Each result shows its cover, date, language, authors and its source as a badge. The user picks the right book, then reviews each proposed change: every field can be accepted or refused, and edited before being applied. When the chosen result has a cover picture, a box "Utiliser cette couverture pour le livre" (unchecked at first) replaces the book's cover with it when applying; if the picture can't be downloaded, the current cover is kept. Authors already on the book are listed with the proposed ones; each can be kept or dropped, renamed, or given another role. BDfugue and Nautiljon pages are read through the standard data they embed (schema.org JSON-LD, Open Graph tags): they give the title, series, volume, cover, release date, language and authors (all with the generic author role). Applying saves the information in the library, rewrites the.nfobeside the comic (replacing the previous one; skipped when the .nfo option above is unchecked) and makes the cover thumbnail if the book has none yet. An accepted title replaces the file name as the book's title, and reopening the file no longer resets it. Looking up several books: with books selected in the library, "Rechercher les infos" in the selection bar opens the same dialog on each book in turn, in screen order, titled with its position ("2/5"). Applying the details (or applying nothing) moves on to the next book; closing the dialog (the cross or "Annuler") stops the series there, the books already saved keeping their details. Once the series is over, finished or stopped, the selection is cleared. - Editing a book by hand (pencil button on each comic, "Modifier la fiche"): the same information can be typed directly, without searching anything: title, series, volume or issue number, release date (
AAAA,AAAA-MMorAAAA-MM-JJ), language (picked from a list) and authors. Authors can be added, removed, renamed or given another role; a single-word pen name goes in the last name. An emptied field is cleared, except the title, which can't be empty. A changed title replaces the file name for good, as with a lookup. A person is shared by every book that credits them, and names are matched regardless of case: changing only the case of a name keeps the person's existing spelling. - Changing a cover ("Modifier la fiche" › "Changer la couverture…"): the cover can be replaced by an image uploaded from a file ("Choisir un fichier…") or by any page of the book ("Choisir une page du livre", which opens the book to read its pages, so it counts as opening it and the pages are picked with the arrows or a page number). The picture is cropped in a frame with the cover's 2:3 proportions: drag it to move it, and use the zoom slider to crop closer. "Utiliser comme couverture" replaces the thumbnail (beside the comic as
<name>.cover.webpwhen sidecar covers are on, otherwise in the local cache, see Covers) in every view at once. A file that isn't a readable image is refused with a message and the current cover is kept. - Editing several books at once: once books are ticked on the library page (see "Adding several books at once"), the selection bar offers "Modifier les fiches". The window lists, for series, volume, release date, language and authors, what the selected books hold now ("Valeurs différentes" when they differ), a box to change that field and the new value. Only the ticked fields are written, the same way on every selected book: an emptied field clears it, and the authors replace each book's whole list. The title is not editable in bulk. The change is saved as one operation for all the books (all or none) and the library updates at once; the selection is then cleared.
- Shown in the library: once filled in, the series, volume, year and language appear under the title, followed by the authors grouped by role.
- Sources (Paramètres › Métadonnées, personal to each user: the API keys are not shared between users): Comic Vine, the reference for US comics, with the roles of each person; it needs a free personal API key, and is skipped without one. Google Books, which covers French BD and manga editions but doesn't tell the writer from the artist (everyone found there is an "Auteur"); an API key is optional, without one requests share an anonymous quota that can run out. Each source can be turned off. Only the search text is sent, and only when the user starts a search. Bédéthèque, the reference for BD and manga in French, has no API: its search reads the site's own pages (three requests at most per search, only when you start one, spaced at least a second apart, and the answers are remembered for 10 minutes so the same series or album isn't asked for twice), and has no key or on/off switch, only the default state of its box in the dialog. An album page can also be read from a pasted link, which needs no setting.
- People: each person credited is stored once (first name, last name, and a nationality field kept for later) and shared by all the books that credit them. A single-word pen name ("Hergé") is stored as a last name.
- Rating and tags: each comic can be rated from 0 to 5 stars (clicking the selected star again clears it) and tagged, with two quick tags ("Lu", "À lire"; "Read", "To read" in English) plus free tags typed in a text field. The quick tags are the same tags whatever the interface language: switching language only changes how they are labelled. Rating and tags are only ever changed by the user: reopening a book never resets them.
- Display modes (four icon buttons in the toolbar, next to the rating filter): "full" shows everything (cover, series, volume, year, language, authors, page counter, format, file information, rating and tag field); "medium" keeps the cover, the title, the series and volume, the page counter and the rating; "compact" shows one line per comic: title, series and volume, with no cover, rating or tags; "grid" shows the covers side by side, as many per line as the window is wide, with the series, title and volume under each (grouping by series, sorting, filters and the selection work as in the other modes, and a series heading takes a line of its own). In the grid, a card is dragged whole onto a reading list, and its tick box and its actions (edit, look up, add to a list, remove) appear when the pointer is over it or it has the focus. The action buttons (open, edit, look up, add to a list, remove) and the drag handle are there in every mode. The choice is remembered between sessions.
- Hovering a title: in the library (rows and grid), a reading list and the reader's header, hovering a book's title shows its name, never the path of its file: "Series — Title" when both are known, the one that is known when only one is, and the file name without its folders when neither is (the duplicates dialog and the edit dialogs still show the path, where it is the point).
- Grouping by series (the stacked-layers button next to the display modes, off by default): the list is grouped by series, each series behind a heading with its name and how many of its books are read ("Lus : 3 / 7"). Series are in alphabetical order, the books without a series last under "Sans série"; within a series, books are sorted by volume (2 before 10, books without a volume after the others), then by title. A series whose name differs only by case or surrounding spaces is the same series. A tick box at the left of the heading selects every book of the series that passes the filters (folded or not), or unselects them when they all are already (half-ticked when only some are), to use with the selection bar. Clicking the rest of the heading folds or unfolds its books (folded series unfold again when the library page is reopened). Search and filters apply inside the groups: a series with no matching book disappears. The choice is remembered between sessions.
- Search and filters are kept: leaving the library page (for the reader, a list, the settings) and coming back finds the search text, the tags and the rating filter as they were left. They are kept until the app is closed, for each user separately.
- Same book in several formats: when the library holds a book as two files of different formats (a CBZ and a PDF, say), the page shows it once, with the line "Formats : CBZ, PDF" under the title and one "Ouvrir CBZ" / "Ouvrir PDF" button per file to open the one you want (in the grid view, one small CBZ / PDF button per file under the title) (a click on the cover or the title opens the first). Two files are the same book when they have the same series and volume, or, without both, the same title (case, accents and surrounding spaces ignored); two files of the same format stay two books. Nothing is merged in the library: each file keeps its own progress, rating and tags, and the details, edit, list and remove buttons act on the file shown. Searching or filtering shows a book through the first of its files that matches.
- Duplicates (Paramètres › Organisation, "Rechercher les doublons…"): lists the books held as two or more files of the same format (same series and volume, or same title, as for the formats above, and in both cases the same title and the same language: a translation, or an edition with another title, is not offered as a duplicate; a book with no language only matches books with none). For each, pick the file to keep (the first by default) or "Tout garder"; the others are removed from the library, with their progress, rating and tags. The tick box "Mettre aussi les fichiers retirés à la corbeille" (off by default) also moves their files, and the covers and
.nfofiles beside them, to the system trash. A file that can't be trashed is reported; its entry is removed anyway. A group left on "Tout garder" when you validate is remembered (a false positive): the next search no longer offers it, unless a file joins the group or you tick "Afficher les groupes déjà gardés" in the dialog. Nothing is removed until "Retirer" is pressed. - Nettoyer les livres (gomme dans la barre d'outils): supprime des archives les fichiers qui ne sont pas des images (
Thumbs.db,.DS_Store, dossiers__MACOSX, fichiers texte,ComicInfo.xml…). L'action porte sur les livres cochés, ou sur toute la bibliothèque si rien n'est coché. Une analyse précède toute suppression et présente une synthèse par type de fichier (extension) : nombre de fichiers, de livres concernés, taille et exemples de noms. Chaque type est coché par défaut ; décochez ceux à conserver, puis « Supprimer N fichiers ». Seuls les fichiers CBZ sont réécrits (les CBR et PDF sont ignorés, comme les fichiers en ligne non téléchargés). L'archive est réécrite à côté puis vérifiée (mêmes pages) avant de remplacer l'original ; en cas d'échec, l'original reste intact. Les fichiers supprimés ne vont pas à la corbeille. - Sorting (the "Trier par" list in the toolbar, before the display modes): by last opening (the default, most recently opened first), by date added, by release date or by title, each in both directions. Books without a release date come last in both directions; titles follow natural order ("Tome 2" before "Tome 10"), ignoring case and accents. Sorting doesn't hide anything, unlike the filters, and applies to what they keep. While the list is grouped by series, the list is greyed out and reads "Par série et par tome": the grouped view has its own order, and the chosen sort comes back when grouping is turned off. The choice is remembered between sessions.
- Search and filters: the toolbar searches titles, file paths (so a folder name finds a whole series), series and author names, ignoring accents and case. Tags can be combined (a comic must carry all selected tags), and the rating filter keeps comics rated at least the chosen number of stars. The "sans fiche" button (file icon, next to the rating filter) keeps only the comics that have no information beyond their title, whether typed by hand or brought by a lookup: no series, volume, release date, language or credits. It is handy to find the comics left to document, and "Réinitialiser" clears it like the other filters.
Reading lists
- Removing a book (trash button on each comic): asks for confirmation first, in an in-app dialog rather than a native window, since the rating, tags, looked-up information, credits and list memberships are lost. The file on disk is left untouched.
- Lists ("Listes de lecture" in the sidebar): named piles of books to read in order, up to 50 books each. The page shows every list with its progress bar (books read out of the total, as a percentage) and the next book to read, with a "Lire" button. A list can be created there, renamed or deleted from its own page; deleting a list never removes its books from the library.
- Adding books: the list button on each comic of the library opens a dialog with one checkbox per list (ticking adds the book at the end, unticking takes it out) and a field to create a new list that the book goes straight into. A full list can't take more books. A comic can also be dragged from the library by the grip (six dots) at the left of its row, which highlights on hover; the rest of the row opens the book. Dropped onto a list of the sidebar, the list is highlighted under the pointer, the book is added at the end, and a short message under the lists confirms it (or says the book was already there, or that the list is full). Dragging over "Listes de lecture" unfolds the lists; there is nothing to drop on while the sidebar is collapsed to icons. Removing a comic from the library also takes it out of its lists.
- Adding several books at once: when the comic has a series and the library holds other books of it, the list dialog also offers "Toute la série « … » (N livres)": each list then gets every book of the series it doesn't hold yet, in volume order (2 before 10, books without a volume last; series names match whatever the case and accents). The library rows also have a checkbox, next to the grip: Shift-click ticks or unticks the whole range since the previous click, and the checkbox above the list ticks every comic shown (or unticks them). The selection survives a new search or filter, so it can gather books from several searches, and is cleared once an action (list, bulk edit, lookup) has been done on it; "Ajouter à une liste de lecture" then opens the same dialog for the selected books, in the order shown. Dragging the grip of a selected comic carries the whole selection (shown as "N livres" under the pointer) and drops it onto a list of the sidebar the same way; dragging the grip of a comic that isn't selected carries that comic alone. With several books, a list holding some of them shows how many and a half-ticked box, ticking a list adds the missing ones (they can't be taken out all at once: that is done on the list's page), and a new list created there gets them all. A list that fills up takes the books that fit, in order, and a message says how many were added, how many were already there and how many were left out.
- Read books: a book counts as read once its last page has been reached, or when it carries the "Lu" tag. In the list it is greyed out and struck through, and the first unread book is highlighted as the next one ("À suivre").
- Reordering: unread books are moved by dragging the grip (six dots) at the left of their row, or with the up/down arrows; the rest of the row opens the book. Read books stay where they are: they can't be moved, and the unread books move around them.
- Display modes of a list (three icon buttons above the books, as in the library): "full", "medium" and "compact" show a list's books like the library's display modes do (cover, details, page counter, rating and tags in "full"; cover, series and volume, page counter and rating in "medium"; one line in "compact"), and the rating and tags can be changed from there. The list keeps its own order and its reading actions (arrows, "Lire"/"Ouvrir", remove from the list) in every mode. The choice is remembered between sessions, separately from the library's.
- Closing a book: the reader's close button, for a book opened from the library, the home page or a list, returns to where it came from (the library, or the reading list when opened from one) instead of showing the empty reader. A book opened with "Ouvrir un fichier" still leaves the empty reader.
- Next book: a book opened from a list (its "Lire"/"Ouvrir" buttons) offers "Suivant : …" in the reader header on its last page, which opens the list's next unread book; when every other book is read, the header says "Liste terminée".
Achievements
"Accomplissements" in the sidebar lists 20 achievements in four groups (reading, library, organization, fun), each with a manga-style badge in the app's accent colour: greyed out until earned, then in colour with the date it was earned. Tiered ones (10, 50, 200 books finished; 100, 1 000, 5 000 books in the library…) are separate badges marked with one to three stars. An achievement still to earn shows a progress bar (for example 7/10) when it is a matter of counting.
- Reading: finishing 1, 10, 50 and 200 books (a book counts as finished like in the reading lists); opening a book after 10 pm (until 5 am) or between 5 am and 7 am.
- Library: 100, 1 000 and 5 000 books; having a CBZ, a CBR and a PDF; adding a folder.
- Organization: creating a reading list, creating 5 or filling one with 50 books; rating 10 and 50 books; using 10 different tags (the "Lu" and "À lire" quick tags don't count); filling in the credits of 1 and 10 books.
- Fun: opening a book in right-to-left reading direction; having books in 2 different languages.
A toast at the bottom right announces an achievement as it is earned (several earned at once, as when an existing library is first scanned for them, are summed up in one toast). An earned achievement stays earned when the books that earned it are removed, and clearing the library keeps them; they are not part of the JSON export.
Reader
- Resume: a comic reopens at the last page read.
- Anonymous reading (Paramètres › Lecteur, "Ajouter un livre à la bibliothèque quand il est ouvert", checked by default): opening a book that isn't in the library adds it. Unchecked, a book opened from the reader ("Ouvrir un fichier") that isn't in the library is read anonymously: it isn't added, nothing is saved for it (no progress, no cover) and it starts from the first page each time. "Ajouter un fichier" on the library page always adds the book, whatever the option. Books already in the library keep their progress and stay up to date either way.
- Open from the file explorer: a comic (CBZ, CBR or PDF) can be opened from outside the app: "Open with…" Tankōbon on any platform, a double click once the app is the default program for the type (the Linux
.deb/.rpmpackages and the macOS app declare the types; the Windows installer doesn't, so choose Tankōbon once with "Open with… › Always"), ortankobon book.cbzin a terminal. If the app is already running, its window comes forward and shows the book; otherwise it starts on the book. The book follows the same rules as one opened from the reader: it joins the library, or is read anonymously, according to Paramètres › Lecture. - PDF page turns: a PDF page has to be drawn before it is shown, so the reader prepares the next and previous pages in the background and keeps the last few: turning a page is nearly instant, like in a CBZ, except when jumping far or opening the book.
- Reading direction: left-to-right (BD/comics) or right-to-left (manga), in Paramètres › Lecteur. It swaps which side (arrow keys and click zones) goes forward.
- Zoom: fit to window, or 50 % to 200 % (100 % being the page's actual size). A page smaller than the window stays centered; a larger one scrolls. After a page turn, a zoomed page starts at its top when you go forward and at its bottom when you go back, so reading continues where you left off.
- AI enhancement: when a page is displayed larger than its native resolution, the "Améliorer (IA)" option upscales it with a super-resolution model (ESRGAN via UpscalerJS/TensorFlow.js) that runs locally. The model ships with the app and works offline; it is only loaded the first time the option is used.
- Mouse wheel / trackpad: in "fit" zoom the wheel turns pages, one page per gesture (the inertia of a trackpad swipe doesn't skip extra pages). When zoomed in, the wheel first scrolls the page and only turns it once the top or bottom edge is reached. Whether scrolling down goes forward or back is set in Paramètres › Lecture.
- Zoom in continuous mode: the zoom menu also appears in continuous scroll. It sets the width of the page column, from 50 % to 200 % of the reading area ("Fit to width", 100 %, by default); beyond that width the pages scroll sideways. Changing it keeps your relative position in the book. It is not saved: each book opens fitted to width.
- Continuous mode: instead of page by page, pages can flow vertically ("Défilement continu"), loaded as they approach the screen. The gap between pages is set in pixels (0 = pages touch). The current page (for the counter, resuming and the reading list's next book) is the one crossing the middle of the screen, however tall it is. A page that can't be read shows "Page illisible" instead of loading forever, with a "Réessayer" button that opens the book again where you were (useful after the app's decoding process restarted). In page-by-page mode the reader does that by itself, once, when a page can't be read. This includes a CBZ/CBR page whose image declares absurd dimensions (above 100 megapixels, e.g. 30 000 × 30 000 px): it is refused before being decoded, so it can't exhaust the memory, and its book simply goes without a cover.
- Removing a book: the remove button of a library row asks for confirmation; the book leaves the library with its rating, tags and details. The file stays on disk, unless the "Mettre aussi le fichier à la corbeille" box is checked: the file, its cover image and its
.nfothen go to the system trash (never deleted for good). If the trash refuses, the book is still removed and the reason is shown. - Book that won't open: when a book opened from the library can't be read (file moved or deleted, corrupted, unsupported), the reader shows the error with a "Retirer de la bibliothèque" button. After confirmation the book is removed from the library (its rating, tags and details are lost; the file stays on disk unless the "Mettre aussi le fichier à la corbeille" box is checked) and you go back to the library.
- Progress and time left: the reader header shows the percentage read and an estimate of the remaining reading time, based on the pace observed since the book was opened in this session. The estimate appears once there is enough data.
- Files that can't be opened: a file that was moved or deleted shows "Fichier introuvable : il a été déplacé ou supprimé."; any other failure (corrupted or unsupported file) shows "Impossible d'ouvrir ce fichier : …" followed by the reason. The book you were reading stays open.
- Theme: Paramètres › Affichage › "Thème" picks "Système" (the default, follows the operating system's light or dark scheme and changes with it), "Clair" or "Sombre". It applies at once and is part of the exported settings. The theme is personal: each user has their own, and switching user applies theirs. The reader's background color is separate and always free.
- Background color: the color behind the pages can be picked from presets or a color picker (Paramètres › Affichage).
- Fullscreen: the header button,
ForF11toggle fullscreen;Escapeleaves it. In fullscreen the sidebar is hidden and the header only appears when the mouse reaches the top of the screen. - Keyboard (page-by-page mode):
→,Page DownandSpaceact like the right click zone;←andPage Uplike the left one.
Application menu
The menu bar only holds entries that work: Fichier (Quitter; Fermer on macOS), Édition (undo, redo, cut, copy, paste, select all), Affichage (full screen, the same as F11) and Fenêtre (minimize, close). Reload, zoom and the help links of Electron's default menu are gone. The developer tools entry only appears in development mode (npm run dev). The labels follow the interface language and change with it.
Statistics
"Statistiques" in the sidebar shows how the library is used. Paramètres › Affichage can hide the statistics page and the achievements page (one personal box each): the sidebar entry leaves, the page redirects to the library, and with the achievements off none is earned or announced. Nothing is deleted: reading time keeps being recorded, the earned achievements are kept, and turning them back on earns those the library justifies by then.
- Totals: the number of books, the size of the library on disk, the number of books read (last page reached or "Lu" tag, whenever that happened) and the total reading time.
- Charts: "Livres lus", "Livres dans la bibliothèque" (the number of books at the end of each period) and "Temps de lecture", as bars per week (the last twelve, Monday to Sunday, labelled with the week's Monday), per month (the last twelve) or per year (since the first one with data), switched with the "Semaine"/"Mois"/"Année" buttons. Periods with nothing keep an empty slot.
- Library growth: the "Livres dans la bibliothèque" chart is rebuilt from the date each book was added, so a book removed since is not counted, even for the periods when it was there (the app keeps no trace of deleted books).
- What is recorded, and since when: a book is dated the first time its last page is reached or it is tagged "Lu" (it is not dated again later). Reading time counts while a book of the library is open in the reader and the window is visible and focused, and is added to the day it was read (local time). Both are recorded from the version that introduced this page: books read before are in the totals but not in the charts, and have no reading time. A book opened anonymously (see "Reader") leaves no trace.
- Your data: the history is not part of the JSON export, and "Vider la bibliothèque" deletes it. Removing a single book keeps the time already spent reading it.
Users
Several people can share one installation. A user has a nickname and, optionally, a profile picture (the default is a generic contact image); there is no password, so anyone using the app can switch to any user.
- Switching: the sidebar's bottom button shows the current user. It opens a menu listing every user (click another one to switch to it, which brings you back to the home page), "Ajouter un utilisateur…" (asks for a nickname, creates the user and switches to them) and "Mon profil". Clicking your own entry in the menu opens your profile. The app reopens on the user who was active when it was closed.
- Choice screen at startup: Paramètres › Affichage › "Demander qui lit au démarrage" (off by default) shows, at each launch, a full-window screen listing the users with their pictures; clicking one switches to them (the active one just closes the screen). Its "Ne plus proposer ce choix au démarrage" box turns the setting off. The setting is personal: at launch the app reads it for the user it reopens on (the last active one), and the box turns it off for that user only.
- Reading history (on the profile page): the books you spent time reading, one line per day and book with the time spent, most recent first (the last 200 lines). A book removed from the library since shows as "Livre retiré de la bibliothèque". "Effacer l'historique" (after a confirmation) deletes it for the active user only: the statistics' reading time goes with it, but books, progress, ratings and finished books stay.
- Profile (
/profile): change the nickname (not empty, at most 40 characters, unique ignoring case) and the picture ("Choisir une image…", then "Retirer l'image" to go back to the default). The picture is cropped to a centered square, shrunk to 256 × 256 px and stored in the database; PNG, JPEG and WebP files are accepted. - Deleting a user: the profile page's "Supprimer cet utilisateur…" button (after a confirmation) deletes the active user for good, with their ratings, tags, progress, reading lists, statistics, achievements and settings; the library and the other users are not affected, and the app switches to the previously active user and goes back to the home page. It is only available while at least one other user exists: the last remaining user can't be deleted.
- What is personal: the rating, tags and reading progress of each book (so "Lu"/"À lire", the last page reached and the books started), the reading lists, the statistics and reading time, the achievements, and the settings of reading, display, language, home page and library views (Paramètres › Accueil, Affichage, Lecteur, and the library toolbar), as well as which folders the user's resynchronization walks, their organized folder and whether they resynchronize at startup (Paramètres › Organisation). A new user starts with the default settings and an empty history. The first user is the one the data of an earlier version goes to; their nickname is taken from the operating system's session name.
- What is shared: the library itself (the books, their title, series, credits and other information, covers), the books' folders (as recorded in the library) and the organization of the library (tree and file name, Paramètres › Organisation) and the update-check setting. The metadata sources and their API keys are personal. Whether opened books are added to the library is a personal choice. Editing a book's information or rescanning a folder affects everyone.
- Export / import and "Effacer la bibliothèque…" work on the active user's data: an export holds the library with the active user's ratings, tags and progress, their lists and their settings; an import merges into the active user's. Clearing the library removes the books for every user, but deletes only the reading lists of the user who clears it.
Language
The interface is available in English and French. By default it follows the operating system's language: the first of the system's preferred languages that the app supports, or English when none is. Paramètres › Affichage › "Langue" forces one of them instead ("Langue du système" goes back to following the system). The change applies at once, including the native dialogs (open a comic, add a folder, export…) and the error messages. The language is a personal setting: each user has their own, and the interface follows the user you switch to. It is part of the exported settings. A flag (SVG) of the country standing for the language is shown before the language pickers (Paramètres › Affichage and the book edit form), and replaces the language's name in the library rows (the name appears when hovering it); languages without a known flag keep their name.
Start-up
While the app loads its data (settings and language), the window shows a centered spinner instead of a blank page. It follows the system's light or dark appearance and disappears as soon as the interface is displayed.
Sidebar
The button at the top of the sidebar collapses it to a column of icons, to give more room to the reader. The state is remembered like the other settings.
Changing page (a sidebar entry, a book, a settings section) always opens the new page at its top, whatever the scroll position of the previous one.
"Listes de lecture" lists every reading list underneath it, for direct access to a list's page. Clicking "Listes de lecture" opens the page of all lists and unfolds them; its chevron folds or unfolds them without leaving the current page. "Paramètres" unfolds its sections the same way. Sub-entries are hidden while the sidebar is collapsed to icons. The reading lists can be put in any order by dragging them in the sidebar (a line shows where the list will land); that order is kept and used on the page of all lists too. A new list goes last.
About
"À propos" (its own entry in the sidebar, under Paramètres, not a setting) shows the app's version, along with the versions of Electron, Chromium, Node.js and V8 and the operating system. "Copier les informations" copies them as text, to paste into a bug report. Buttons open the documentation, the source code on GitHub, the published versions (installers and changelog) the issue tracker and the invitation to the Arvarus Discord server in the default browser.
License: Tankōbon is free software under the MIT license. The "Licence" section of the "À propos" page says so, recalls that the app is provided "as is", without warranty (the authors aren't liable for lost data or damaged files, so keep backups and export the library regularly), and "Lire la licence" opens the full text on GitHub.
Updates: at every start, the app asks GitHub for the latest published release and, if it is newer than the running version, shows a notice offering to open the releases page to download it (a failed check, when offline for instance, stays silent). "Rechercher une nouvelle version au démarrage" in the "À propos" page turns this off (on by default); "Rechercher maintenant" runs the check on demand and reports the result. Only the request to GitHub is made; nothing is downloaded or installed by the app itself.
Your data
- Local only: the library, the users and the settings are stored in one SQLite file,
tankobon.db. By default it lives in the app's user data directory; nothing is sent to the cloud. Cover thumbnails are a cache in athumbnailsfolder of the user data directory; they stay there even when the database is moved, and can be deleted at any time. The only network requests are the information lookups the user starts, which send the search text to the enabled sources. - Moving the database (Paramètres › Données): the database can be pointed at another folder, for example a synced one. The existing file is not moved: if the new folder already holds a Tankōbon database it is used as is, otherwise an empty one is created there. The file name can be changed too ("Nom du fichier",
tankobon.dbby default;.dbis added when missing, and names with/ \ : * ? " < > |or reserved by Windows are refused, with "Revenir au nom par défaut" to undo): as for the folder, the existing file is not renamed and a database already holding that name in the folder is used as is. The change takes effect after a restart ("Redémarrer maintenant"). Export your data first if you want to take it along. - Backups (Paramètres › Données, shared): the app can copy the database into a
.tankobonfolder next to it (it follows the database when its location changes). "Sauvegarder tous les (jours, 0 = jamais)" sets the frequency, from 1 to 31 days (0, the default, turns the automatic copies off); they are made at start-up and while the app stays open. "Sauvegardes à conserver" (1 to 50, 5 by default) is how many copies are kept: the oldest are deleted. "Sauvegarder maintenant" makes a copy at once, and the list shows each copy with its date and size. "Restaurer…" asks for confirmation (the restoration overwrites the database file, so everything done since the copy is lost), then restarts the app, which replaces the file before opening it; the replaced file is kept beside the database astankobon.db.before-restore. A restoration waiting for the restart can be cancelled. If a copy can't be written (read-only folder, full disk), the reason is shown. - Export / import (Paramètres › Données): the library, reading lists and settings can be exported to a JSON file (named after the date and time of the export by default, e.g.
tankobon-export-2026-10-02-14h30.json), and an export can be imported back. Importing merges by file path: comics in the file overwrite the matching ones (progress, rating, tags and looked-up information included), comics only present locally are kept, and settings are replaced. Reading lists in the file replace the same lists (name and books) and come first, in the file's order; other local lists are kept, after them, and a book of a list that isn't in the library is left out. Thumbnails are not part of the export: after an import they are rebuilt in the background from the comic files. The settings include the API keys, so an export file should be kept private. If the file can't be written (full or read-only disk…), the reason is shown under the buttons instead of nothing happening. - Clearing the cache (Paramètres › Données): "Effacer le cache" deletes the cover thumbnails kept in the application's folder, so no old file stays there. Nothing is lost: covers are made again when the library shows them. The library, the settings and the covers saved beside the comics are untouched.
- Clearing the library (Paramètres › Données): "Effacer la bibliothèque…" removes every comic from the library (progress, ratings, tags, looked-up information and credits), deletes all reading lists and cover thumbnails, after a confirmation dialog that says how many comics and lists will go. The comic files on disk and the settings are left untouched. If it fails, the reason is shown under the button. It can't be undone: export your data first to be able to restore it.