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.4.0.tar.gz (46.3 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.4.0-cp39-abi3-win_amd64.whl (189.7 kB view details)

Uploaded CPython 3.9+Windows x86-64

scrybe_mermaid-0.4.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (337.5 kB view details)

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

scrybe_mermaid-0.4.0-cp39-abi3-macosx_11_0_arm64.whl (297.4 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: scrybe_mermaid-0.4.0.tar.gz
  • Upload date:
  • Size: 46.3 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.4.0.tar.gz
Algorithm Hash digest
SHA256 d98c89214048c4fefc3e4c899a030dcf7a410822f4aa95d44f12c26771e837a0
MD5 8482c3e78750d990c55115bbb4b1abed
BLAKE2b-256 d1310fb73bf8b742d026f9c1d2023f8e9b85ab1d1a5efcdf773a29604776ca2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for scrybe_mermaid-0.4.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.4.0-cp39-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for scrybe_mermaid-0.4.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 3308ff2caa3b2d7cec51310c15966ab177b17cb8c701e8ec929b9e3434ee7e38
MD5 72911d826344b09efd6b7379014a9261
BLAKE2b-256 48d5722b278631410e929c0c782adea62155a16877232aaec89d96e4801c34c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for scrybe_mermaid-0.4.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.4.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for scrybe_mermaid-0.4.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f04217f75ec03ff1b3b071ea856ef3dfc4c7f48319151f281c03aab2ab488e87
MD5 bb1b5347621b76684683c20b201f6c1b
BLAKE2b-256 db7dc9b64bad24b8f374b0553787f50ee7d1f93d22d3ee991f1611a4d8c8bbe7

See more details on using hashes here.

Provenance

The following attestation bundles were made for scrybe_mermaid-0.4.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.4.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for scrybe_mermaid-0.4.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 84f1eefee62b0ca94ee5556ce2fc7962464cd422ed334f87eb633220d405c012
MD5 115a0b3bc70d0f5138939cf316eb7f31
BLAKE2b-256 7b2c6bf0da5f80402913c380b51f2bb60da85967769c4724b389cd31bc977092

See more details on using hashes here.

Provenance

The following attestation bundles were made for scrybe_mermaid-0.4.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