# Audiobookshelf won't import books from LibbyRip

> Why Audiobookshelf scans fail or skip LibbyRip-ripped audiobooks, and how to fix the metadata.json so the books show up.

Source: https://soundleafapp.com/server/audiobookshelf-libbyrip-books-not-importing/
Published: 2026-04-27
Updated: 2026-06-10

---

You used [LibbyRip](https://github.com/PsychedelicPalimpsest/LibbyRip) to grab a Libby audiobook, copied the folder into your Audiobookshelf library, ran a scan, and the book never showed up. The audio files are in the right place, the folder structure looks fine, but the book isn't in the library. Sometimes the scan fails partway through and other books that should have imported don't either.

Look in the scan log (Settings, Logs, or `metadata/logs/scans/`) and you'll see one of these:

```
[abmetadataGenerator] Invalid chapter start time undefined for "<book title>" metadata file
```

```
ValidationError [SequelizeValidationError]: string violation: description cannot be an array or an object
```

LibbyRip writes a `metadata.json` into a `metadata/` subdirectory inside each audiobook folder. ABS picks it up during its recursive scan, but the format is Libby's native data shape, not Audiobookshelf's. Two completely different schemas that happen to share a filename. ABS picks up the file during scan, hands it to its metadata parser, and the parser rejects it because:

- `description` is an object (`{ "full": "...", "short": "..." }`) instead of a single string
- chapter entries don't have the numeric `start` and `end` fields ABS expects

When the parser fails on the chapter check it returns `null` and the book gets skipped. When the description object slips through to the database layer, Sequelize throws the validation error and the whole scan aborts. The maintainers initially considered this [not a bug](https://github.com/advplyr/audiobookshelf/issues/4287) since LibbyRip is writing a different format that just happens to be named `metadata.json` (they later reversed that; see the update below). On v2.35.0 and older, fixing it is on you.

## The quick fix: delete or rename metadata.json

The simplest path is to remove `metadata.json` from each LibbyRip folder before scanning. ABS will fall back to reading metadata from the audio file tags and external providers (Audible, Open Library, etc.) and the book will import.

For a single book:

```bash
rm "/path/to/library/Author/Book Title/metadata.json"
```

To clear them across the whole library:

```bash
find /path/to/library -name "metadata.json" -delete
```

If you want to keep LibbyRip's data around for reference but not have ABS choke on it, just rename the file. ABS only parses files named `metadata.json` (or `metadata.abs`), so anything else is ignored:

```bash
find /path/to/library -name "metadata.json" -execdir mv {} libby-metadata.json \;
```

[nigiriemoji confirmed](https://github.com/advplyr/audiobookshelf/issues/5142#issuecomment-4105127485) deleting the file works. Run a manual scan from Settings, Libraries, your library, **Scan**, and the missing books should appear.

## If you want to keep the description: convert it

If you'd rather keep the description LibbyRip pulled, the minimum change is collapsing `description` from an object to a string. [nate-griff posted a working example](https://github.com/advplyr/audiobookshelf/issues/5142#issuecomment-4144104167):

Before:

```json
"description": {
  "full": "<full text...>",
  "short": "<short text...>"
}
```

After:

```json
"description": "<full text...>"
```

That alone gets the book to import with title, author, and description. Chapter names still won't come through, since LibbyRip's chapter array doesn't match ABS's schema. ABS expects this:

```json
"chapters": [
  { "start": 0, "end": 1234.5, "title": "Chapter 1" },
  { "start": 1234.5, "end": 2567.8, "title": "Chapter 2" }
]
```

`start` and `end` in seconds as numbers, `title` as a string. If LibbyRip's chapters are in a different shape, either delete the `chapters` key from `metadata.json` (ABS will read chapters from the audio file instead) or write a small script to map the fields.

The fields ABS will read from `metadata.json` are: `title`, `subtitle`, `authors` (array of strings), `narrators` (array), `series` (array of strings like `"Series Name #1"`), `genres` (array), `tags` (array), `publishedYear`, `publishedDate`, `publisher`, `description` (string), `isbn`, `asin`, `language`, `explicit` (bool), `abridged` (bool), `chapters` (array as above). Anything else is ignored.

## After a failed scan

If a scan died with the validation error, ABS may have imported some books before the crash and skipped the rest. Fix or delete the offending `metadata.json` files, then trigger a fresh scan. Books that already imported won't be touched, and the ones that were skipped will pick up.

For other library ingestion problems, see [new audiobooks getting the wrong metadata](https://soundleafapp.com/server/audiobookshelf-wrong-metadata-new-books/).

## Update: June 10, 2026, v2.35.1 stops the crashes

[Audiobookshelf v2.35.1](https://github.com/advplyr/audiobookshelf/releases/tag/v2.35.1) (May 28, 2026) fixed the crash side of this. The contributor who had called it not-a-bug took another look and [changed their mind](https://github.com/advplyr/audiobookshelf/issues/5142#issuecomment-4167632329) once the server crash was clear: "I did not notice that above includes a server crash. This definitively is a bug." The fix landed in commit [`1bad2d90`](https://github.com/advplyr/audiobookshelf/commit/1bad2d907294d5eeacbc29e868e2e25613da1176), which closed [#5142](https://github.com/advplyr/audiobookshelf/issues/5142), [#4287](https://github.com/advplyr/audiobookshelf/issues/4287), and the crash report [#5268](https://github.com/advplyr/audiobookshelf/issues/5268). It rewrote the `metadata.json` parser to check every key against the type ABS expects and drop anything that doesn't match.

On v2.35.1 and later:

- **No more crashes or aborted scans** - LibbyRip's object-shaped `description` gets dropped with an `Invalid metadata key "description" expected string, got object` warning in the log instead of reaching the database layer and killing the process.
- **The books import** - the parser keeps the keys that are valid and skips the rest, so the book shows up instead of being skipped wholesale. You'll still see the `Invalid chapter start time` error in the scan log, but it's harmless now; it just means the Libby-format chapters were ignored.

If you want the description text and chapter titles inside ABS, the convert steps above are still how you get them, on any version. And if you're on v2.35.0 or older, nothing changed for you: delete or rename the file.

## Affected versions

The schema conflict exists on every version: the `metadata.json` format hasn't changed in years and LibbyRip's output uses Libby's native format consistently. What you see when they collide changed in v2.35.1 (May 28, 2026). On v2.35.0 and older, the scan fails or the server crashes and the books get skipped, so the workarounds above are the way out. On v2.35.1 and later, the books import and the bad keys just get logged and dropped; converting the file is only needed if you want the Libby description and chapter titles.
