A Pythonic audio processing library wrapping libsox
Project description
cysox
A Pythonic audio processing library which uses cython to wrap libsox.
Features
- Simple API: Convert, analyze, and play audio with one-liners
- Typed Effects: 28 base effect classes with IDE autocomplete and validation
- 54 Effect Presets: Ready-to-use composite effects for voice, lo-fi, drums, mastering, and more
- Drum Loop Tools: Slice loops by BPM, create stutter effects, apply beat-synced processing
- High Performance: Direct C bindings through Cython
- Zero Configuration: Auto-initialization, no manual setup required
- Cross-Platform: macOS, Linux (Windows placeholder)
Installation
Note that cysox only works on macOS and Linux.
pip install cysox
Command Line Interface
# Show version
cysox --version
# Get audio file info
cysox info audio.wav
# Convert audio files
cysox convert input.wav output.mp3
cysox convert input.wav output.wav --rate 48000 --channels 1
# Play audio
cysox play audio.wav
# Concatenate files
cysox concat intro.wav main.wav outro.wav -o full.wav
# List available effect presets
cysox preset list
cysox preset list drums # Filter by category
# Get preset info and parameters
cysox preset info Chipmunk
# Apply a preset to audio
cysox preset apply Telephone input.wav output.wav
cysox preset apply Chipmunk input.wav output.wav --intensity=2.0
# Slice audio into segments
cysox slice drums.wav output_dir/ -n 8
cysox slice drums.wav output_dir/ --bpm 120 --beats 1
cysox slice drums.wav output_dir/ -n 4 -p DrumPunch
# Slice at detected transients (automatic beat detection)
# -t threshold (e.g. 0.3), -s sensitivity (default 1.5), -m method (default hfc)
cysox slice drums.wav output_dir/ -t 0.3
cysox slice drums.wav output_dir/ -t 0.2 -s 1.2 -m flux
# Create stutter effects
cysox stutter drums.wav stutter.wav -d 0.125 -r 8
cysox stutter drums.wav stutter.wav -s 0.5 -d 0.25 -r 4 -p GatedReverb
Quick Start
import cysox
from cysox import fx
# Get audio file info
info = cysox.info('audio.wav')
print(f"Duration: {info['duration']:.2f}s, Sample rate: {info['sample_rate']} Hz")
# Convert with effects
cysox.convert('input.wav', 'output.mp3', effects=[
fx.Normalize(),
fx.Reverb(reverberance=60),
fx.Fade(fade_in=0.5, fade_out=1.0),
])
# Play audio (macOS/Linux)
cysox.play('audio.wav')
# Play with effects
cysox.play('audio.wav', effects=[fx.Volume(db=-6)])
Core Functions
cysox.info(path) -> dict
Get audio file metadata:
info = cysox.info('audio.wav')
# Returns: {
# 'path': 'audio.wav',
# 'format': 'wav',
# 'duration': 11.5,
# 'sample_rate': 44100,
# 'channels': 2,
# 'bits_per_sample': 16,
# 'samples': 507150,
# 'encoding': 'signed-integer',
# }
cysox.convert(input, output, effects=[], **options)
Convert audio files with optional effects and format options:
# Simple format conversion
cysox.convert('input.wav', 'output.mp3')
# With effects
cysox.convert('input.wav', 'output.wav', effects=[
fx.Volume(db=3),
fx.Bass(gain=5),
fx.Reverb(),
])
# With format options
cysox.convert('input.wav', 'output.wav',
sample_rate=48000,
channels=1,
bits=24,
)
cysox.stream(path, chunk_size=8192) -> Iterator[memoryview]
Stream audio samples for processing:
import numpy as np
for chunk in cysox.stream('large.wav', chunk_size=8192):
arr = np.frombuffer(chunk, dtype=np.int32)
process(arr)
cysox.play(path, effects=[])
Play audio to the default audio device:
cysox.play('audio.wav')
cysox.play('audio.wav', effects=[fx.Volume(db=-6), fx.Reverb()])
cysox.concat(inputs, output)
Concatenate multiple audio files:
cysox.concat(['intro.wav', 'main.wav', 'outro.wav'], 'full.wav')
All input files must have the same sample rate and channel count.
Effects Module
The cysox.fx module provides 28 base effect classes and 54 composite presets:
Volume & Dynamics
fx.Volume(db=3) # Adjust volume in dB
fx.Gain(db=6) # Apply gain
fx.Normalize(level=-3) # Normalize to target level
Equalization
fx.Bass(gain=5, frequency=100) # Boost/cut bass
fx.Treble(gain=-2, frequency=3000) # Boost/cut treble
fx.Equalizer(frequency=1000, width=1.0, gain=3)
Filters
fx.HighPass(frequency=200) # Remove low frequencies
fx.LowPass(frequency=8000) # Remove high frequencies
fx.BandPass(frequency=1000, width=100)
fx.BandReject(frequency=60, width=10) # Notch filter
Spatial & Reverb
fx.Reverb(reverberance=50, room_scale=100)
fx.Echo(gain_in=0.8, gain_out=0.9, delays=[100], decays=[0.5])
fx.Chorus()
fx.Flanger()
Time-Based
fx.Trim(start=1.0, end=5.0) # Extract portion
fx.Pad(before=0.5, after=1.0) # Add silence
fx.Speed(factor=1.5) # Change speed (affects pitch)
fx.Tempo(factor=1.5) # Change tempo (preserves pitch)
fx.Pitch(cents=100) # Shift pitch (preserves tempo)
fx.Reverse() # Reverse audio
fx.Fade(fade_in=0.5, fade_out=1.0) # Fade in/out
fx.Repeat(count=3) # Repeat audio
Conversion
fx.Rate(sample_rate=48000) # Resample
fx.Channels(channels=1) # Change channel count
fx.Remix(out_spec=[[1, 2]]) # Custom channel mixing
fx.Dither() # Add dither
Composite Effects
Create reusable effect combinations:
from cysox.fx import CompositeEffect, HighPass, LowPass, Reverb, Volume
class TelephoneEffect(CompositeEffect):
"""Simulate telephone audio quality."""
@property
def effects(self):
return [
HighPass(frequency=300),
LowPass(frequency=3400),
Volume(db=-3),
]
# Use like any other effect
cysox.convert('input.wav', 'output.wav', effects=[TelephoneEffect()])
Effect Presets
The library includes 54 ready-to-use composite effect presets organized by category:
Voice Effects
fx.Chipmunk(intensity=1.8) # High-pitched voice
fx.DeepVoice(intensity=0.6) # Low, slowed voice
fx.Robot(intensity=70) # Metallic robotic voice
fx.HauntedVoice(pitch_shift=5) # Spooky ghost effect
fx.VocalClarity(presence_boost=4) # Enhanced vocal presence
fx.Whisper() # Intimate whisper effect
Lo-Fi Effects
fx.Telephone(sample_rate=8000) # Classic telephone sound
fx.AMRadio() # AM radio broadcast
fx.Megaphone(volume_boost=6) # Bullhorn effect
fx.Underwater(depth=500) # Submerged/muffled sound
fx.VinylWarmth(bass_boost=3) # Warm vinyl aesthetic
fx.LoFiHipHop(warmth=4) # Lo-fi hip hop style
fx.Cassette() # Cassette tape degradation
Spatial Effects
fx.SmallRoom(wetness=30) # Intimate room reverb
fx.LargeHall(size=100, decay=70) # Concert hall ambience
fx.Cathedral() # Church reverb
fx.Bathroom() # Tiled room reverb
fx.Stadium() # Arena with echo
Broadcast Effects
fx.Podcast() # Voice cleanup + presence
fx.RadioDJ(presence=4) # Punchy broadcast voice
fx.Voiceover() # Professional VO processing
fx.Intercom() # PA system effect
fx.WalkieTalkie() # Two-way radio
Musical Effects
fx.EightiesChorus(depth=4) # Classic 80s chorus
fx.DreamyPad() # Ethereal ambient texture
fx.SlowedReverb(slow_factor=0.85) # Slowed + reverb aesthetic
fx.SlapbackEcho(delay_ms=120) # Rockabilly short delay
fx.DubDelay(tempo_ms=375) # Rhythmic dub delays
fx.JetFlanger() # Extreme flanger sweep
fx.ShoegazeWash() # Heavy reverb/chorus wash
Drum Loop Effects
fx.HalfTime(preserve_pitch=True) # Slow to half speed
fx.DoubleTime(preserve_pitch=True) # Speed up to double
fx.DrumPunch(punch=4, attack=3) # Enhance punch and attack
fx.DrumCrisp(brightness=4) # Crisp, bright drums
fx.DrumFat(fatness=5) # Thick, heavy drums
fx.Breakbeat() # Classic breakbeat processing
fx.VintageBreak() # Lo-fi sampled break sound
fx.DrumRoom(room_size=40) # Natural room ambience
fx.GatedReverb() # 80s gated reverb
fx.DrumSlice(start=0, duration=0.5)# Extract a segment
fx.ReverseCymbal(fade_duration=0.5)# Reverse riser effect
fx.LoopReady() # Prepare for seamless looping
Mastering Effects
fx.BroadcastLimiter(target_level=-1) # Broadcast-ready limiting
fx.WarmMaster(warmth=1.5) # Warm mastering preset
fx.BrightMaster(air=2) # Bright/airy mastering
fx.LoudnessMaster(target_level=-0.3) # Maximum loudness
Cleanup Effects
fx.RemoveRumble(cutoff=60) # High-pass for rumble
fx.RemoveHiss(cutoff=12000) # Low-pass for tape hiss
fx.RemoveHum(frequency=60) # Notch filter for hum (50/60Hz)
fx.CleanVoice() # Basic voice cleanup
fx.TapeRestoration() # Restore tape recordings
Transition Effects
fx.FadeInOut(fade_in_secs=0.3, fade_out_secs=0.3)
fx.CrossfadeReady(fade_duration=0.3)
Chaining Presets
Presets can be combined with each other and base effects:
cysox.convert('input.wav', 'output.wav', effects=[
fx.RemoveRumble(), # Cleanup first
fx.VinylWarmth(), # Apply lo-fi aesthetic
fx.SmallRoom(), # Add room ambience
fx.WarmMaster(), # Final mastering
])
Drum Loop Slicing
cysox provides utilities for slicing drum loops and creating stutter effects.
cysox.slice_loop() - Split Loops into Segments
Split an audio file into multiple segment files:
import cysox
from cysox import fx
# Slice into equal parts
slices = cysox.slice_loop('drums.wav', 'output_dir/', slices=8)
# Creates: output_dir/drums_slice_000.wav through drums_slice_007.wav
# Slice by BPM (one beat per slice)
slices = cysox.slice_loop('drums.wav', 'output_dir/', bpm=120, beats_per_slice=1)
# Slice with effects applied to each segment
slices = cysox.slice_loop('drums.wav', 'output_dir/',
slices=8,
effects=[fx.DrumPunch()]
)
Parameters:
path: Input audio fileoutput_dir: Directory for slice files (created if needed)slices: Number of equal slices (default: 4)bpm: Calculate slice duration from BPM (overridesslices)beats_per_slice: Beats per slice when using BPM (default: 1)beat_duration: Explicit duration per slice in secondsthreshold: Onset detection threshold 0.0-1.0 (enables automatic transient slicing)sensitivity: Onset detection sensitivity 1.0-3.0 (default: 1.5)onset_method: Detection method - 'hfc', 'flux', 'energy', or 'complex'output_format: Output format (default: "wav")effects: Effects to apply to each slice
Returns: List of created file paths
Automatic Transient Slicing
Slice loops automatically at detected transients (drum hits, etc.):
# Slice at detected onsets with default sensitivity
slices = cysox.slice_loop('drums.wav', 'output_dir/', threshold=0.3)
# More sensitive detection (catches subtle hits)
slices = cysox.slice_loop('drums.wav', 'output_dir/',
threshold=0.2,
sensitivity=1.2
)
# Use different detection method
slices = cysox.slice_loop('drums.wav', 'output_dir/',
threshold=0.3,
onset_method='flux' # Good for tonal changes
)
cysox.onset - Direct Onset Detection
For more control, use the onset detection module directly:
from cysox import onset
# Detect onsets in a file
onsets = onset.detect('drums.wav', threshold=0.3)
print(f"Found {len(onsets)} transients")
for t in onsets:
print(f" {t:.3f}s")
# With custom parameters
onsets = onset.detect('drums.wav',
threshold=0.3, # Detection threshold (0.0-1.0)
sensitivity=1.5, # Peak picking sensitivity (1.0-3.0)
min_spacing=0.05, # Min time between onsets (seconds)
method='hfc' # 'hfc', 'flux', 'energy', or 'complex'
)
Detection Methods:
-
hfc(default) - High-Frequency Content- Weights frequency bins by their index, emphasizing high frequencies
- High frequencies are prominent in transient attacks (the "click" of a drum hit)
- Best for: drums, percussion, plucked instruments
- Fast and reliable for most percussive material
-
flux- Spectral Flux- Measures the change in spectral energy between consecutive frames
- Detects when the frequency content changes significantly
- Best for: mixed material, melodic instruments, detecting note changes
- Good all-around choice when HFC misses softer onsets
-
energy- Energy-based- Simply measures the RMS energy (loudness) of each frame
- Fastest method, minimal computation
- Best for: very clean recordings, isolated drums, quick processing
- May miss onsets that are spectrally distinct but similar in volume
-
complex- Complex Domain- Analyzes both magnitude AND phase of the spectrum
- Detects deviations from expected phase trajectories
- Best for: maximum accuracy, subtle onsets, research applications
- Slowest method but catches onsets other methods miss
Understanding threshold vs sensitivity:
threshold (0.0-1.0) and sensitivity (1.0-3.0) control different stages:
-
threshold - Global minimum floor
- Sets the absolute minimum level a peak must reach
- Applied to the normalized detection function (0-1 scale)
- Lower values = more sensitive, catches quieter transients
threshold=0.3means peaks must reach at least 30% of max energy- Think of it as: "ignore everything below this level"
-
sensitivity - Adaptive peak picking strictness
- Controls how much a peak must exceed the local average
- Uses a moving median filter to compute the local baseline
- Higher values = stricter, only picks prominent peaks
sensitivity=1.5means a peak must be 1.5x the local median- Think of it as: "how much must a peak stand out from neighbors"
Typical combinations:
- Drums with clear hits:
threshold=0.3, sensitivity=1.5(defaults) - Subtle transients:
threshold=0.2, sensitivity=1.2 - Only loud hits:
threshold=0.5, sensitivity=2.0
cysox.stutter() - Create Stutter Effects
Extract a segment and repeat it:
# Basic stutter: 8x repeat of first 1/8 note at 120 BPM
cysox.stutter('drums.wav', 'stutter.wav',
segment_duration=0.125, # 1/8 note at 120 BPM
repeats=8
)
# Stutter from a specific position (e.g., the snare hit)
cysox.stutter('drums.wav', 'snare_stutter.wav',
segment_start=0.5, # Start at 0.5 seconds
segment_duration=0.125,
repeats=4
)
# Stutter with effects
cysox.stutter('drums.wav', 'stutter_punchy.wav',
segment_duration=0.25,
repeats=4,
effects=[fx.DrumPunch(), fx.DrumRoom()]
)
Parameters:
path: Input audio fileoutput_path: Output file pathsegment_start: Start position in seconds (default: 0)segment_duration: Length of segment in seconds (default: 0.125)repeats: Total times segment plays (default: 8)effects: Effects to apply after stuttering
Practical Examples
Chop an Amen Break
import cysox
from cysox import fx
# Get loop info
info = cysox.info('amen.wav')
print(f"Duration: {info['duration']:.3f}s")
# Assuming 2-bar loop at 175 BPM
bpm = 175
# Slice into individual beats
slices = cysox.slice_loop('amen.wav', 'amen_beats/', bpm=bpm)
print(f"Created {len(slices)} beat slices")
# Slice into 16th notes with breakbeat processing
slices = cysox.slice_loop('amen.wav', 'amen_16ths/',
slices=16,
effects=[fx.Breakbeat()]
)
# Create kick stutter fill
cysox.stutter('amen.wav', 'kick_fill.wav',
segment_start=0,
segment_duration=info['duration'] / 16, # First 16th note
repeats=16
)
Process Drum Loops
# Half-time for slow, heavy feel
cysox.convert('drums.wav', 'halftime.wav', effects=[fx.HalfTime()])
# Lo-fi vintage break sound
cysox.convert('drums.wav', 'vintage.wav', effects=[
fx.VintageBreak(),
fx.DrumRoom(wetness=20)
])
# 80s gated reverb snare
cysox.convert('drums.wav', 'gated.wav', effects=[fx.GatedReverb()])
# Full processing chain
cysox.convert('drums.wav', 'processed.wav', effects=[
fx.RemoveRumble(cutoff=40),
fx.DrumPunch(punch=5, attack=4),
fx.DrumRoom(room_size=30, wetness=20),
fx.BroadcastLimiter(),
])
## Low-Level API
For advanced use cases, access the full libsox bindings:
```python
from cysox import sox
# Manual initialization (high-level API handles this automatically)
sox.init()
# Open files
input_fmt = sox.Format('input.wav')
output_fmt = sox.Format('output.wav', signal=input_fmt.signal, mode='w')
# Build effects chain
chain = sox.EffectsChain(input_fmt.encoding, output_fmt.encoding)
e = sox.Effect(sox.find_effect("input"))
e.set_options([input_fmt])
chain.add_effect(e, input_fmt.signal, input_fmt.signal)
e = sox.Effect(sox.find_effect("vol"))
e.set_options(["3dB"])
chain.add_effect(e, input_fmt.signal, input_fmt.signal)
e = sox.Effect(sox.find_effect("output"))
e.set_options([output_fmt])
chain.add_effect(e, input_fmt.signal, input_fmt.signal)
# Process
chain.flow_effects()
# Cleanup
input_fmt.close()
output_fmt.close()
sox.quit()
Building from Source
macOS
brew install sox libsndfile mad libpng flac lame mpg123 libogg opus opusfile libvorbis
make
make test
Linux
sudo apt-get install libsox-dev libsndfile1-dev pkg-config
make
make test
Status
Comprehensive test suite covering all functionality. All libsox C examples ported to Python (effects chains, waveform analysis, trim, concatenation, format conversion).
Known Issues
- Memory I/O: libsox memory I/O functions have platform issues (tests skipped)
- Init/Quit Cycles: Use high-level API to avoid init/quit issues (handled automatically)
See KNOWN_LIMITATIONS.md for details.
Platform Support
- macOS: Full support
- Linux: Full support
- Windows: Placeholder (contributions welcome)
Building Documentation
pip install sphinx furo myst-parser
make docs
make docs-serve # http://localhost:8000
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cysox-0.1.7.tar.gz.
File metadata
- Download URL: cysox-0.1.7.tar.gz
- Upload date:
- Size: 1.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2963c1179f1415606ccbc2fd4cfdc00a7f9fd50696ad6d553d6ee175f9662d35
|
|
| MD5 |
8254269eae31a6f8036978f7b7680076
|
|
| BLAKE2b-256 |
d4ebef42b668d8c24349296f90cff3af0f0d8951dd3a665cec366a0214bc7ccf
|
File details
Details for the file cysox-0.1.7-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cysox-0.1.7-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 820.0 kB
- Tags: CPython 3.14, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4790df27e71c4493302ed46de2f953db7004ffff3628d05c17efff987a653bf5
|
|
| MD5 |
d16dc688609ea3b1499b374d7b8aadd7
|
|
| BLAKE2b-256 |
0f02b9da3b216e51f80d39634169204b82bcba2d777f7e4c847cb6c7194692dc
|
File details
Details for the file cysox-0.1.7-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cysox-0.1.7-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 795.2 kB
- Tags: CPython 3.14, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66d28eea6cd13fbbaf1b04511401141394b9ef75781adaff1b85cc049b2f5e31
|
|
| MD5 |
42cbe984a115cd0172704c5f77b08cc3
|
|
| BLAKE2b-256 |
1950d8bcbe6aecd53b8c1775606eb0b7723d542d5140abb41fe7dffc2b85b733
|
File details
Details for the file cysox-0.1.7-cp314-cp314-macosx_11_0_arm64.whl.
File metadata
- Download URL: cysox-0.1.7-cp314-cp314-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.14, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e57b13b7400f7b558ca54d09840e8b7a4c684425f83bfb044d9ae58ef3ab9fff
|
|
| MD5 |
ae732331ba61659fdfc846339e61f688
|
|
| BLAKE2b-256 |
1017f03c27c2cc7690ed3d9cfbfc9949f0eb18c3999659f990e36142b277b2f0
|
File details
Details for the file cysox-0.1.7-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cysox-0.1.7-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 817.6 kB
- Tags: CPython 3.13, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30a7c9288a99ebea362e5eaa7765f629c2c4a42ccc98b2d451751bd7636cdb4c
|
|
| MD5 |
3693a648e903276bf045d460a00f1296
|
|
| BLAKE2b-256 |
98ec531624997996e106845ea4616094fed339539d4fc901dd4ddf8387aa6ef5
|
File details
Details for the file cysox-0.1.7-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cysox-0.1.7-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 790.9 kB
- Tags: CPython 3.13, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb2b35fec127fb05e6012e9d4af4180a93c78d5f8f16d324a83686b2f0396f86
|
|
| MD5 |
3e2acd7ebce59967cba0679ad7a9a76a
|
|
| BLAKE2b-256 |
8c4ae155e8026b960d295fb74f7d2ddb67d1e96d8f502142af1c4e189ba612b7
|
File details
Details for the file cysox-0.1.7-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: cysox-0.1.7-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1a0be3ba2495392f17f31c6a4da21186a1d66603098dab35e61788e2354c95a
|
|
| MD5 |
f69dfb13a7da1680e9ebd3ea90241597
|
|
| BLAKE2b-256 |
cfcf12a1e0d4cf158354585164728b4c9a2de23575960343123d3842005319d7
|
File details
Details for the file cysox-0.1.7-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cysox-0.1.7-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 817.8 kB
- Tags: CPython 3.12, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c240d0229f6cf6c7af38390a7a9d2276c02659dd38b82a6356df9650ff69705
|
|
| MD5 |
4f5380f0b42a92ebb56f13e80c660cf7
|
|
| BLAKE2b-256 |
4f6633b0cf0b482abd77e8cad69aed2fcff1da2cc87b8572cbd189439974ef33
|
File details
Details for the file cysox-0.1.7-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cysox-0.1.7-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 790.8 kB
- Tags: CPython 3.12, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f531065ae0f3ceb0c87726b7fc25b47d7976d081b1043c3222cd8f5767b6f80
|
|
| MD5 |
b908fec0874eea6d5927054834b70e2f
|
|
| BLAKE2b-256 |
77598ef5a73c71bc7b3867712575e183de130bb51fdb1b20d6c4b4f0d7437532
|
File details
Details for the file cysox-0.1.7-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: cysox-0.1.7-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d47fb257da0495d5958d4fbd8ee6b73faa5c11722ea32be5d05393da1ef30cf0
|
|
| MD5 |
f8d5d1ddd286cf9ada38cafc97174dc3
|
|
| BLAKE2b-256 |
a3c35c8e99114ef18377ad6e774ea4e365412832db3f52b96b8edc30297f6e21
|
File details
Details for the file cysox-0.1.7-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cysox-0.1.7-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 824.5 kB
- Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
13a891b088ec0f8c54aa5fbe8f50689084960c0966e5662b6bb655a88cb4f7a3
|
|
| MD5 |
2760e29a94ca196f601f5c3a0d0a1509
|
|
| BLAKE2b-256 |
96ccdc42353d063230e942e9738a625dae6d54adb4de6b473c84d2a152d2135a
|
File details
Details for the file cysox-0.1.7-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cysox-0.1.7-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 803.2 kB
- Tags: CPython 3.11, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b44f5145d5e46dbe9d40ee779d7721e3fa94bd56797ea755518ad3e2a30f5a60
|
|
| MD5 |
a411f28313117f84cef9f02948dba031
|
|
| BLAKE2b-256 |
215a40dd412ebcac07012675f4f23d16368e50277d2d35bd91dc075532b3b9e8
|
File details
Details for the file cysox-0.1.7-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: cysox-0.1.7-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
14a0b0dc8b7718759ef78ec38011a8691cbc64a48efb6d219edf9693439d02b1
|
|
| MD5 |
0d71bc71d2c4c9907472ddb103701798
|
|
| BLAKE2b-256 |
111eec8aa557b7b24ee7386f21f94427d173b8600f6e80780031b0574538dabf
|
File details
Details for the file cysox-0.1.7-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cysox-0.1.7-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 820.6 kB
- Tags: CPython 3.10, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66bd42acbb0608d30a475a2756f48df4d8532aa05d0cc81e6220b8ca49b64178
|
|
| MD5 |
364fdf12f1eb8cacab54648f67f445df
|
|
| BLAKE2b-256 |
e066d37f2e9ebdb09a19aa5ae075085d501fd7d792d93d294f6568b0413df6e9
|
File details
Details for the file cysox-0.1.7-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cysox-0.1.7-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 801.1 kB
- Tags: CPython 3.10, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
05e8aa9306af48e02ca8631a4a527ec8e08889460df7e8bd8b7931302c26c208
|
|
| MD5 |
c0e47ae2eee5428f50cd4e1fcd3c0c85
|
|
| BLAKE2b-256 |
534999e23454f7673b7249c99550041c49cdc69388ff85cdd8f44e0d5cfe6865
|
File details
Details for the file cysox-0.1.7-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: cysox-0.1.7-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f48937007dece0766f37bbcad5aa9a1e68a626851ba0b02cc017e260cfbdaae
|
|
| MD5 |
b9bf817ca4bfffc200de2d8f83db5dc8
|
|
| BLAKE2b-256 |
6bfe3e43ac6e3e10bf9e0e1370b81669ec66a59978a6bf00210eedbe2571fe73
|
File details
Details for the file cysox-0.1.7-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cysox-0.1.7-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 821.2 kB
- Tags: CPython 3.9, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c3b0e0e7230b1de45725fdeb17c970f74b72a10372728f59500d322b42d6b5e
|
|
| MD5 |
a67b808fe571e752206912bbd2c2c48d
|
|
| BLAKE2b-256 |
9f09bf600a599ab058090fa527fb9c6442c6571ff82c8ab140ea9a11ba509cc0
|
File details
Details for the file cysox-0.1.7-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cysox-0.1.7-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 801.4 kB
- Tags: CPython 3.9, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78604217e4b43cb891243c4cef18ee14863db5d196191fe9cf09496567bbb3bc
|
|
| MD5 |
9a0beebeb0acdddc69f66fb3ec1b4f0c
|
|
| BLAKE2b-256 |
f6581b9248dfc38f86d2e2dfd443b38a9769f939060eb51899d99e985609137d
|
File details
Details for the file cysox-0.1.7-cp39-cp39-macosx_11_0_arm64.whl.
File metadata
- Download URL: cysox-0.1.7-cp39-cp39-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.9, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
255ae575f7701f94122e82170fd40b1b020a68ffe4627c0858aa6dac93f4931d
|
|
| MD5 |
06e508a51d52f49919ebc4390559ed45
|
|
| BLAKE2b-256 |
871812441bbc9cf8556025006be4c083cfc22922d47d4ea82bffdc4d758abb0a
|