Skip to main content

nanofractal

codecov

Fast fractal fiducial-marker detection for Python. Fractal markers are nested square markers: they stay detectable under heavy occlusion and over a wide range of distances, and every visible level contributes corner correspondences for accurate pose.

nanofractal wraps an optimised C++ pipeline with nanobind: zero-copy NumPy ↔ cv::Mat, the GIL is released during detection, multi-threaded single-frame detection, and a parallel batch API.

Since 0.6 the library is fractal-only (the ArUco detector was removed).

📖 User guide — markers and printing, detection, pose, video, how to use it most efficiently, parameter tuning, API reference, troubleshooting. Every example in it is executed by the test-suite.


Performance

The hot path (adaptive threshold, contour tracing, polygon fitting, decoding) is a purpose-built reimplementation that returns bit-identical outer corners to the reference detector (checked by the test-suite against _reference_detect), and runs on all cores within a single frame.

Median latency per frame, FRACTAL_5L_6, synthetic scenes from nanofractal.bench, i5-12400 (6 cores / 12 threads), NF_MARCH=x86-64-v3, OpenCV 4.10 — the configuration of the published wheels:

scene / mode res 0.5, 1 core 0.6, 1 core 0.5, all cores 0.6, all cores gain (all cores)
marker in clutter, detect 1080p 11.3 ms 3.18 ms 12.3 ms 1.14 ms ×10.8
marker in clutter, with_inner_points 1080p 13.4 ms 4.23 ms 14.4 ms 2.29 ms ×6.3
no marker (clutter only) 1080p 12.7 ms 2.75 ms 13.8 ms 0.71 ms ×19
marker in clutter, detect 4K 52.6 ms 12.5 ms 49.5 ms 4.17 ms ×11.9
marker in clutter, with_inner_points 4K 54.6 ms 16.3 ms 55.3 ms 7.40 ms ×7.5
no marker (clutter only) 4K 55.3 ms 12.7 ms 55.1 ms 4.40 ms ×12.5
detect_batch, 48 × 1080p — — — 382 fps ~1360 fps ×3.6

With OpenCV 5.0 (whose own findContours is already ~3× faster than 4.10's) 0.6 is 2–2.5× faster than 0.5 on one core and 3–8.5× with all cores, e.g. 1080p detect 4.66 → 0.92 ms and 4K 15.9 → 4.14 ms.

Reproduce on your machine:

python -m nanofractal.bench --resolution 1920x1080 --scene perspective
python benchmarks/fractal_bench.py run --resolutions 1920x1080 3840x2160 --batch

Levers:

  • nf.set_num_threads(n) — threads used inside one detect() call (default: all cores; 1 = sequential, best for many concurrent detectors).
  • params.detection_scale — runs the threshold/contour stage on a downscaled frame (corners are still refined at full resolution); 0.5 is roughly 3–4× faster at 4K.
  • FractalTracker — for video: searches near the previous frame's markers (whole frame when they are lost), with identical accuracy; ~2× faster at 4K and 1.4–1.8× at 1080p on a moving-marker sequence.
  • detect_batch — parallelises across frames for offline throughput.

Installation

pip install nanofractal

Wheels are available for Linux x86_64/aarch64 and Windows AMD64 (x86_64 wheels require AVX2, i.e. Haswell 2013 or newer). They bundle a minimal OpenCV, so no system OpenCV is required at runtime.

Build from source

You need a C++17 compiler, CMake ≥ 3.18 and a development OpenCV — 4.x (core, imgproc, calib3d, features2d) or 5.x (core, imgproc, geometry, features):

sudo apt-get install -y build-essential cmake libopencv-dev   # Debian/Ubuntu
pip install .
NF_MARCH=x86-64-v3 pip install .     # AVX2 build (what the x86_64 wheels use)

Quick start

Inputs are plain NumPy uint8 arrays — (H, W) / (H, W, 1) grayscale or (H, W, 3) BGR, C-contiguous.

Generate a marker

import nanofractal as nf

marker = nf.generate_fractal("FRACTAL_5L_6", size_px=1200)   # every nested level
outer = nf.generate_fractal("FRACTAL_5L_6", size_px=1200, nested=False)  # external level only

The image spans the marker's black border exactly; leave a white quiet zone around it when printing. Configs: FRACTAL_2L_6, FRACTAL_3L_6, FRACTAL_4L_6, FRACTAL_5L_6 (number of nested levels).

Detect

import cv2
import nanofractal as nf

image = cv2.imread("scene.png")                  # (H, W, 3) uint8 BGR
det = nf.FractalDetector("FRACTAL_5L_6", marker_size=0.2)  # side in metres

res = det.detect(image)
print(res.ids)       # int32 (N,)      — one entry per visible marker level
print(res.corners)   # float32 (N,4,2) — outer corners, sub-pixel
for level_id, corners in res:
    ...

Pose (occlusion-robust)

estimate_pose returns (rvec, tvec, reproj_err) or None. It uses every visible inner and outer corner correspondence when available and falls back to the four outer corners otherwise; reproj_err (RMS px) lets you gate noisy poses.

res = det.detect(image, with_inner_points=True)
pose = det.estimate_pose(res, camera_matrix, dist_coeffs)       # fisheye=True for the fisheye model
if pose is not None:
    rvec, tvec, reproj_err = pose
    det.draw(image, res, camera_matrix, dist_coeffs, rvec, tvec)   # outlines + axes

The raw correspondences are exposed too: res.points_2d float32 (M, 2) and res.points_3d float32 (M, 3) (planar, z = 0).

Tune detection

p = nf.DetectorParams()
p.detection_scale = 0.5      # downscaled threshold/contour stage
p.min_contour_size = 60      # detect smaller markers (default 120 px perimeter)
p.adaptive_block_size = 21   # threshold window (odd, >= 3; -1 = auto)
p.adaptive_c = 7.0           # threshold constant
p.approx_poly_rate = 0.05    # polygon fit epsilon = perimeter * rate
p.subpix_win_size = 4        # corner refinement half-window (0 = off)
p.kfilter_min_dist = 10.0    # min distance between inner-corner keypoints
det = nf.FractalDetector("FRACTAL_5L_6", params=p)
det.params.adaptive_c = 5.0  # changes apply to the next detect()

Video

tracker = nf.FractalTracker(det)          # margin=0.25, pad=16
for frame in frames:
    res = tracker.detect(frame)           # same results as det.detect(frame)

More

  • detect(image, roi=(x, y, w, h)) — detect in a zero-copy sub-rectangle; corners come back in full-image coordinates.
  • detect_batch(images, num_threads=0, roi=None) — parallel over frames.
  • refine_corners(image, corners, win_size=5) — standalone cornerSubPix.
  • PoseSmoother(process_noise, measurement_noise, mode="kalman"|"ema") — temporal pose smoothing.
  • draw(..., inplace=False) — draw on a copy.

Errors: wrong dtype / non-contiguous input → TypeError; unsupported shape, empty frame, invalid config or parameters, invalid intrinsics → ValueError.


How it is fast

  • Fused adaptive threshold. Separable box sums (horizontal first, uint16, ring buffer + running vertical window), reproducing OpenCV's fixed-point / float rounding of the mean exactly, written straight into a zero-bordered buffer together with 8-neighbour occupancy masks. Row stripes run in parallel.
  • Contour tracing. Suzuki–Abe border following identical to cv::findContours(RETR_LIST, CHAIN_APPROX_NONE) (sequential), with SIMD start detection, one mask load per step and no allocation for contours below the minimum size. Isolated speckle pixels (most contours in noisy frames) are skipped without tracing. Row bands are traced in parallel: each band keeps its own pixel labels and a contour is kept by the band holding its start, the ownership rule also used by OpenCV's data-race-free TRUCO tracer; the test-suite checks the result against findContours on millions of contours, including bands one row high. It is 2–3× faster than OpenCV 5.0's own parallel findContours at every thread count (1080p, 12 threads: 0.31 vs 0.72 ms).
  • Polygon fit + decoding in parallel per contour, with exact replicas of OpenCV 4's and OpenCV 5's approxPolyDP (they differ) and no per-frame heap traffic.
  • Inner points. FAST runs only around the marker; keypoint filtering and matching use grids instead of O(n²) scans.
  • Tracking (FractalTracker): region-of-interest search around the previous detection, after Romero-Ramirez et al., Speeded up detection of squared fiducial markers (2018). Their other lever — shrinking the image to the previous marker size — was tested and rejected: it raised the corner error from 0.39 to 1.3 px.
  • Zero-copy input, GIL released, a detector pool for detect_batch.

The one intentional behaviour difference from the reference detector: with with_inner_points=True, the FAST response threshold is computed over the marker's neighbourhood instead of the whole frame. Outer corners are unchanged.


Changelog

See CHANGELOG.md.

Citation

If you use this in research, please cite the original work:

  • F. J. Romero-Ramirez, R. Muñoz-Salinas, R. Medina-Carnicer, "Fractal Markers: A New Approach for Long-Range Marker Pose Estimation Under Occlusion", IEEE Access, 7, 2019.
  • F. J. Romero-Ramirez, R. Muñoz-Salinas, R. Medina-Carnicer, "Speeded up detection of squared fiducial markers", Image and Vision Computing, 76, 2018.

License

Apache-2.0. The vendored fractal detector is © its authors and used under its terms; see third_party/ and PATCHES.md.

Metadata

Release files for nanofractal 0.6.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nanofractal 0.6.1
File Size Uploaded Provenance Actions
nanofractal-0.6.1.tar.gz 130.8 kB With provenance Details for nanofractal-0.6.1.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for nanofractal 0.6.1
File Actions
nanofractal-0.6.1-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for nanofractal-0.6.1-cp313-cp313-win_amd64.whl
nanofractal-0.6.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for nanofractal-0.6.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
nanofractal-0.6.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64, Linux glibc 2.27+ ARM64 Details for nanofractal-0.6.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
nanofractal-0.6.1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for nanofractal-0.6.1-cp312-cp312-win_amd64.whl
nanofractal-0.6.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details for nanofractal-0.6.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
nanofractal-0.6.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64, Linux glibc 2.27+ ARM64 Details for nanofractal-0.6.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
nanofractal-0.6.1-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for nanofractal-0.6.1-cp311-cp311-win_amd64.whl
nanofractal-0.6.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for nanofractal-0.6.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
nanofractal-0.6.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ ARM64, Linux glibc 2.28+ ARM64 Details for nanofractal-0.6.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
nanofractal-0.6.1-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for nanofractal-0.6.1-cp310-cp310-win_amd64.whl
nanofractal-0.6.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details for nanofractal-0.6.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
nanofractal-0.6.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64, Linux glibc 2.27+ ARM64 Details for nanofractal-0.6.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
nanofractal-0.6.1-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details for nanofractal-0.6.1-cp39-cp39-win_amd64.whl
nanofractal-0.6.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details for nanofractal-0.6.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
nanofractal-0.6.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ ARM64, Linux glibc 2.27+ ARM64 Details for nanofractal-0.6.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Total release size: 147.2 MB

Release files / nanofractal-0.6.1.tar.gz

Download URL nanofractal-0.6.1.tar.gz
Size 130.8 kB
Tags Source
SHA-256 checksum
How to use checksums
d401c4da16a04e97d0d6590f874af7208ea9ac2c3826b926c9f5693ff2e8fd59
BLAKE2b-256 checksum
How to use checksums
f7693d3fb2347e46240d459f0bb753841690ae0f9b74196ef90a85eac361c3bc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / nanofractal-0.6.1-cp313-cp313-win_amd64.whl

Download URL nanofractal-0.6.1-cp313-cp313-win_amd64.whl
Size 23.9 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
5cac8e77d808d9d7f4f0a74f65b742974347a1dc4798617545f280961b962126
BLAKE2b-256 checksum
How to use checksums
abccc68f610e6ff7872bbb3be032db82938694c79b5e86cb5ed09c5aee846e95
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / nanofractal-0.6.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL nanofractal-0.6.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 3.1 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
69ddcd2c2b3d48be30ef4c114edc7e98d4dc332e6bff567c91b138b2ed071d95
BLAKE2b-256 checksum
How to use checksums
04290313e50a153000f4291836186300bf2ab8430e7739834720ce446ab7a877
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / nanofractal-0.6.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL nanofractal-0.6.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 2.4 MB
Tags CPython 3.13 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
f800544d12effbff9247c6e84bc11387bc15cea664e95767f94e3d71b9ef3034
BLAKE2b-256 checksum
How to use checksums
fce9b7a60b6897557fd0fa4e472c3b2c7ffaf5072ba41d06b62134c47b29ea32
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / nanofractal-0.6.1-cp312-cp312-win_amd64.whl

Download URL nanofractal-0.6.1-cp312-cp312-win_amd64.whl
Size 23.9 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
167c50ce34f9dc4d1c74e022e317c71a40daaa23a4eac11e0c7277bc8e79c6fe
BLAKE2b-256 checksum
How to use checksums
5962c5f380c05c86ae8c1df9039939ed9f5975279741366bad72d2539892fa42
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / nanofractal-0.6.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL nanofractal-0.6.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 3.1 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
d6a5c3238d974f2bf79f106faefae2c9c1b83e3d949a11f0ed31bbfd06d35f6d
BLAKE2b-256 checksum
How to use checksums
3d30266e06060ab3aa922c16d9295b490ca9b17d37885e1e5395a4d98b967a07
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / nanofractal-0.6.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL nanofractal-0.6.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 2.4 MB
Tags CPython 3.12 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
3ee45fd89c5d01b5a87d3bbc8b38d39ce3c9b1bd82a45f711ea307b805cb5329
BLAKE2b-256 checksum
How to use checksums
02ec8112a8fe766c65f512e4cce6c568c2c2dd27fbd49dced937ca6db87efedc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / nanofractal-0.6.1-cp311-cp311-win_amd64.whl

Download URL nanofractal-0.6.1-cp311-cp311-win_amd64.whl
Size 23.9 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
e7765721a9342583957b38b9ea7c8538b41995f4d04540504b9e939838201a71
BLAKE2b-256 checksum
How to use checksums
6755ab31beeb4a56a8ec5e257eb7e634eec029ae135ecdc97780771a926e1c9c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / nanofractal-0.6.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL nanofractal-0.6.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 3.1 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
5aeb7906cba752c07fdd7056792b8fd6c76a7d7e3c346130828e03e3e49df9e7
BLAKE2b-256 checksum
How to use checksums
016053f8c1bff20ceec0da07a6036396e10980d36bab293c212b3c961c61e6a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / nanofractal-0.6.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL nanofractal-0.6.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 2.4 MB
Tags CPython 3.11 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
c782116925c6251f723d03ca12cdbc8dc16e1c5259b85bdd75836d9aa0d8eb55
BLAKE2b-256 checksum
How to use checksums
78582137eb0b3dc13a35de1e204944638d0577da2bd68d05acbb0835c6a05f7c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / nanofractal-0.6.1-cp310-cp310-win_amd64.whl

Download URL nanofractal-0.6.1-cp310-cp310-win_amd64.whl
Size 23.9 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
ba427b0775649853b3f5c14e475c8da84b110681f8c72faaf96e36a3f512624e
BLAKE2b-256 checksum
How to use checksums
585e332c5d5a39c43ff9163650e253f4e827fbb4c2108c099ecd99555fe65679
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / nanofractal-0.6.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL nanofractal-0.6.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 3.1 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
fdfd61065f75c27ecb4a8b26839e75dbd010bef50b04fbac377d5937fdcda503
BLAKE2b-256 checksum
How to use checksums
66579b34db2c191f3324e89232c5dd5a91b0c653f1ef1e0f28e9a2cb3156c484
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / nanofractal-0.6.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL nanofractal-0.6.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 2.4 MB
Tags CPython 3.10 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
3f8f0eff2dc21617a921371796d83d32c867e22333b79205898acdd3eec5c6dc
BLAKE2b-256 checksum
How to use checksums
fbf22fd73fff8e85282e0c124d8613312becb933e004ee5176f881d610a4c6ed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / nanofractal-0.6.1-cp39-cp39-win_amd64.whl

Download URL nanofractal-0.6.1-cp39-cp39-win_amd64.whl
Size 23.9 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
90d07e7a2bd0d16a284a9e657fb76c1f9ab8dc36cc016844f9f910190f107460
BLAKE2b-256 checksum
How to use checksums
f4dc0ae86b6c1aaaceb4b2213ccfe461de0946c6fc10767e6b6e4e5c4d6de175
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / nanofractal-0.6.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL nanofractal-0.6.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 3.1 MB
Tags CPython 3.9 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
96c186ae94eddba080ffdd623b092d934aae0ea8a48d2d23fb35fd236c8af4b1
BLAKE2b-256 checksum
How to use checksums
940c86ee3b60aa487e2d8a8f70335bb651277b381d5e9f0933f07a35cc9ec57e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / nanofractal-0.6.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL nanofractal-0.6.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 2.4 MB
Tags CPython 3.9 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
55af752f2a4fec6981ee36fbf0ce66cc5b868d3adc3fb0ade0a35ff748ffba83
BLAKE2b-256 checksum
How to use checksums
e3ec0ae3805b7ff54a2ee1d174f626b2efdb53dd8cf8158c4e4ebe2aaabc7b09
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Security for nanofractal 0.6.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 16 files in this release have been uploaded with provenance metadata.

Select from 16 files

Attestation for nanofractal-0.6.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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