Skip to main content

nucleation

A high-performance Minecraft schematic engine, powered by a native Rust core. Parse, edit, diff, fingerprint, and generate schematics from Python.

Policy-driven normalization, material profiles, content inspection, UUID standardization, bounded decoding, and registry routing are documented in the complete transformation-policy guide.

Wheels are published for CPython 3.12+ (stable ABI) on Linux, macOS, and Windows. They include a py.typed marker and generated .pyi stubs for Mypy, Pyright, and editor completion. The installed package-level __init__.pyi explicitly re-exports every generated native type, followed by the hand-written veneer types; this keeps package exports equally visible to Mypy and Pyright while preserving the native classes' type identities.

Install

pip install nucleation

Quick start

import nucleation

schematic = nucleation.Schematic.create("demo")
schematic.set_block(1, 2, 3, "minecraft:stone")
print(schematic.get_block_name(1, 2, 3))  # "minecraft:stone"

schematic.save_to_file("demo.litematic")
loaded = nucleation.Schematic.load_from_file("demo.litematic")

Normalize imported content

Preview and apply the same versioned policy contract used by every language binding:

from nucleation import Schematic, TransformPlan, inspect_transform, apply_transform

schematic = Schematic.open("incoming.schem")
plan = TransformPlan.registry_safe()
preview = inspect_transform(schematic, plan)

if not preview.rejected and not preview.quarantined:
    report = apply_transform(schematic, plan)
    schematic.save("normalized.schem")

Inspection never mutates the schematic. Apply is atomic: a rejecting rule returns report.rejected == True and leaves the original unchanged. For only lossless palette cleanup, use TransformPlan.canonical().

Split disconnected builds

Keep every meaningful connected machine independent while attaching only tiny, nearby loose parts:

schematic = nucleation.Schematic.open("combined.schem")
pieces = schematic.split_connected_attach_nearby(
    16,  # components this large always remain standalone
    3,   # tiny parts may attach across at most three empty blocks
)

for index in range(pieces.len()):
    pieces.piece(index).save(f"machine-{index + 1}.schem")

Attachment is lossless and non-transitive: fragments cannot form a chain that recombines otherwise independent builds. Whole-world extraction, including the Python control plane and remote Store worker, is documented in the world-segmentation guide.

To emit every disconnected component literally, use a zero standalone threshold. Every component then becomes a core and the gap is ignored:

pieces = schematic.split_connected_attach_nearby(0, 0)

Curate a lossless corpus

Keep raw extraction lossless, then build registry and ranking views with an auditable policy. Every rejected ID and reason is retained:

from pathlib import Path
from nucleation import (
    CurationPolicy,
    curate_corpus,
    write_registry_archives,
    write_top_owner_archives,
)

policy = CurationPolicy.minima(
    min_blocks=2,          # reject standalone blocks
    min_palette_names=2,   # reject one-material schematics
    name="ore-sanity-v1",
)
corpus = curate_corpus(Path("/data/ore"), Path("/data/ore/curation/ore-sanity-v1"), policy)
write_registry_archives(corpus, Path("/data/ore/registry-import"))
write_top_owner_archives(corpus, Path("/data/ore/top-20-owner-archives"))

CurationPolicy also accepts declarative MetricRule entries over analyser or catalogue fields and named Python predicates. The policy receives a stable SHA-256 content ID which is embedded into package indexes and owner manifests. Changing a filter therefore cannot silently reuse an older curated result.

What is included

The published wheel contains the core feature set: schematic editing, all schematic formats, world import and export (including streaming), the schematic builder, the procedural building tool, definition regions, diff and fingerprinting, autostack, NBT helpers, SDF sampling, and the in-memory/filesystem store.

Redstone simulation, mesh generation, GPU rendering, and embedded scripting require building the package from source with the extra cargo features enabled (a Rust toolchain is required):

git clone https://github.com/Schem-at/Nucleation
cd Nucleation
pip install ./bindings/python

The source build defaults to the full feature set (bridge-full). Set the NUCLEATION_FEATURES environment variable to choose a different cargo feature list, for example NUCLEATION_FEATURES=bridge,simulation.

Documentation

License

MIT

Building a smaller feature set

Published wheels include bridge-full. A source build can select a smaller Cargo feature set, including transitive dependencies:

NUCLEATION_FEATURES=bridge pip install --no-binary=nucleation nucleation
NUCLEATION_FEATURES=bridge,rendering,mc-tick pip install --no-binary=nucleation nucleation

bridge is required. Cargo's normal default features stay enabled. Disabled features omit their Python types and methods, including animation rendering methods. Enable scripting-lua or scripting-js explicitly when needed; a minimal build requires neither scripting engine. Selection reads the same Cargo feature definitions and Rust bridge gates for checkouts and sdists.

On Android/Termux, the build explicitly links the interpreter library and android/log. Install matching Python development libraries; a missing interpreter library fails configuration. Ordinary Linux/macOS extensions keep nanobind's module linkage, without imposing a new libpython dependency.

Native errors

Catch nucleation.NucleationError for engine failures and inspect error.code against nucleation.NucleationErrorCode constants. This also applies to nucleation.core and the open/save convenience methods. Python argument errors are not converted into engine errors.

Download files

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

Source Distribution

nucleation-0.10.24.tar.gz (2.9 MB view details)

Uploaded Source

Built Distributions

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

nucleation-0.10.24-cp312-abi3-win_amd64.whl (12.0 MB view details)

Uploaded CPython 3.12+Windows x86-64

nucleation-0.10.24-cp312-abi3-manylinux_2_28_x86_64.whl (17.2 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.28+ x86-64

nucleation-0.10.24-cp312-abi3-macosx_11_0_arm64.whl (14.2 MB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

File details

Details for the file nucleation-0.10.24.tar.gz.

File metadata

  • Download URL: nucleation-0.10.24.tar.gz
  • Upload date:
  • Size: 2.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.14

File hashes

Hashes for nucleation-0.10.24.tar.gz
Algorithm Hash digest
SHA256 a04a349d46d46eed3c289c6b0f1328b21ae2a1c2f77e925531ca4a57ccca65a1
MD5 f4285423a80d08f69aa88c7863eaf7c5
BLAKE2b-256 118e96fc0ef85b6708d25f97922592872882e835b81ccf30e944cf926b67b263

See more details on using hashes here.

File details

Details for the file nucleation-0.10.24-cp312-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for nucleation-0.10.24-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 dc2c09c815a776772ed8a4cddb689c585546afa9bb9c29df5e7aab998edd94ed
MD5 f834350299ad95c922e78f74ecec0e84
BLAKE2b-256 14e1e9bddbe31b6f6a9af416e5049cbca1bcf13a0bcd8843a45b57c21c12650d

See more details on using hashes here.

File details

Details for the file nucleation-0.10.24-cp312-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nucleation-0.10.24-cp312-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b5dc1699265601545fd36fcdd9235891196c6498b4bc34004193e67fac76e648
MD5 018436cb40c6c949aa81121877d8fba2
BLAKE2b-256 a54ccaef7d02144e087c417c929fc0f23093a65b60524dfe9ae0c87f974534fb

See more details on using hashes here.

File details

Details for the file nucleation-0.10.24-cp312-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for nucleation-0.10.24-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a2b9df5466ecab23748ba06683bd726a370e38c82b552e08c30754b715d71241
MD5 364a1cc4f0cb74bdff04e31a6ea10051
BLAKE2b-256 0552bfc44b00f75d7a42db70e83e898f2d077073a521c97f79755e347c1cabe4

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.10.24 This release

4 files

0.10.23

4 files

0.10.22

4 files

0.10.21

4 files

0.10.20

4 files

0.10.19

4 files

0.10.18

4 files

0.10.16

4 files

0.10.15

4 files

0.10.14

4 files

0.10.13

4 files

0.10.12

4 files

0.10.9

4 files

0.10.8

4 files

0.10.7

4 files

0.10.4

4 files

0.10.1

4 files

0.10.0

4 files

0.9.2

4 files

0.9.1

4 files

0.8.0

4 files

0.7.0

4 files

0.6.0

4 files

0.5.1

4 files

0.5.0

4 files

0.4.1

4 files

0.4.0

4 files

0.3.19

4 files

0.3.18

3 files

0.3.17

3 files

0.3.16

3 files

0.3.15

3 files

0.3.14

3 files

0.3.13

3 files

0.3.12

3 files

0.3.11

3 files

0.3.10

3 files

0.3.9

3 files

0.3.8

3 files

0.3.7

3 files

0.3.6

3 files

0.3.5

3 files

0.3.4

3 files

0.3.3

3 files

0.3.2

3 files

0.3.1

3 files

0.3.0

3 files

0.2.18

6 files

0.2.15

6 files

0.2.13

6 files

0.2.12

6 files

0.2.11

6 files

0.2.10

6 files

0.2.7

6 files

0.2.6

6 files

0.2.5

6 files

0.2.4

6 files

0.2.3

6 files

0.2.2

6 files

0.2.1

6 files

0.1.184

6 files

0.1.183

6 files

0.1.182

2 files

0.1.181

2 files

0.1.179

2 files

0.1.172

2 files

0.1.171

2 files

0.1.170

2 files

0.1.169

2 files

0.1.168

2 files

0.1.167

2 files

0.1.166

2 files

0.1.163

2 files

0.1.156

2 files

0.1.155

2 files

0.1.154

2 files

0.1.153

2 files

0.1.152

2 files

0.1.151

2 files

0.1.150

2 files

0.1.149

2 files

0.1.148

2 files

0.1.147

2 files

0.1.146

2 files

0.1.145

2 files

0.1.144

2 files

0.1.143

2 files

0.1.142

2 files

0.1.141

2 files

0.1.140

2 files

0.1.138

2 files

0.1.136

2 files

0.1.135

2 files

0.1.134

2 files

0.1.133

2 files

0.1.132

2 files

0.1.130

2 files

0.1.129

2 files

0.1.128

2 files

0.1.127

2 files

0.1.126

2 files

0.1.125

2 files

0.1.124

2 files

0.1.123

2 files

0.1.122

2 files

0.1.120

2 files

0.1.119

2 files

0.1.118

2 files

0.1.117

2 files

0.1.116

2 files

0.1.115

2 files

0.1.114

2 files

0.1.113

2 files

0.1.112

2 files

0.1.111

2 files

0.1.110

2 files

0.1.109

2 files

0.1.108

2 files

0.1.106

2 files

0.1.105

2 files

0.1.104

2 files

0.1.103

2 files

0.1.102

2 files

0.1.101

2 files

0.1.100

2 files

0.1.99

2 files

0.1.98

2 files

0.1.97

2 files

0.1.95

2 files

0.1.94

2 files

0.1.93

2 files

0.1.92

2 files

0.1.90

2 files

0.1.89

2 files

0.1.87

2 files

0.1.85

2 files

0.1.84

2 files

0.1.83

2 files

0.1.82

2 files

0.1.81

2 files

0.1.80

2 files

0.1.79

2 files

0.1.78

2 files

0.1.77

2 files

0.1.75

2 files

0.1.72

2 files

0.1.71

2 files

0.1.69

2 files

0.1.68

2 files

0.1.67

2 files

0.1.62

2 files

0.1.58

2 files

0.1.48

2 files

0.1.45

2 files

0.1.44

2 files

0.1.43

2 files

0.1.42

2 files

0.1.39

2 files

0.1.38

2 files

0.1.32

2 files

0.1.31

2 files

0.1.25

2 files

0.1.21

2 files

0.1.20

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page