Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

 loom-py

import loom

model = loom.Model.from_pretrained("loom-ai-org/gemma-3-270m-it-loom")
print(model.text2text.chat("Who discovered Brazil?"))
# 'The discovery of Brazil was made by **Hernán Cortés**.'   (one sample: this
# checkpoint declares do_sample, so pass temperature=0.0 for the same answer twice)

Two APIs, and which one you want

The high-level API is one door per task, named for the modality pair it maps between. Every model carries all of them; the ones it does not answer to say so when called, naming what it actually is.

model.text2text.infer("The capital of France is")        # -> str, a raw completion
model.text2text.chat("Who discovered Brazil?")           # -> str, asked inside a turn
model.speech2text.infer(waveform, language="en")         # -> Transcription
model.text2speech.infer("hello world")                   # -> Audio
model.text2class.infer("Wolfgang lives in Berlin")       # -> Classification, a label per token
model.text2codes.infer("[S1] Hello world.")              # -> codec tokens, frame-major
model.codes2speech.infer(codes)                          # -> Audio, the other half of that pair
model.speech2class.infer(waveform)                       # -> AudioClasses, per clip or per frame
model.speech2embeddings.infer(waveform)                  # -> list[float] per clip, or FrameEmbeddings per frame

Which door a model answers is read off the file, not guessed from its name:

model.task            # 'automatic-speech-recognition'
model.capabilities    # ('speech2text',)
model.text2speech.infer("hi")
# UnsupportedTask: this model is speech2text (automatic-speech-recognition), not text2speech.

Each door does the whole job, including the parts you cannot do from outside. speech2text windows audio for a model whose graph is built at one clip length, decodes with the early stop armed, splits the output into timestamped segments and seeks to where the model closed its last segment — so an utterance straddling a window edge is re-decoded whole rather than arriving as two fragments:

r = model.speech2text.infer(audio, language="en", timestamps=True)
r.text                        # the joined transcript
r.segments[0].start, .end     # seconds, whole-file
r.timestamped                 # whether those are boundaries the model chose

text2speech returns audio with its rate attached, because a bare list of floats played at the wrong rate does not fail — it plays at the wrong speed:

audio = model.text2speech.infer("hello world", steps=8, seed=1)
audio.sample_rate             # 22050
audio.save("out.wav")

text2class returns the labelled pieces beside the label set they came from, because neither is recoverable from the other — a WordPiece encode splits words, so joining the pieces back up is a rule only you can make:

r = model.text2class.infer("Wolfgang lives in Berlin")
r.labels                      # ['O', 'B-MISC', 'I-MISC', 'B-PER', ...] — every class the model has
[(t.piece, t.label) for t in r]
# [('Wolfgang', 'B-PER'), ('lives', 'O'), ('in', 'O'), ('Berlin', 'B-LOC')]

The framing tokens the encode added ([CLS]/[SEP]) are dropped for you, on the ids the file declares rather than on their spelling; strip_special=False keeps them if you want the raw alignment.

speech2class returns the model's own distribution, not a decision — a VAD is thresholded and smoothed differently by every consumer, and a language id is read top-k — with the time each frame row starts at, read off the file:

r = vad.speech2class.infer(audio)            # one row per 20 ms frame
r.granularity, r.labels                      # 'frame', ['non_speech', 'speech']
speech = r.probability("speech")             # the speech curve
r.times[:3]                                  # [0.0, 0.02, 0.04] — seconds, frame starts
lid.speech2class.infer(audio).top(3)         # [('th: Thai', 0.988), ('lo: Lao', 0.012), ...]

speech2embeddings returns the model's vector unnormalised; comparing two (cosine, for a speaker embedding) and choosing a threshold are yours. A frame-level embedder (WakeHuBERT) returns a FrameEmbeddings instead: rows (one vector per frame), dim, and times, each row's start in seconds.

A model that speaks through a codec is two files, and the codes are what joins them. An autoregressive codec LM emits discrete tokens, not audio; a neural codec turns those tokens into a waveform. They stay separate because one codec serves many LMs, and because the codes are worth having on their own — cache them, stream them, decode them at a different rate:

codes = dia.text2codes.infer("[S1] Hello world.")   # -> [[568, 778, ...], ...] frame-major rows
audio = dac.codes2speech.infer(codes)              # -> Audio

Nothing goes between the two calls. Both files declare loom.codec.n_codebooks, so a pair that does not fit says so instead of producing audio of the wrong duration:

dia.hparam("codec.n_codebooks", "u32") == dac.hparam("codec.n_codebooks", "u32")

text2codes counts max_new_tokens in audio frames, not decoder rows — the two differ by the model's delay pattern, which is an artefact of how codebooks are written rather than anything you asked for.

The low-level API is the driver's own entry point, and stays raw. infer passes your arguments straight through, so which ones a model takes is a property of the model rather than of this package:

model.tokenize("The capital of France is")   # [1, 1098, 5706, 803, 4481, 856]
model.detokenize([1, 1098, 5706])            # '<|startoftext|>The capital'
model.infer(tokens=[16, 40, 22, 30], n_steps=4, seed=1234)   # the driver's own inputs
print(model.driver_source)                   # the Lua that will run, and what it accepts

Use it when you want a knob the high-level door does not name — VITS's noise_scale_w, a specific voice vector, a model's own second entry point. That is the boundary between the two: a knob with no canonical role is reachable through infer and nowhere else.

Text to speech, and the one step that is not in the file

Every TTS model here takes text now, but two of them get there differently. Supertonic encodes graphemes itself. The other four consume phoneme ids — and the symbol table that turns phonemes into their ids ships in the GGUF, so model.tokenizer is a real vocabulary for all of them:

model.tokenizer                      # <loom.Tokenizer 'phonemes' size=159>
model.tokenize("h\u0259\u02c8lo\u028a")             # -> ids, with the model's own BOS/blank/EOS assembly

What is not in the file is grapheme-to-phoneme, because that is a property of the language rather than of any checkpoint. It is an optional extra:

pip install "loom-py-rt[phonemes]"

With it, text2speech.infer("hello world") works on all five. Without it, passing phonemes= or tokens= works exactly as before and only the text door is absent, with an error naming the install. loom.phonemizers.register("ipa", fn) substitutes your own.

Choosing a device

A wheel built with a GPU backend uses it by default; one built without has only a CPU to find, so nothing changes.

model = loom.Model.from_file("qwen3.gguf")                  # decide for me (or $LOOM_DEVICE)
model = loom.Model.from_file("qwen3.gguf", device="cpu")    # pin it
model = loom.Model.from_file("qwen3.gguf", device="gpu")    # demand one; raises if there is none
model.device, model.device_description   # ('Vulkan0', 'AMD Radeon Vega 3 Graphics (RADV RAVEN2)')

"gpu" raises rather than falling back, because a caller who spelled it out is asking a question about the machine and a silent CPU run is how a large slowdown goes unnoticed. "auto" — the default — is the one that falls back.

The base wheel is CPU-only, and an accelerator is a separate install rather than a different wheel:

pip install "loom-py-rt[vulkan]"

That adds one small package holding one libggml-vulkan.so, which this package finds at import; device="auto" then uses it and nothing about the base wheel changes. The reason it works this way — rather than a full wheel per accelerator, which is the more familiar shape — is that a Vulkan backend is 46.5 MB and CUDA is larger, so the per-accelerator matrix does not fit PyPI's 100 MB per-file ceiling. See packaging/README.md.

loom.devices()   # [{'name': 'Vulkan0', 'description': 'AMD Radeon Vega 3 Graphics (RADV RAVEN2)', ...}]

Worth calling after installing one, because a backend whose driver is too old — or which finds no supported device — loads without error and registers nothing, and the only other symptom is a model running at CPU speed. Note that with this build every backend is loaded at run time, the CPU included, so an empty device list means no backend library was found at all rather than no accelerator.

Which ops fall back to the CPU, and why some always will, is documented in loom.cpp's own build notes.

Why there is so little API

A loom GGUF carries its own graph topologies and its own driver script alongside its weights, so this package contains no per-architecture code at all. Loading a model registers whatever topologies the file declares and attaches a KV cache to the ones that say they need it; running one calls the driver the file shipped with. A model this library has never heard of works the day loom-exporter can produce it.

That is also why infer takes **kwargs: its arguments are the driver's arguments, and which ones a model takes is a property of the model. model.driver_source prints the Lua that will run, whose header comment documents its inputs — that is the authority.

model = loom.Model.from_file("granite_speech_mil.gguf")
model.architecture          # 'granite-speech'
model.topologies            # ['encoder', 'embed', 'decoder', 'lm_head']
model.hparam("samples_per_chunk")   # 192000
print(model.driver_source)  # what infer() will run, and what it accepts

Supported models

Twenty-two, published at huggingface.co/loom-ai-org and loadable by id with from_pretrained (needs the [hub] extra). This package has no per-architecture code, so the list is a property of loom-exporter, not of anything here.

Language models

Model Exported from
loom-ai-org/qwen3-0.6b-base-loom Qwen/Qwen3-0.6B-Base
loom-ai-org/lfm2-350m-monolithic-loom LiquidAI/LFM2-350M
loom-ai-org/lfm2-350m-modular-loom LiquidAI/LFM2-350M
loom-ai-org/smollm2-360m-instruct-loom HuggingFaceTB/SmolLM2-360M-Instruct
loom-ai-org/gemma-3-270m-it-loom google/gemma-3-270m-it

These are the models text2text answers to; model.generate(...) is the same call under the name it shipped with.

infer and chat are different questions. infer CONTINUES a prompt, which is what a base model does; chat puts the prompt inside a turn using the checkpoint's own chat template and asks for a reply. An instruction-tuned model handed a raw prompt behaves like a base model and continues in the prompt's own format, which reads exactly like it is repeating you back — so use chat for the instruction-tuned rows above, and infer for the base ones. model.chat_roles says which a file is: empty means it carries no template, and Gemma 3's is ['user', 'assistant'] because its template folds a system message into the first user turn rather than emitting a block for it.

Decoding follows the checkpoint's own generation_config.json — Gemma 3 ships top_k 64, top_p 0.95 and is sampled; everything else here is greedy. Name temperature, top_k, top_p or seed to override it.

Text to text, through an encoder-decoder

Model Exported from
loom-ai-org/flan-t5-small-loom google/flan-t5-small

The same model.text2text.infer(...) door as the models above — a host asking for text and getting text back should not have to know whether one stack or two produced it — but the advice about chat does not apply. This one is instruction-tuned and carries no chat template: the instruction is part of the text, as in "translate English to German: ..." or "Answer the following question. ...". model.chat_roles is empty, which is the file saying so.

Speech recognition

Model Exported from
loom-ai-org/whisper-small-loom openai/whisper-small
loom-ai-org/conformer-ctc-small-loom nvidia/stt_en_conformer_ctc_small
loom-ai-org/parakeet-tdt-0.6b-loom nvidia/parakeet-tdt-0.6b-v3
loom-ai-org/parakeet-rnnt-0.6b-loom nvidia/parakeet-rnnt-0.6b
loom-ai-org/gigaam-v3-rnnt-loom ai-sage/GigaAM-v3
loom-ai-org/qwen3-asr-0.6b-loom Qwen/Qwen3-ASR-0.6B
loom-ai-org/granite-speech-4.0-1b-loom ibm-granite/granite-4.0-1b-speech

model.speech2text.infer(waveform, language="en") — the mel frontend is inside the graph, so a raw waveform is the input, and long audio is windowed and seeked for you.

Speech synthesis

Model Exported from
loom-ai-org/kokoro-82m-loom hexgrad/Kokoro-82M
loom-ai-org/matcha-tts-ljspeech-loom Matcha-TTS (LJSpeech checkpoint)
loom-ai-org/supertonic-2-loom Supertone/supertonic-2
loom-ai-org/vits-piper-en-gb-miro-loom OpenVoiceOS/pipertts_en-GB_miro
loom-ai-org/styletts2-ljspeech-loom yl4579/StyleTTS2-LJSpeech

All five take text through model.text2speech.infer(...); the four phoneme-input ones need the [phonemes] extra for the G2P step (see above), and every one of them accepts phonemes= or tokens= without it. Kokoro and Supertonic ship a default voice, so a published file speaks on its own. model.driver_source is the authority on what each driver accepts.

Token classification

Model Exported from
loom-ai-org/distilbert-ner-loom dslim/distilbert-NER
loom-ai-org/punctuate-all-loom kredor/punctuate-all

model.text2class.infer("My name is Wolfgang and I live in Berlin") — one label per token, and the labels come back beside the PIECES the tokenizer produced rather than beside your words, since a vocabulary splits some of them. result.labels is every class the checkpoint can choose between.

Both answer through that one door and what differs is entirely what a label MEANS. The NER row's classes are entity tags, so the labels are read as SPANS (B-PER I-PER is one person). The punctuation row's are the mark that follows the token across twelve languages, so they are read back into a SENTENCE — feed it text with the punctuation already removed, and take each word's mark from its LAST piece.

Text to codec tokens, and the codec that decodes them

Model Exported from
loom-ai-org/dia-1.6b-loom nari-labs/Dia-1.6B-0626
loom-ai-org/dac-44khz-loom descript/dac_44khz

These two compose, and that is the point of the pair: model.text2codes.infer(...) turns a sentence into codec tokens, and model.codes2speech.infer(...) on the codec file turns those into a waveform. Neither is a speech model on its own — the first emits integers and the second takes them — which is why they declare audio_codes rather than audio on the side where they meet.

The three repos

loom.cpp the engine, vendored here as a submodule
loom-exporter produces the GGUFs this runs
loom-py this one

Installing

pip install loom-py-rt           # once published -- `loom-py` on PyPI clashes with `loompy`,
                                  # and `loom-engine` normalizes to the already-taken `loomengine`
pip install loom-py-rt[hub]      # + from_pretrained()

Supported platforms

CPython 3.10–3.13, on:

Platform Wheel tag Covers
Linux x86-64, glibc ≥ 2.28 manylinux_2_28_x86_64 anything not already EOL
Linux aarch64, glibc ≥ 2.28 manylinux_2_28_aarch64 Raspberry Pi 4 and 5 on 64-bit Raspberry Pi OS, Jetson/Grace, Graviton, Ampere
macOS on Apple Silicon, ≥ 14.0 macosx_14_0_arm64 M1 through M4, verified on an M1 Pro
macOS on Apple Intel, ≥ 14.0 macosx_14_0_x86_64 built and imported in CI — see below
Linux ARMv6, glibc ≥ 2.36 linux_armv6l Raspberry Pi Zero / Zero W / Pi 1 — a release asset, not a PyPI install; see below

There is no per-CPU choice to make. The wheel ships every libggml-cpu-*.so variant ggml builds for the architecture and picks one at import by scoring each against the CPU's own feature flags, so the same file serves the oldest and newest machine on its architecture. loom.devices() is how you check it worked.

Why macOS 14 and not 11. It is not an arbitrary floor and it is not the newest thing that happened to build. ggml's BLAS backend is compiled against Accelerate's new BLAS interface, whose symbols arrive in macOS 13.3 — and that backend is worth 1.80x on whisper-small, so dropping it was the worse trade. An 11.0-tagged wheel would install on macOS 11 or 12 and then quietly have no BLAS, because a backend that fails to dlopen is skipped silently. The floor is the honest version of what the binaries already require — 14 rather than 13.3 only because a wheel tag carries no minor version above macOS 11, so 13.3 is not a thing a wheel can say.

Apple Silicon and Apple Intel are not equally supported, and the table means two different things by "covers". The arm64 wheel is built, installed and exercised on a real M1 Pro — the apple_m1 rung, which is the lowest of ggml's three Apple rungs and so the one every arm64 wheel has to serve. Apple Intel is CI-only: it is built and imported by a runner and nobody here owns the hardware, so treat it as best-effort rather than as parity.

Metal is a separate package, not part of the macOS wheel — pip install "loom-py-rt[metal]". It is only 0.87 MB, so that split is not about size: a GPU outranks the CPU when you let the library choose a device, and on unified memory that ranking is not reliably right. Measured on an M1 Pro, whisper-small is 1.76x faster on Metal and VITS is 1.79x slower — so which way it goes still depends on the model, and asking for the package is how you opt into that trade. loom.devices() shows what you got.

Raspberry Pi. Every model in the range is covered, by one of two different routes, and which one you are on is uname -m.

aarch64 — a Pi 3, 4, 5 or Zero 2 W on 64-bit Raspberry Pi OS — is a plain pip install loom-py-rt and needs nothing else. This is the route to prefer wherever the board can take it: a Zero 2 W is ARMv8 hardware, and running it on the 32-bit image gives up NEON and every __aarch64__ optimisation in the engine for nothing.

armv6l — a Pi Zero, Zero W or Pi 1 — has a wheel too, and it is not on PyPI:

pip install https://github.com/loom-ai-org/loom-py/releases/latest/download/loom_py_rt-1.0.0rc15-cp311-cp311-linux_armv6l.whl

PyPI accepts only manylinux* and musllinux* platform tags for Linux and the manylinux policy's floor is armv7, so linux_armv6l is refused at upload — there is nothing to fix and no index to wait for. The wheel is a GitHub release asset instead, built on every release in an emulated Raspbian (.github/docker/Dockerfile.armv6) and checked under QEMU_CPU=arm1176, which is the Zero's own core. Verified on a real Pi Zero W, not only under emulation.

It is slow, and the Pi 4 numbers on this page do not transfer. An ARM1176 is one ~1 GHz core with VFPv2 and no SIMD at all, so this rung runs the generic-C kernels: nothing in libggml-cpu.so here is vectorised, because there is nothing to vectorise with. The 512 MB of RAM is the harder limit — a small TTS model at Q4_0 is the shape that fits; the 0.6B ASR and LM models are not.

armv7l — a Pi 2/3/4 on 32-bit Raspberry Pi OS — builds by the same path but has no published wheel and no board here to verify one on, so pip finds nothing and falls back to an sdist build. Install the 64-bit OS instead; the hardware is ARMv8 either way.

Which variant a board loads, verified under QEMU on every release by raspberry-pi-check in .github/workflows/wheels.yml:

Board Core Loads Because
Pi 4 / 400 / CM4 Cortex-A72, ARMv8.0-A armv8.0_1 no dotprod, no FP16 arithmetic, no SVE — the other seven variants score 0
Pi 5 / CM5 Cortex-A76, ARMv8.2-A armv8.2_2 dotprod + FP16, no SVE

Nothing extra is installed on a Pi: the CPU is the backend. [vulkan] does resolve on aarch64 and a Pi 5's V3D exposes Vulkan through Mesa, but no measurement here says that is worth doing — the CPU path is the supported one.

Windows has no wheels, and a source install does not currently work there. macOS does: both Apple architectures build from a checkout as well as from a wheel — see Supported platforms above. (Epic-08)

From a checkout — note --recursive, since the engine is a submodule:

git clone --recursive https://github.com/loom-ai-org/loom-py
cd loom-py && pip install -e .

No runtime dependencies. Arrays cross the boundary as plain sequences of floats, so numpy is something you may use rather than something this package makes you install — list, array.array, numpy arrays and torch tensors all work.

Testing

pytest tests/ci      # the Python layer: coercion and error paths. No model. What CI runs.
pytest tests/gate    # a real exported GGUF, end to end.
export LOOM_TEST_MODEL=~/loom-fixtures/matcha_mil.gguf
export LOOM_TEST_MODEL_INPUTS='{"tokens":[16,40,22,30,12,3],"n_steps":4,"seed":1234}'
pytest tests/gate -q

The gate suite is written against no particular architecture on purpose: it asserts the shape of what a loom model is, which is the whole of what this package knows. A test that expected one model's inputs would be this package learning about a model, which is the thing the design exists to avoid.

Roadmap

Shared with loom.cpp, because three of the four are the engine's and this package inherits them by having no per-architecture code of its own.

1. GPUs and NPUs — the packaging is built; the backends beyond Vulkan are what remain. The engine schedules a graph across a device backend and a CPU fallback, this package exposes the choice as device= (above), and the wheel shape that lets an accelerator ship at all now exists.

The shape that is NOT wanted is a wheel per accelerator per architecture — PyPI's wheel tags have no accelerator dimension, so that is torch's cu121 arrangement, and it multiplies every future backend by every existing platform. GGML_BACKEND_DL makes the better shape possible and this package is now built that way: one arch-tagged base wheel, plus small backend packages that drop a .so where ggml looks for it, so pip install "loom-py-rt[cuda]" means "also fetch that backend", device="auto" finds it, and a Raspberry Pi installs nothing extra. packaging/rt-vulkan/ is the worked example; a CUDA package is that directory with two strings changed, waiting only on a machine with an NVIDIA GPU to build and test against. Tracked in Epic-04, along with which backends are reachable at all (CUDA, OpenVINO and Qualcomm's are already in the pinned ggml; CoreML and RKNPU2 are not).

2. Wheels for more platforms. Linux x86-64 and aarch64 and both Apple architectures today — see Supported platforms above, which is what pip install loom-py-rt resolves to. Windows is what remains, and it is behind the same kind of work macOS needed: not a missing CI row, but a symbol-visibility rule, a linker-path spelling and a build-system assumption that each differ (Epic-08, Retro-024).

3. More models — Epic-03, ordered by coverage per unit of effort. BERT token classifiers (the smallest possible template, and the first non-audio task), codec decoders, text encoder-decoders, CNN+CTC and SANM encoders are all done; what is left is the remaining TTS families → small classifiers → music. Each lands here for free: a model this package has never heard of works the day the exporter can produce it.

4. The follow-ups the docs already name — docs/backlog/active-index.md is the ledger for all three repos and the authority. The ones that would show up in this API: a permissively-licensed phonemiser, which is what would give the four phoneme-input TTS models a tokenize; and the KvCache memory redesign and quantized KV cache, which decide how large a model this can run on a given machine.

Licence

MIT — see LICENSE.

Metadata

Release files for loom-py-rt 1.0.0rc15

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

Source distribution (sdist)

Source distribution for loom-py-rt 1.0.0rc15
File Size Uploaded Provenance
loom_py_rt-1.0.0rc15.tar.gz 3.1 MB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for loom-py-rt 1.0.0rc15
File
loom_py_rt-1.0.0rc15-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
loom_py_rt-1.0.0rc15-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
loom_py_rt-1.0.0rc15-cp313-cp313-macosx_14_0_x86_64.whl CPython 3.13 CPython 3.13 macOS 14.0+ x86-64 Details
loom_py_rt-1.0.0rc15-cp313-cp313-macosx_14_0_arm64.whl CPython 3.13 CPython 3.13 macOS 14.0+ ARM64 Details
loom_py_rt-1.0.0rc15-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
loom_py_rt-1.0.0rc15-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ ARM64, Linux glibc 2.28+ ARM64 Details
loom_py_rt-1.0.0rc15-cp312-cp312-macosx_14_0_x86_64.whl CPython 3.12 CPython 3.12 macOS 14.0+ x86-64 Details
loom_py_rt-1.0.0rc15-cp312-cp312-macosx_14_0_arm64.whl CPython 3.12 CPython 3.12 macOS 14.0+ ARM64 Details
loom_py_rt-1.0.0rc15-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
loom_py_rt-1.0.0rc15-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
loom_py_rt-1.0.0rc15-cp311-cp311-macosx_14_0_x86_64.whl CPython 3.11 CPython 3.11 macOS 14.0+ x86-64 Details
loom_py_rt-1.0.0rc15-cp311-cp311-macosx_14_0_arm64.whl CPython 3.11 CPython 3.11 macOS 14.0+ ARM64 Details
loom_py_rt-1.0.0rc15-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
loom_py_rt-1.0.0rc15-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
loom_py_rt-1.0.0rc15-cp310-cp310-macosx_14_0_x86_64.whl CPython 3.10 CPython 3.10 macOS 14.0+ x86-64 Details
loom_py_rt-1.0.0rc15-cp310-cp310-macosx_14_0_arm64.whl CPython 3.10 CPython 3.10 macOS 14.0+ ARM64 Details

Total release size: 103.6 MB

Release files / loom_py_rt-1.0.0rc15.tar.gz

Download URL loom_py_rt-1.0.0rc15.tar.gz
Size 3.1 MB
Tags Source
SHA-256 checksum
How to use checksums
a1d87e1dafe49077f9f488a672658fa7aee66f94373bd22f581c388c4b70a46c
BLAKE2b-256 checksum
How to use checksums
f1cb0a0ad68cbf13125fc89ad392c2139e5d1ccf20f31bb7c03732822731e1a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 8, 2026.

Transparency log

Release files / loom_py_rt-1.0.0rc15-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL loom_py_rt-1.0.0rc15-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 8.9 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
9c9c87c2aa914a56ab357af7581c1d9156b6f80a6f2038d9911edc128a02c8bc
BLAKE2b-256 checksum
How to use checksums
4a06ba7d96465413ce9d19244e440199001f3144d1b87df863282c8c3a165115
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 8, 2026.

Transparency log

Release files / loom_py_rt-1.0.0rc15-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL loom_py_rt-1.0.0rc15-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 4.8 MB
Tags CPython 3.13 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
2ddaa382a3c8b9b3990b34a90cd5b8c358c1b707458effa360fe3eb1509f5f98
BLAKE2b-256 checksum
How to use checksums
b63543fa3309ab4ad96cc5a0e3d82175eae31d12e9274ef8d68ace1743340307
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 8, 2026.

Transparency log

Release files / loom_py_rt-1.0.0rc15-cp313-cp313-macosx_14_0_x86_64.whl

Download URL loom_py_rt-1.0.0rc15-cp313-cp313-macosx_14_0_x86_64.whl
Size 8.9 MB
Tags CPython 3.13 macOS 14.0+ x86-64
SHA-256 checksum
How to use checksums
9a8af8ffb8de66115d9cd1cc1845f31096d872e4dd028550bfd18ec0ea0b9a30
BLAKE2b-256 checksum
How to use checksums
7021a54cec74f38d3418267dc4be9cb51ff291c710359270af49e9cf5dc392e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 8, 2026.

Transparency log

Release files / loom_py_rt-1.0.0rc15-cp313-cp313-macosx_14_0_arm64.whl

Download URL loom_py_rt-1.0.0rc15-cp313-cp313-macosx_14_0_arm64.whl
Size 2.5 MB
Tags CPython 3.13 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
4c7764eecf55af1f12fde670e9e9e035ebc62aeeeb6d748f5a9237762e0d540e
BLAKE2b-256 checksum
How to use checksums
1a92126c07a9a49439ea701b9c47b6543319f24a1bab024158ef3384f7ca2f33
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 8, 2026.

Transparency log

Release files / loom_py_rt-1.0.0rc15-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL loom_py_rt-1.0.0rc15-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 8.9 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
8e328424adee80c8c7ad29e019ee9fa57cf1a6aba4e4656a780b32d77d54da22
BLAKE2b-256 checksum
How to use checksums
16ffc79aa7ebef25e4a29c8d33bab2f2adf9c115b0971405f9bb5fc169d9bdd6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 8, 2026.

Transparency log

Release files / loom_py_rt-1.0.0rc15-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL loom_py_rt-1.0.0rc15-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 4.8 MB
Tags CPython 3.12 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
88d169356c6f82576345613cdb96b307dd31c76215cdec3752e3dd86faf766da
BLAKE2b-256 checksum
How to use checksums
4fa8e620d1f1b28c1160b6c5a3baf11f8b58763405a938eb4e6ce3d4a9893ec0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 8, 2026.

Transparency log

Release files / loom_py_rt-1.0.0rc15-cp312-cp312-macosx_14_0_x86_64.whl

Download URL loom_py_rt-1.0.0rc15-cp312-cp312-macosx_14_0_x86_64.whl
Size 8.9 MB
Tags CPython 3.12 macOS 14.0+ x86-64
SHA-256 checksum
How to use checksums
07c842b3058d5767450f6c11be3ed5152ad7c2e927ca465e9ae816e3f4e0420a
BLAKE2b-256 checksum
How to use checksums
fe5b24952bc4c76f159487365927f1db79c6845a3cffcffb8c0580092ba07682
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 8, 2026.

Transparency log

Release files / loom_py_rt-1.0.0rc15-cp312-cp312-macosx_14_0_arm64.whl

Download URL loom_py_rt-1.0.0rc15-cp312-cp312-macosx_14_0_arm64.whl
Size 2.5 MB
Tags CPython 3.12 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
5bcf8d9cef0309821d0e1f36242502ddb9f1079c09af2b749f3d37e533e839f3
BLAKE2b-256 checksum
How to use checksums
5fc8cd83664470322f7979c3d5b553ae6e190818e1e5d747a243d9e3d0e61343
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 8, 2026.

Transparency log

Release files / loom_py_rt-1.0.0rc15-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL loom_py_rt-1.0.0rc15-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 8.9 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
9bccf636c9533714cfa204c4f5814b032e1f09728a069aa91c893b56c4e46588
BLAKE2b-256 checksum
How to use checksums
3fc142fa0317280828655734d1d49e49badb691fa67b3d7ba309938b3570ad66
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 8, 2026.

Transparency log

Release files / loom_py_rt-1.0.0rc15-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL loom_py_rt-1.0.0rc15-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 4.8 MB
Tags CPython 3.11 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
8b4e9c752d0c1a4e665f3507cd187810636c9f6b48a5f1ca707e47700187a68b
BLAKE2b-256 checksum
How to use checksums
0c6ddd1851ecf9b6e93a43ff806213367792ad09561de4a478d6d5f741cff971
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 8, 2026.

Transparency log

Release files / loom_py_rt-1.0.0rc15-cp311-cp311-macosx_14_0_x86_64.whl

Download URL loom_py_rt-1.0.0rc15-cp311-cp311-macosx_14_0_x86_64.whl
Size 8.9 MB
Tags CPython 3.11 macOS 14.0+ x86-64
SHA-256 checksum
How to use checksums
bc6f17d3cecd3e36b6fb9940cb8cea60a2a4e065b42209c6b425db660fc59c78
BLAKE2b-256 checksum
How to use checksums
1d0a316c3c49c35fb1d76e44f0e5a7e230ac50b1fa0ffb7f76cd430b96d8ab86
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 8, 2026.

Transparency log

Release files / loom_py_rt-1.0.0rc15-cp311-cp311-macosx_14_0_arm64.whl

Download URL loom_py_rt-1.0.0rc15-cp311-cp311-macosx_14_0_arm64.whl
Size 2.5 MB
Tags CPython 3.11 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
93d4a54e1e7c3eef2a9b9fea022e32180fb5cd3ed94704ca18e19936bdae234b
BLAKE2b-256 checksum
How to use checksums
7f513518fab329a62c0e923c52b321a264e48b9e41a02e22c2467aab77c7b6e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 8, 2026.

Transparency log

Release files / loom_py_rt-1.0.0rc15-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL loom_py_rt-1.0.0rc15-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 8.9 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
0b9098da25d17edfcf49c423eccf884f5d68b48c67588a3739f9e4acad4d80ea
BLAKE2b-256 checksum
How to use checksums
2fa5f18f22732d34bb7e987c3b6f7e902d0077046534f8ee50f4d454a7276656
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 8, 2026.

Transparency log

Release files / loom_py_rt-1.0.0rc15-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL loom_py_rt-1.0.0rc15-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 4.8 MB
Tags CPython 3.10 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
704197e0187db6a535133f78877fa8d16285f8063f3ff02bef3239e1654c4c70
BLAKE2b-256 checksum
How to use checksums
c913c5b3e22e0f81223aad6b9a52da58082b918e37800a582a97a6d48e5436fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 8, 2026.

Transparency log

Release files / loom_py_rt-1.0.0rc15-cp310-cp310-macosx_14_0_x86_64.whl

Download URL loom_py_rt-1.0.0rc15-cp310-cp310-macosx_14_0_x86_64.whl
Size 8.9 MB
Tags CPython 3.10 macOS 14.0+ x86-64
SHA-256 checksum
How to use checksums
482ce74dbad96703aeb32c79e933c5ca4d4a0aa40ddd502edd944525f731750b
BLAKE2b-256 checksum
How to use checksums
a5a16add73d4f41b0cd73254c4509d2c38470ff4583ccba0feeb3bfa59fe3257
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 8, 2026.

Transparency log

Release files / loom_py_rt-1.0.0rc15-cp310-cp310-macosx_14_0_arm64.whl

Download URL loom_py_rt-1.0.0rc15-cp310-cp310-macosx_14_0_arm64.whl
Size 2.5 MB
Tags CPython 3.10 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
4e27757229eed69c2abbb56ce10c0890698574389b48bb9127207f8a0ddbee45
BLAKE2b-256 checksum
How to use checksums
88bf6b4320edb97364e81456a4ada83fda199fa49bb9a2a4cd3f57550078ad4d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 8, 2026.

Transparency log

Security for loom-py-rt 1.0.0rc15

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 17 files in this release have been uploaded with provenance metadata.

Select from 17 files

Attestation for loom_py_rt-1.0.0rc15.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 8, 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