Skip to main content

Convert Scrivener projects to Obsidian-compatible Markdown, preserving binder structure, links, and metadata

Project description

Scrivenite Logo

Scrivenite

Convert Scrivener projects to Obsidian-compatible Markdown โ€” preserving your binder structure, internal links, and inspector metadata.

Buy Me A Coffee

Features

  • ๐Ÿ“ Binder Structure Preserved: Your Scrivener folder hierarchy maps directly to folders in your Obsidian vault, with optional 01 - ordering prefixes so the Manuscript reads in binder order
  • ๐Ÿ”— Wikilink Conversion: Internal Scrivener links (scrivlnk:// and scrivener://) become Obsidian [[Wikilinks]], with aliases when the link text differs from the title
  • ๐Ÿท๏ธ YAML Frontmatter: Every note gets frontmatter with its original scrivener_id and the document title as an alias, for robust search and cross-referencing
  • ๐Ÿ“‹ Metadata Rescue: Synopses, inspector Notes, and inline Comments are appended to each note under ## Synopsis, ## Notes, and ## Comments headers
  • ๐Ÿ–ผ๏ธ Media Support: Images and PDFs are copied over with companion .md files containing ![[embeds]]
  • ๐Ÿงน Clean Markdown Output: Strips RTF artifacts, excessive escaping, Scrivener compile placeholders (<$PROJECTTITLE>, <$wc100>, โ€ฆ), and stray backticks
  • ๐Ÿ”€ Collision-Safe Filenames: Titles become safe filenames (truncated to 100 chars); name collisions get a short UUID suffix

Download the Mac App (no setup required)

Not a terminal person? Grab Scrivenite.dmg from the latest release โ€” a standalone Mac app (Apple Silicon) with everything bundled, including pandoc. Open the DMG, drag Scrivenite to Applications, and follow the first-launch note inside the DMG (the app is unsigned, so macOS asks you to approve it once via System Settings โ†’ Privacy & Security โ†’ "Open Anyway").

Then: pick your .scriv project, pick an output folder, click Convert.

Installation (command line)

Requires Python 3.8+ and Pandoc (macOS: brew install pandoc).

pip install scrivenite

Or from source:

git clone https://github.com/krishnakumar-kapil/scrivenite.git
cd scrivenite
pip install -e .

Usage

Point the tool at the .scrivx file inside your .scriv project bundle:

scrivenite path/to/MyNovel.scriv/MyNovel.scrivx output_folder

(python scriv_to_obsidian.py โ€ฆ works too from a source checkout, and scrivenite-gui launches the same graphical interface as the Mac app.)

Options

Option Description
-v, --verbose Detailed logging of every item processed
--clear Delete the output folder before converting (useful when re-running)
-o, --ordered-folders Folder titles whose contents get 01 - ordering prefixes (default: Manuscript; repeatable)
--skip-trash Don't convert the contents of the Trash folder
--conservative Disable opinionated cleanup heuristics (stray-backtick stripping, character-sheet header promotion). Use if your documents contain inline code or literal backticks

Example with options:

scrivenite MyNovel.scriv/MyNovel.scrivx vault/MyNovel --clear -o Manuscript -o Characters -v

Example Project Structure

Input Scrivener binder:

MyNovel.scriv
โ”œโ”€โ”€ Manuscript
โ”‚   โ”œโ”€โ”€ Chapter 1
โ”‚   โ”‚   โ”œโ”€โ”€ Scene 1
โ”‚   โ”‚   โ””โ”€โ”€ Scene 2
โ”‚   โ””โ”€โ”€ Chapter 2
โ””โ”€โ”€ Characters
    โ””โ”€โ”€ Protagonist

Generated Obsidian vault:

output_folder/
โ”œโ”€โ”€ Manuscript/
โ”‚   โ”œโ”€โ”€ 01 - Chapter_1/
โ”‚   โ”‚   โ”œโ”€โ”€ 01 - Scene_1.md
โ”‚   โ”‚   โ””โ”€โ”€ 02 - Scene_2.md
โ”‚   โ””โ”€โ”€ 02 - Chapter_2/
โ””โ”€โ”€ Characters/
    โ””โ”€โ”€ Protagonist.md

Troubleshooting

  • "File name too long" errors: Filenames are automatically truncated to 100 characters โ€” update to the latest version if you still see this.
  • Backticks around normal text: An artifact of RTF conversion; the cleanup pass removes them. Please open an issue with a sample if any slip through.
  • XML errors on start: Check that you passed the .scrivx file (not the .scriv folder) and that it isn't empty (0 bytes).
  • Pandoc errors: Make sure pandoc is installed and on your PATH (pandoc --version).

Roadmap

  • Signed & notarized macOS app (no "Open Anyway" step), plus an Intel build
  • Fully configurable header detection (currently tuned for character-sheet templates)
  • Long-term: a native Obsidian plugin for 1-click imports

Development

Install with test dependencies and run the suite:

pip install -e ".[test]"
pytest

For iterating on cleanup rules or link resolution, convert into the same output directory each time (with --clear) so you can diff results in one vault. A --debug-port 5678 option is available for attaching a remote debugger (pip install debugpy).

To build the standalone Mac app + DMG locally (bundles Python, Tcl/Tk, and pandoc via pypandoc-binary):

./build_macos_app.sh          # outputs to /tmp/scrivenite_build/dist/

The release workflow builds and attaches the DMG automatically when a v* tag is pushed.

Project Structure

  • scriv_to_obsidian.py: Main script with conversion logic
  • scrivenite_gui.py: Tkinter GUI (what the Mac app runs)
  • build_macos_app.sh: PyInstaller + DMG build script
  • tests/: Unit tests and a sample Scrivener project under tests/data/

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Run the tests
  5. Submit a pull request

Bug reports with weird RTF edge cases or unusual Scrivener templates are especially welcome โ€” they make the parser more robust for everyone.

License

MIT License - See LICENSE file for details

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scrivenite-0.2.0.tar.gz (23.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

scrivenite-0.2.0-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file scrivenite-0.2.0.tar.gz.

File metadata

  • Download URL: scrivenite-0.2.0.tar.gz
  • Upload date:
  • Size: 23.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.18 {"installer":{"name":"uv","version":"0.11.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for scrivenite-0.2.0.tar.gz
Algorithm Hash digest
SHA256 1a5ed14d7957232c58e4d34e8c245a1756769c18e26b2d7699b103b1cf979cfd
MD5 c7ba3028f8f6c2d6ab1294c1e388b7e6
BLAKE2b-256 9cfe5da19efadf663738c363dbe47d70f6243d7d625df036a3aa3a6d0159cd50

See more details on using hashes here.

File details

Details for the file scrivenite-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: scrivenite-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 17.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.18 {"installer":{"name":"uv","version":"0.11.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for scrivenite-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 224d33d9d4bbfa7e895e8794b2723cbec68b67f2054ece0a3b7329101327143e
MD5 b96e00d4e751b0b963a6a9a3a939acdc
BLAKE2b-256 7bcbbdfb9ad97482a8259981dc3daedd86fc4ea18bc8901e36402a40fb81f817

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page