{"id":16000660,"url":"https://github.com/bensaufley/audiobook-catalog","last_synced_at":"2026-02-27T11:44:48.022Z","repository":{"id":40276944,"uuid":"337294842","full_name":"bensaufley/audiobook-catalog","owner":"bensaufley","description":"A Docker container for cataloging audiobooks, intended for use on an Unraid server","archived":false,"fork":false,"pushed_at":"2025-12-12T16:10:36.000Z","size":4073,"stargazers_count":2,"open_issues_count":12,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-14T07:23:09.636Z","etag":null,"topics":["audiobooks","docker","nas","unraid"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bensaufley.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2021-02-09T04:45:06.000Z","updated_at":"2025-03-14T23:08:54.000Z","dependencies_parsed_at":"2024-08-24T17:48:07.812Z","dependency_job_id":"8b113c53-997a-4403-9be4-f4181db939e2","html_url":"https://github.com/bensaufley/audiobook-catalog","commit_stats":{"total_commits":183,"total_committers":3,"mean_commits":61.0,"dds":"0.42622950819672134","last_synced_commit":"47eacbe9f7a5e1e6f7812e635f3e26685b3467a6"},"previous_names":[],"tags_count":43,"template":false,"template_full_name":null,"purl":"pkg:github/bensaufley/audiobook-catalog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bensaufley%2Faudiobook-catalog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bensaufley%2Faudiobook-catalog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bensaufley%2Faudiobook-catalog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bensaufley%2Faudiobook-catalog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bensaufley","download_url":"https://codeload.github.com/bensaufley/audiobook-catalog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bensaufley%2Faudiobook-catalog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29892362,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T09:48:51.284Z","status":"ssl_error","status_checked_at":"2026-02-27T09:48:43.992Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["audiobooks","docker","nas","unraid"],"created_at":"2024-10-08T09:05:45.731Z","updated_at":"2026-02-27T11:44:47.991Z","avatar_url":"https://github.com/bensaufley.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1\u003e\u003cimg src=\"https://raw.githubusercontent.com/bensaufley/audiobook-catalog/main/audiobook-catalog.png\" alt=\"Audiobook Catalog logo\" style=\"float: left;margin-right: 1rem; width: 2rem; height: 2rem; vertical-align: middle\"\u003e\nAudiobook Catalog\u003c/h1\u003e\n\n\u003ca href=\"https://codeclimate.com/github/bensaufley/audiobook-catalog/maintainability\"\u003e\u003cimg src=\"https://api.codeclimate.com/v1/badges/7d1a08f5078be7a031de/maintainability\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://codeclimate.com/github/bensaufley/audiobook-catalog/test_coverage\"\u003e\u003cimg src=\"https://api.codeclimate.com/v1/badges/7d1a08f5078be7a031de/test_coverage\" /\u003e\u003c/a\u003e\n\nA Docker container for cataloging audiobooks, intended for use on an [Unraid]\nserver. Uses [Sequelize] with a [SQLite] database and [Fastify] on the backend,\nand [Preact] on the frontend.\n\n# Environment Variables\n\n- `LOG_LEVEL`: Optional. Passed to pino. Sanitized: options are `trace`,\n  `debug`, `info`, `warn`, `error`. Defaults to `info`.\n\n# Mount Paths\n\n- The directory for audiobooks to be organized and stored should be mounted at\n  `/audiobooks`.\n- The directory where the database will be stored should be mounted at `/db`.\n- The directory where imports go should be mounted at `/import`.\n\n# Utilities\n\nCertain command-line utilities are included in the container (located at\n`.build/bin`). They will respond to `-h`/`--help` for more information:\n\n- `removeTag`: For safety, tags can only be deleted through the UI if they are\n  not associated with any audiobooks. This utility can be used to remove one or\n  multiple tags, including those associated with audiobooks (with `-f`).\n\n# Development\n\n`.audiobooks` and `.import` will be mounted at `/audiobooks` and `/import`\nrespectively, and are gitignored; you can use them to work in a local\nenvironment.\n\n## Scripts\n\nThis repo adhere's to GitHub's [Scripts to Rule Them All] pattern.\n\n- `script/cmd`: executes a Docker command with all the extra configuration\n  needed for this project. Most other scripts use `script/cmd` under the hood.\n- `script/setup`: creates a new Docker image for dev, ignoring cache\n- `script/update`: builds the dev Docker image, using cache if possible. In most\n  cases, `script/update` is all you need and `script/setup` is unnecessary.\n- `script/migrate`: exposes the [Umzug] CLI inside the dev container. If no\n  arguments are passed, `up` is assumed.\n- `script/server`: runs `script/update` and then starts dev server inside\n  generated Docker image. Server will be visible at \u003chttp://localhost:6541\u003e.\n- `script/test`: runs `script/update` and runs `npm test` inside it. Extra\n  arguments will be passed as arguments to `npm test`, e.g. `script/test -u` to\n  update Jest snapshots.\n\n[sequelize]: https://sequelize.org\n[sqlite]: https://www.sqlite.org\n[fastify]: https://www.fastify.io\n[preact]: https://preactjs.com\n[unraid]: https://unraid.net\n[scripts to rule them all]: https://github.com/github/scripts-to-rule-them-all\n[umzug]: https://github.com/sequelize/umzug\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbensaufley%2Faudiobook-catalog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbensaufley%2Faudiobook-catalog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbensaufley%2Faudiobook-catalog/lists"}