Skip to main content

Scrybe Mermaid — standalone PNG iTXt codec (Rust-backed)

Project description

scrybe-mermaid

Standalone PNG iTXt codec: embeds and extracts Mermaid diagram source as invisible metadata inside a PNG file. Python on the outside, Rust on the inside.

What it does

Uses the PNG iTXt (international text) metadata chunk mechanism to store Mermaid diagram source alongside the rendered image. The PNG is fully valid and renders normally in any image viewer. The source text travels with the image and can be round-tripped without loss.

Python quick start

pip install scrybe-mermaid
from pathlib import Path
from scrybe_mermaid import embed, extract

source = """
graph TD
    A[Christmas] -->|Get money| B(Go shopping)
    B --> C{Let me think}
    C -->|One| D[Laptop]
    C -->|Two| E[iPhone]
"""

# diagram.png: any PNG — render one with mmdc, Kroki, or the Mermaid live editor
png_in = Path("diagram.png").read_bytes()
png_out = embed(png_in, source)
Path("diagram-with-source.png").write_bytes(png_out)

payload = extract(png_out)
if payload.source != source:  # optional
    raise ValueError("Round-trip mismatch")
print(f"Round-tripped {len(payload.source)} chars; sha256={payload.sha256[:12]}…")

The resulting PNG renders normally in any image viewer and carries its own Mermaid source for round-tripping. See the API reference below.

Codec format

  • Chunk key: scrybe-mermaid
  • Value: JSON { "source": "<mermaid source>", "sha256": "<hex>" }

The sha256 field is a SHA-256 digest of the source bytes for lightweight integrity verification.

Role in the architecture

scrybe-mermaid is a self-contained utility crate with no dependency on scrybe-core. It is used by scrybe-mcp-server (the embed/extract tools), scrybe-cli (scrybe mermaid embed/extract/verify), and the Tauri backend.

Key public types and entry points

Symbol Description
embed(png_bytes, source) -> Result<Vec<u8>> Inserts iTXt chunk; returns modified PNG bytes
extract(png_bytes) -> Result<MermaidPayload> Reads and parses the iTXt chunk
MermaidPayload source: String + sha256: String
MermaidError Error type covering missing chunk, malformed JSON, PNG decode failure

Build and test

cargo build -p scrybe-mermaid
cargo test -p scrybe-mermaid

Depends on the png crate for chunk-level PNG manipulation and base64 for encoding the iTXt payload. No external binaries required.

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

scrybe_mermaid-0.2.0.tar.gz (46.2 kB view details)

Uploaded Source

Built Distributions

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

scrybe_mermaid-0.2.0-cp39-abi3-win_amd64.whl (189.2 kB view details)

Uploaded CPython 3.9+Windows x86-64

scrybe_mermaid-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (337.2 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

scrybe_mermaid-0.2.0-cp39-abi3-macosx_11_0_arm64.whl (295.4 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: scrybe_mermaid-0.2.0.tar.gz
  • Upload date:
  • Size: 46.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for scrybe_mermaid-0.2.0.tar.gz
Algorithm Hash digest
SHA256 c887ab45d5a49868abb3c8fc3434368cf517efade81d6f79969856212594333b
MD5 b5016eec22c0142cb5b57a92d28ba051
BLAKE2b-256 a62e2d7fa402780497fc0c80010fc68c18c48fe2e693c6e98f45e470ed13a6c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for scrybe_mermaid-0.2.0.tar.gz:

Publisher: release.yml on hartsock/scrybe

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scrybe_mermaid-0.2.0-cp39-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for scrybe_mermaid-0.2.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 f00dfc344c5e8f482d895bcf8bdd61124da056e4d0abd8e41efac8d0971b09e3
MD5 310518e36852d505de2068cdda0dd113
BLAKE2b-256 b171fa57392f35617236323edb25e813f2d96a69297e1c440fabb8e1cca979ad

See more details on using hashes here.

Provenance

The following attestation bundles were made for scrybe_mermaid-0.2.0-cp39-abi3-win_amd64.whl:

Publisher: release.yml on hartsock/scrybe

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scrybe_mermaid-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for scrybe_mermaid-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bc62c23a8d774ee577b20d2b3644318ad2aa67b402bcc49513d1b5ba02145326
MD5 92b864a7adaf17564d6a3745f145ccc9
BLAKE2b-256 18c23cd7c6dbfb59ee30c53fcb568041142edba94d62fca458a7cf1f2b22f107

See more details on using hashes here.

Provenance

The following attestation bundles were made for scrybe_mermaid-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on hartsock/scrybe

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scrybe_mermaid-0.2.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scrybe_mermaid-0.2.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8d61b76ded8200eff827b90dd8ffcd98f12040c6d52c4ec78c2ee9af1e759fb4
MD5 75cf289e883a6f538691dced3ae1fff4
BLAKE2b-256 5efe33537aff558068692f3b1d18aea5e1e952059c61bc942a604ea1b7c19cef

See more details on using hashes here.

Provenance

The following attestation bundles were made for scrybe_mermaid-0.2.0-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on hartsock/scrybe

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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