{"id":19794211,"url":"https://github.com/openzim/nautilus","last_synced_at":"2025-07-26T23:32:53.289Z","repository":{"id":45132748,"uuid":"236460742","full_name":"openzim/nautilus","owner":"openzim","description":"Turns a collection of documents into a browsable ZIM file","archived":false,"fork":false,"pushed_at":"2024-05-14T09:38:31.000Z","size":287,"stargazers_count":18,"open_issues_count":9,"forks_count":14,"subscribers_count":9,"default_branch":"main","last_synced_at":"2024-05-14T13:37:24.685Z","etag":null,"topics":["scraper","zim"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openzim.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"kiwix","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2020-01-27T09:56:05.000Z","updated_at":"2024-05-14T09:38:35.000Z","dependencies_parsed_at":"2024-10-24T11:06:48.550Z","dependency_job_id":null,"html_url":"https://github.com/openzim/nautilus","commit_stats":{"total_commits":79,"total_committers":6,"mean_commits":"13.166666666666666","dds":0.2784810126582279,"last_synced_commit":"c40e6ecc5edab255ecbd87bc7a18c528e1c0a33e"},"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openzim%2Fnautilus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openzim%2Fnautilus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openzim%2Fnautilus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openzim%2Fnautilus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openzim","download_url":"https://codeload.github.com/openzim/nautilus/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251812309,"owners_count":21647885,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["scraper","zim"],"created_at":"2024-11-12T07:12:32.363Z","updated_at":"2025-05-01T02:30:59.522Z","avatar_url":"https://github.com/openzim.png","language":"Python","funding_links":["https://github.com/sponsors/kiwix"],"categories":[],"sub_categories":[],"readme":"\n# Nautilus\n\n`nautilus` turns a collection of documents into a browsable [ZIM file](https://openzim.org).\n\n[![CodeFactor](https://www.codefactor.io/repository/github/openzim/nautilus/badge)](https://www.codefactor.io/repository/github/openzim/nautilus)\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n[![codecov](https://codecov.io/gh/openzim/nautilus/branch/main/graph/badge.svg)](https://codecov.io/gh/openzim/nautilus)\n[![PyPI version shields.io](https://img.shields.io/pypi/v/nautiluszim.svg)](https://pypi.org/project/nautiluszim/)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/nautiluszim.svg)](https://pypi.org/project/nautiluszim)\n[![Docker](https://ghcr-badge.egpl.dev/openzim/nautilus/latest_tag?label=docker)](https://ghcr.io/openzim/nautilus)\n\nIt downloads the video (webm or mp4 format – optionally recompress it in lower-quality, smaller size), the thumbnails, the subtitles and the authors' profile pictures ; then, it creates a static HTML files folder of it before creating a ZIM off of it.\n\n# Preparing the archive\n\nTo be used with nautilus, your archive should be a ZIP file.\n* it doesn't need to be structured, but it can.\n* it doesn't need to be compressed. It's usually recommended not to.\n* it should contain a `collection.json` file, but it can also be provided separately (see below).\n* it should only contain to-be-included files. No filtering is done.\n* Audio and video files should be in ogg format with an `.ogg`/`.ogv` extension to be supported on all platforms (`mp3`/`mp4` would work only on platforms with native support).\n\n```\ncd content/path\nzip -r -0 -T ../content_name.zip *\n```\n\n## JSON collection file\n\nEither inside the archive ZIP as `/collection.json` or elsewhere, \nspecified via `--collection mycollection.json`, you must supply a JSON file describing your content.\n\nThe user-interface only gives access to files referenced properly in the collection.\n\nAt the moment, the JSON file needs to provide the following fields for each item in an array:\n\n```json\n[\n    {\n        \"title\": \"...\",\n        \"description\": \"...\",\n        \"authors\": \"...\",\n        \"files\": [\"relative/path/to/file\"]\n    },\n    {\n        \"title\": \"...\",\n        \"description\": \"...\",\n        \"authors\": \"...\",\n        \"files\": [\n            {\n                \"archive-member\": \"01 BOOK for printing .pdf\",  // optional, member name inside archive (same as simpler format)\n                \"url\": \"http://books.com/310398120.pdf\",  // optional, has precedence over `archive-member`, url to download file from\n                \"filename\": \"My book.pdf\",  // optional, filename to use in ZIM, regardless of original one\n            }\n        ]\n    }\n]\n```\n\n## About page\n\nEither inside the archive ZIP as `/about.html` or elsewhere, specified via `--about myabout.html`,\n\n- You may supply an about page in HTML format. It will be displayed in a modal popup and will be included.\n- At its bottom your *secondary-logo* if provided.\n\n* Use only content tags (no `\u003chtml /\u003e` nor `\u003chead /\u003e` nor `\u003cscript /\u003e` etc)\n* Use inline styling if required, but no styling is recommended.\n* Include one logo inline if required.\n\n## Usage\n\n```sh\n❯ nautiluszim --help\nusage: nautiluszim [-h] [-V]\n\n# everything bundled in a ZIP\nnautiluszim --archive my-content.zip\n\n# In this mode every file entry must have a valid url.\nnautiluszim --collection https://example.com/to-your-collection-file\n```\n\n### Installation\n\nYou'd want to install it in a dedicated virtual-environment (`python3 -m venv some-env \u0026\u0026 source ./some-env/bin/activate`)\n\n```sh\n❯ pip install nautiluszim\n```\n\n### Contributing\n\n```sh\n❯ pip install -e .\n```\n\n#### Notes\n\n* On macOS, the locale setting is buggy. You need to launch it with the `LANGUAGE` environment variable (as ISO-639-1) for the translations to work.\n\n```\nLANGUAGE=fr nautiluszim --language fra\n```\n\nNautilus adheres to openZIM's [Contribution Guidelines](https://github.com/openzim/overview/wiki/Contributing).\n\nNautilus has implemented openZIM's [Python bootstrap, conventions and policies](https://github.com/openzim/_python-bootstrap/docs/Policy.md) **v1.0.0**.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenzim%2Fnautilus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenzim%2Fnautilus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenzim%2Fnautilus/lists"}