Skip to main content

softcut

CI

Python bindings for softcut-lib — the per-voice DSP engine behind monome norns' softcut — with realtime audio I/O via miniaudio. Built with nanobind, and with no dependencies: buffers are plain array.array("f"), and audio, WAV I/O and the OSC server all work on a bare install.

The primary API exposes softcut as idiomatic Python objects. An optional norns-compatible layer (softcut.norns) additionally mirrors the flat norns Lua softcut API for porting existing scripts.

Concepts

  • Voice wraps one softcut::Voice: a crossfading read/write head over an audio buffer, with rate, loop points, record/play, fades, and pre/post state-variable filters. Parameters are plain attributes; the buffer is a float32 buffer you own (softcut-lib never allocates buffer memory) — anything C-contiguous, so an array.array("f"), a memoryview, or a numpy array. Buffer length must be a power of two — use softcut.next_power_of_two or Engine.allocate, which rounds up for you. The same array can be shared by several voices.

  • Engine is the multi-voice host: it owns a set of voices and a miniaudio device, and runs them either live (realtime mic/speaker I/O on a background audio thread) or offline via Engine.render. It is a context manager and a sequence of voices.

Live looping

import softcut, time

with softcut.Engine(voices=2) as eng:          # opens the audio device
    eng.allocate(seconds=8)                    # shared power-of-two buffer
    eng[0].configure(loop_region=(0, 4), rate=1.0, level=0.8, pan=-0.3)

    with eng[0].record(at=0):                  # rec + play on; head cut to 0s
        time.sleep(4)                          # capture 4s of mic input
    # on exit: rec off — the voice keeps looping what it captured

    eng[1].configure(loop_region=(0, 4), rate=-0.5, level=0.6, pan=0.3)
    eng[1].record_for(4, at=0)                 # blocking variant: record 4s, then stop

    time.sleep(8)                              # listen to both loops
# device closed automatically

eng.start() returns immediately and audio runs on a background thread, so the REPL stays live — set a parameter and you hear the change on the next block. record() is the non-blocking context-manager gesture; record_for(seconds) blocks the calling thread for a fixed capture.

Offline rendering

No device; process a mono block through the voices and get the mixed stereo output back. This is the deterministic path used by the tests:

import numpy as np, softcut

eng = softcut.Engine(voices=1, mode="playback")
v = eng[0]
v.buffer = np.zeros(2**16, dtype=np.float32)
v.configure(loop_region=(0, 1), rate=1.0)
v.rec = v.play = True
v.cut_to(0)

out = eng.render(np.random.randn(48000).astype(np.float32))   # flat, interleaved
frames = np.asarray(out).reshape(-1, eng.out_channels)        # (48000, 2), no copy

render returns interleaved frames in an array.array("f"); wrapping it in numpy costs nothing. Pass your own buffer as out — of either kind — to fill it in place and skip the allocation:

mono = np.random.randn(48000).astype(np.float32)
buf = np.empty(48000 * eng.out_channels, dtype=np.float32)
eng.render(mono, buf)          # fills and returns buf

Load/save audio with whatever you like (e.g. soundfile) and assign the array to voice.buffer.

Dependencies

softcut-py has no dependencies, numpy included. Buffers are array.array("f") and every entry point takes any C-contiguous float32 buffer, so numpy arrays work wherever you care to use them — as a voice's buffer, as render input, as an out buffer — and numpy.asarray wraps what softcut returns without copying. The extension allocates no results and imports nothing.

The sample-level buffer arithmetic and the WAV sample-format conversion run in C++ (shared with the standalone server), and wave from the standard library parses the container.

$ pip install softcut-py         # no dependencies
$ pip install softcut-py[osc]    # + the pure-Python OSC transport

One consequence worth knowing: a float64 array is now refused rather than silently converted. Cast it with .astype("float32").

Routing and devices

Voices mix to stereo via each voice's level and pan. Engine.feedback(src, dst, amount) routes one voice's output into another's input (one block delayed; src == dst is a self-feedback delay line), and each voice's input_gain scales the engine's external (mic) input into it:

eng.feedback(0, 1, 0.4)     # voice 0 -> voice 1 input
eng[1].input_gain = 0.0     # voice 1 ignores the mic

Pick a specific device by index from softcut.list_devices():

softcut.list_devices()                      # [{'index':0,'name':...,'type':'playback',...}, ...]
eng = softcut.Engine(output_device=1, input_device=0)

norns-compatible API

For porting norns scripts (and the muscle memory that goes with them), softcut.norns mirrors the flat, 1-based, singleton norns softcut Lua API: 6 voices indexed from 1 and 2 global mono buffers numbered 1/2. Import it under the name norns scripts expect and call the functions verbatim:

from softcut import norns as softcut

softcut.buffer_clear()
softcut.buffer_read_mono("loop.wav", ch_dst=1)   # stdlib wave, no extra dep
softcut.loop(1, 1)
softcut.loop_start(1, 0.0)
softcut.loop_end(1, 4.0)
softcut.rate(1, 1.0)
softcut.level(1, 0.8)
softcut.play(1, 1)

softcut.start()                                  # open the audio device
  • Attribute passthroughrate, level, pan, play/rec/loop, loop points, position, the pre/post filters, slews, phase, buffer, voice_sync, level_cut_cut, reset.

  • Buffer/disk opsbuffer_read_* / buffer_write_*, buffer_copy_*, buffer_clear*, on the shared C++ buffer primitives plus the standard-library wave module (WAV only, no new dependency), with preserve/mix crossfade, edge fade_time and reverse. Operations write in place, so they are safe against the running audio thread; reads are non-resampling, matching norns.

softcut.render / softcut.start / softcut.stop drive audio (norns runs its audio continuously; here you render offline or open the device explicitly). Phase polling and per-sample level/pan slews are not yet implemented; see docs/dev/norns-api.md for the full mapping and status. demos/12_norns_api.py is a narrated walkthrough built entirely on this layer.

OSC server

softcut.osc exposes softcut over the same OSC wire protocol as the reference softcut_jack_osc client, so existing norns/Lua scripts, SuperCollider, Max, or any OSC controller can drive softcut-py as a drop-in engine over the network. It is a thin dispatch layer over the norns host: each address maps to a host method, with the one translation that the wire protocol is 0-based (voices 0-5, buffers 0-1) while the host is 1-based.

from softcut.osc import SoftcutOSC
from softcut import norns

host = norns.NornsSoftcut()
host.start()                                   # open the audio device
server = SoftcutOSC(host)                       # listen on UDP 9999
server.serve_forever()                          # blocks until a /quit message

Or run it straight from the command line:

python -m softcut.osc                            # device + OSC server
python -m softcut.osc --no-audio                 # offline: buffer ops only

Then drive it from any OSC client (voice/buffer indices 0-based):

/set/param/cut/rate      0 1.0        # voice 0 rate = 1.0
/set/param/cut/loop_start 0 0.0
/set/param/cut/loop_end  0 4.0
/set/param/cut/loop_flag 0 1
/set/level/cut           0 0.8
/set/param/cut/play_flag 0 1
/softcut/buffer/read_mono "loop.wav"  0.0 0.0 -1  0 0
/poll/start/cut/phase                 # -> /poll/softcut/phase <voice> <phase>

The full namespace is mirrored: all /set/param/cut/* params, routing (/set/level|pan/cut, cut_cut, in_cut), the /softcut/buffer/* disk ops, /softcut/reset, and the phase poll. Defaults match the reference: listen on UDP 9999, reply (phase poll) to 127.0.0.1:57120.

Two transports, selected by backend= ("auto" by default):

  • native — a dependency-free UDP transport on the vendored tinyosc codec, compiled in by default, so pip install softcut-py serves OSC with nothing else installed. Per-voice /set/param/cut/* messages are parsed and dispatched entirely in C without the GIL. IPv4-only. Disable with a source build (SKBUILD_CMAKE_DEFINE="SOFTCUT_ENABLE_TINYOSC=OFF" pip install .).

  • python-osc — the pure-Python transport, longer-established and the fallback when the native one is not built. pip install softcut-py[osc].

"auto" takes native when built and python-osc otherwise; either can be named explicitly.

Building the transport in grants the ability to serve OSC, never a running server: importing softcut.osc opens no socket and starts no thread. A server exists when you construct SoftcutOSC and listens when you start it, or when you run python -m softcut.osc.

Standalone server (no Python)

For a headless, interpreter-free deployment, clients/softcut-osc builds a standalone native binary (softcut-lib + tinyosc + miniaudio) that speaks the same softcut OSC protocol with no CPython at all — so nothing on its control path can touch a GIL. It is the pure-C++ counterpart to softcut.osc: identical DSP and wire protocol, with no interpreter to schedule at all — where softcut.osc merely keeps its control path off the GIL, this has no GIL to keep off. It covers the full namespace plus WAV disk I/O (via the vendored dr_wav, on a disk-worker thread with click-avoidance crossfades), preserve/mix blending, opt-in --resample-on-read, and device selection.

make build-standalone                    # -> build/softcut-osc/softcut-osc
./build/softcut-osc/softcut-osc --help
./build/softcut-osc/softcut-osc          # listen UDP 9999, reply 127.0.0.1:57120

The Python extension and this binary share their Python-free C++ core (command queue, mixer, device, sockets) under src/shared. See clients/softcut-osc/README.md.

TouchOSC surface

clients/touchosc holds a TouchOSC layout, softcut.tosc, that plays either server over the wire protocol: a mixer strip per voice, tabular pages for the loop, record and filter parameters, the feedback and voice-sync matrices, buffer and disk operations, and a receive-only phase readout fed by the phase poll. It is generated from Python with py2tosc rather than drawn by hand, so make touchosc rebuilds it for a different canvas, voice count or parameter range, and the test suite pushes every binding in it through the server's own dispatch table.

Build and test

make sync     # set up the environment
make test     # run the test suite
make qa       # test + lint + typecheck + format

Set SOFTCUT_TEST_AUDIO=1 to additionally exercise a real audio device in the test suite. Use make help for more targets (wheel, sdist, clean, etc.).

Releasing

CI runs QA and a Linux/macOS/Windows build smoke on every push and pull request. Pushing a v* tag builds wheels for CPython 3.10-3.14 across Linux (x86_64/aarch64), macOS (x86_64/arm64) and Windows with cibuildwheel, plus the sdist, and publishes them to PyPI via trusted publishing. To cut one, set the version in both pyproject.toml and src/softcut/__init__.py — they are separate copies, and test_version_matches_the_packaging_metadata fails if they disagree — then commit, tag vX.Y.Z, and push the tag. (TestPyPI is available via the workflow's manual workflow_dispatch.)

Notes

  • Realtime parameter updates are safe: while the device is running, voice DSP parameter changes from Python are enqueued and applied on the audio thread via a lock-free queue rather than racing it. (The mix scalars level/pan/ input_gain and the feedback matrix are plain aligned writes.)

  • The vendored softcut-lib carries small host-portability fixes (uninitialized members that relied on embedded zero-init static storage — including the phase quantum and the two phase mirrors the poll reports from — and an oversized debug buffer stubbed out); see the comments in thirdparty/softcut-lib.

Download files

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

Source Distribution

softcut_py-0.4.0.tar.gz (719.6 kB view details)

Uploaded Source

Built Distributions

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

softcut_py-0.4.0-cp314-cp314-win_amd64.whl (194.5 kB view details)

Uploaded CPython 3.14Windows x86-64

softcut_py-0.4.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (266.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

softcut_py-0.4.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (257.4 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

softcut_py-0.4.0-cp314-cp314-macosx_11_0_arm64.whl (232.5 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

softcut_py-0.4.0-cp314-cp314-macosx_10_15_x86_64.whl (248.2 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

softcut_py-0.4.0-cp313-cp313-win_amd64.whl (188.8 kB view details)

Uploaded CPython 3.13Windows x86-64

softcut_py-0.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (266.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

softcut_py-0.4.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (257.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

softcut_py-0.4.0-cp313-cp313-macosx_11_0_arm64.whl (232.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

softcut_py-0.4.0-cp313-cp313-macosx_10_14_x86_64.whl (248.0 kB view details)

Uploaded CPython 3.13macOS 10.14+ x86-64

softcut_py-0.4.0-cp312-cp312-win_amd64.whl (189.0 kB view details)

Uploaded CPython 3.12Windows x86-64

softcut_py-0.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (266.9 kB view details)

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

softcut_py-0.4.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (257.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

softcut_py-0.4.0-cp312-cp312-macosx_11_0_arm64.whl (232.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

softcut_py-0.4.0-cp312-cp312-macosx_10_14_x86_64.whl (248.1 kB view details)

Uploaded CPython 3.12macOS 10.14+ x86-64

softcut_py-0.4.0-cp311-cp311-win_amd64.whl (189.6 kB view details)

Uploaded CPython 3.11Windows x86-64

softcut_py-0.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (267.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

softcut_py-0.4.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (258.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

softcut_py-0.4.0-cp311-cp311-macosx_11_0_arm64.whl (233.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

softcut_py-0.4.0-cp311-cp311-macosx_10_14_x86_64.whl (248.5 kB view details)

Uploaded CPython 3.11macOS 10.14+ x86-64

softcut_py-0.4.0-cp310-cp310-win_amd64.whl (189.7 kB view details)

Uploaded CPython 3.10Windows x86-64

softcut_py-0.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (268.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

softcut_py-0.4.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (258.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

softcut_py-0.4.0-cp310-cp310-macosx_11_0_arm64.whl (233.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

softcut_py-0.4.0-cp310-cp310-macosx_10_14_x86_64.whl (248.9 kB view details)

Uploaded CPython 3.10macOS 10.14+ x86-64

File details

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

File metadata

  • Download URL: softcut_py-0.4.0.tar.gz
  • Upload date:
  • Size: 719.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for softcut_py-0.4.0.tar.gz
Algorithm Hash digest
SHA256 0f191828df361694957ef77f1b8f0ce375cd28b8775ee0e5a76ee615a91214d0
MD5 004545e33d8a27b8f96459931a1c39b2
BLAKE2b-256 49a4dad7b7303c0322796e927ae3afad878fac0006da765d125f23866b972d93

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: softcut_py-0.4.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 194.5 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for softcut_py-0.4.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 8cba1b98effedaadfc086b150a348171957c7ac880a7b53861109602335e80d7
MD5 824be937e7b6785d82c2288348433eb7
BLAKE2b-256 0d01668438f83694b31a508d43f0cd080b61a5ced4d168f72ca0a5ac8b237d39

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6a2a7cf5fbcd27fee073a61a18fdd7acf08643d564e0e139a23f6840c65ce679
MD5 84e3d3bb8c84ec93723eb78ce3a18801
BLAKE2b-256 e71f795a0ed5e75e05c9708b6d49a40ea02c092cccb33837e8201d46df169d1c

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ac1592b8f47412aecb17ebb94a4f1b8bec865989a75bb4102d5232e5b03d9f38
MD5 5ee7a55b5eafad664f0051f2b2f6c202
BLAKE2b-256 1509784e1b00ee7cb5623a510f46450dd4966dfa466567f5a0c8e90b9e95bc86

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d0c867f0e3fbeec1fbc929d0feaff039390ef2fd0ea4ef33903ac85100f5ab7b
MD5 66407cad8ebbe4b1b3641896b4eafdf6
BLAKE2b-256 04669e74265b4924225699a59dc68f94eee40dc8b14184b4dba682110a2dff6d

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 ee62a9b30472e8779ee6ac1ebd0094cb92d96495ad8fea70f0d13ce8332c9a49
MD5 9eeee2d79d9a0a8907f2b123daf400df
BLAKE2b-256 a6c414973a7061c3e8b1a334eea11d7c0f9bd4c6eb9f72cb9d739df752b32ce6

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: softcut_py-0.4.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 188.8 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for softcut_py-0.4.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4d302caed064df26cdc42942053b4317ac14ff5bbf7ffb109eab276b6543518e
MD5 7390b94da86a50f186874711263abdc9
BLAKE2b-256 f71ea83e97079f47e5f2a14aa082eeaa28414a8c5145629d78916f6ade9797a2

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7479a8d5ccf3c6196520ed5cb952628ae2f045e56914918f0c97697a5f5a14ae
MD5 e77a9d1e81c672781d888e5ebd80ebac
BLAKE2b-256 46b062642f7f2dc6805921cb6a7582eba19f6f9718a5c04be43abe024311de5c

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 fa8e3055c1934db1b187e53c707c2ab82c4ec4520230ecb0689df7a4f67c6bd8
MD5 2078ea570ef12cf322da8c588da6f035
BLAKE2b-256 d854657fe15a7ea719a9b86d0c362138ae9a4ded4f5be67c1819c2d6eac687fc

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 23a465cc3841fcc91ec2a8c026df8655d6251f71aa67405121cbbd6f22c10723
MD5 f7d29250ff8f3df4d2c8d2e99afa544a
BLAKE2b-256 747401c24fdf3a9baa4d3d1e1eff7db5c981ecf0e511c442bb00d1549dac5d1e

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp313-cp313-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp313-cp313-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 2e44d6f26523833067bfb13b74c3c0ccd96329e375c7743e065ad0951ce42701
MD5 86469bc4459da2909369505360c53cd7
BLAKE2b-256 ad7d880219ab37884ca30ec24ab16288478fd04a26e4d9cb73dea19455feb460

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: softcut_py-0.4.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 189.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for softcut_py-0.4.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 23ae0f01e7c1c5f48826c0508410563e29d6c38b0b44f10613ed31a0fc80163c
MD5 e86c82af1467130a37d38adc3b857add
BLAKE2b-256 adff6d2421e14d413e2df42e5ec09d6286a0f756d8e19d84dcc9747f067c9ae1

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cef253c8f4b46a5cb06667ab14997dd87747012efc2b25f1b82b80a790eb5059
MD5 db1ac76e39f36d30a77411c7518df306
BLAKE2b-256 f3e47c616bba1f0c9fd5645ff1a257f012d8e42fb9a6cb8202533787f0ee51b0

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e1734e82329e9d6e19459ddd54386af5cf140e1ecf65caf7d01901e0d99471b7
MD5 f4e6ec31edff690e4e85e6893ce1428d
BLAKE2b-256 281b7b72ed26dd33c8d50ea8a855c74a3af300196f4be7ce9ff071a98e530442

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5354e3622d12cd9be1675d501eb81aa5cda94011f63ee2668dfbdc6aaaeccf96
MD5 df6d16623d7102bb1ffeee170ca395de
BLAKE2b-256 96d0aa79aaf0fbf234608c592f0b7f7a13c911c9f750439a4be40c66eba62438

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp312-cp312-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp312-cp312-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 829f508d1511a8f1507c334b443fe6b1d7ad08c77e874735a0d80aa0042ba3ea
MD5 186ce613a7fdc12c99c944fdfb68013f
BLAKE2b-256 b684ca1aa52f7b414ef7a23246f9e44a191300f2cc7de28ba1b0093d50841ee3

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: softcut_py-0.4.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 189.6 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for softcut_py-0.4.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 04d3ff5f485b741fc4a86c3ef79e8074d7591d76feb439ebc506e1c913352d67
MD5 b96a459055ddcd960cd3c6b6ced14392
BLAKE2b-256 ce0cdf72f860a7ddbb8dc24e2c5de9152d5436ee4f09998f0432be5e5b256c4a

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ef606a2aba432d64fd81e53770f85f78f2e768d306aeea487eb4cb6356644e96
MD5 aa178798ca826d2cde0892e48c789393
BLAKE2b-256 0e78b66ddb6e3672d0aaac91017ee90576079a93adf7ef156ce78a92a91c2803

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f4985711b754ea99ea48886739e92294d35c42d3e9169e12918932a31b929659
MD5 eb1fc952fe49f5d1f3fb74d9eb82034a
BLAKE2b-256 ff593b398b10faa24edbf3a63d342f89a83795dc600225289671e4cf0ed4773c

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b1801194dd354d2ecf46c0a9a8df554315f625a6e5179a2d1df6373764fcb6c3
MD5 1d66ab3f9715d70513f203e3bcf2cd16
BLAKE2b-256 9756d881d6e17eb80d6c086fde4ae5c1a563fafd672d04d55c0ff8be8807ef77

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp311-cp311-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp311-cp311-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 e177ef8e9e7e7fccb5bc2d64817f36010e7c46cec1eff3496ea22c6e05ee991a
MD5 505dd8799f837c0d00e2b2aaf740c9c6
BLAKE2b-256 7a09f393a1e13c29ad7ec714146ba97943dead534a66bd0e38590e3dabb7d0d5

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: softcut_py-0.4.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 189.7 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for softcut_py-0.4.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 23db1f58d08040a051c9ff2599c243dda4a0410dd9d3da935b7f0ad85a5aef5c
MD5 ca13ec92941fbae02d5ea9e99bbe1a37
BLAKE2b-256 2f70f98d411383d2176f3571a6179d35fe19b4347bd74943aeff80c082c67ce9

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1dc6b58d92a2363ece57f2429756a5900662e705bf35086eb391926547ac9317
MD5 766e81ada148a44ca22b2181b67abe05
BLAKE2b-256 d1fd4c881252041a3809d7e6d30931a452a3915257423fc1d6c6caad0b7e53b0

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4e1cad3a519ab7839014ccfa1c51f399da4e7641d2ef85100d2871a3f5ef378a
MD5 3adb5c23463daf823c18cc91116b9c41
BLAKE2b-256 67dd6341bcfc55f17e89ca1e4428e8ce81289bb71feb42a67e42b557b6dee5d3

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 249cf9ea7cace4ca62cd0ab770240a5139fe6cb71c500e0c532584b4a7ca0f0b
MD5 2c1bd4eb2c72833640ea70ff892be931
BLAKE2b-256 564f8e2bedf9c6b5861c446f9dc2f03f448249561d0fbf0be76d438a31055bc4

See more details on using hashes here.

File details

Details for the file softcut_py-0.4.0-cp310-cp310-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for softcut_py-0.4.0-cp310-cp310-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 ff6d5efc1e47678a92a985b01d77616530c2758b69083cb348910e60bb191a4f
MD5 b68f4f56ac93693ed272274cbc763c6d
BLAKE2b-256 56bc9fab940bae8da031aa263e8ce65361265fa28888e4226be42ea191535cc9

See more details on using hashes here.

Release history Release notifications | RSS feed

0.4.2

26 files

0.4.1

26 files

This release

0.4.0 This release

26 files

0.3.0

26 files

0.2.0

26 files

0.1.1

26 files

0.1.0

25 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