A Pythonic audio processing library wrapping libsox
Project description
cysox
A Python audio processing tool / library which uses Cython to wrap libsox.
Documentation | API Reference | Examples
Features
- Simple API: Convert, analyze, and play audio with one-liners
- Typed Effects: 27 base effect classes with IDE autocomplete and validation
- 53 Effect Presets: Ready-to-use composite effects for voice, lo-fi, drums, mastering, and more
- Sample Processing: Auto-trim silence, split recordings into one-shots, generate chromatic pitch scales, batch process directories
- Drum Loop Tools: Slice loops by BPM, create stutter effects, apply beat-synced processing
- High Performance: Direct C bindings through Cython, KissFFT-accelerated onset detection
- 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
cysox convert input.wav output.wav -p Telephone
# 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
# Trim silence from beginning and end of audio
cysox auto-trim raw.wav trimmed.wav
cysox auto-trim raw.wav trimmed.wav --thresh -36 --fadein 10 --fadeout 50
cysox auto-trim raw.wav trimmed.wav --speedup 2
# Split continuous recording into one-shots at silence gaps
cysox split recording.wav one_shots/
cysox split recording.wav one_shots/ --thresh -36 --min-silence 0.5
# Generate pitch-shifted copies (chromatic scale)
cysox pitch-scale sample.wav scale/ # 12 semitones (1 octave)
cysox pitch-scale sample.wav scale/ --range 24 --offset -12
# Batch process all audio files in a directory
cysox batch raw_samples/ processed/ -p Normalize
cysox batch raw_samples/ processed/ --rate 44100 --channels 1 --format wav
cysox batch raw_samples/ processed/ --no-recursive -p DrumPunch
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) -> AudioInfo
Get audio file metadata. Returns an AudioInfo object supporting both attribute
access and dict-style access:
info = cysox.info('audio.wav')
print(info.duration) # Attribute access
print(info['sample_rate']) # Dict-style access (backwards compatible)
# Fields: path, format, duration, sample_rate, channels,
# bits_per_sample, samples, encoding
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 27 base effect classes and 53 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
fx.Silence(threshold=-48) # Remove silence by amplitude
Conversion
fx.Rate(sample_rate=48000) # Resample
fx.Channels(channels=1) # Change channel count
fx.Remix(mix=["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', 'complex', or 'superflux'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', 'complex', or 'superflux'
)
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
-
superflux- Superflux (Boeck & Widmer, DAFx 2013)- Mel-scaled spectral flux with vibrato suppression
- Maximum filter along frequency axis to reject false onsets from frequency modulation
- Backtracking from peaks to nearest local minimum for precise transient placement
- Best for: polyphonic material, vibrato-heavy sources, maximum precision
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(),
])
Sample Processing
cysox includes sample processing utilities ported from AudioHit for preparing audio samples for software and hardware samplers.
cysox.auto_trim() - Trim Silence
Detect and remove silence from the beginning and end of audio based on amplitude threshold:
# Basic silence trimming
cysox.auto_trim('raw.wav', 'trimmed.wav')
# Custom threshold (less sensitive)
cysox.auto_trim('raw.wav', 'trimmed.wav', threshold_db=-36)
# With fade in/out (milliseconds)
cysox.auto_trim('raw.wav', 'trimmed.wav', fade_in=10, fade_out=50)
# Speed up after trimming
cysox.auto_trim('raw.wav', 'trimmed.wav', speed_factor=2.0)
# With additional effects
cysox.auto_trim('raw.wav', 'trimmed.wav', effects=[fx.Normalize()])
Parameters:
path: Input audio fileoutput_path: Output audio filethreshold_db: Amplitude threshold in dB (default: -48dB)min_silence: Minimum non-silence duration in seconds (default: 0.1)fade_in: Fade-in duration in milliseconds (default: 0)fade_out: Fade-out duration in milliseconds (default: 0)speed_factor: Playback speed multiplier (default: None)effects: Additional effects to apply after trimming
cysox.split_by_silence() - Split at Silence Gaps
Split a continuous recording into separate one-shot samples at silence boundaries:
# Split at default threshold
segments = cysox.split_by_silence('recording.wav', 'one_shots/')
# Custom detection parameters
segments = cysox.split_by_silence('recording.wav', 'one_shots/',
threshold_db=-36, # Less sensitive
min_silence=0.5, # Require 500ms of silence to split
min_segment=0.25, # Discard segments shorter than 250ms
)
# With fades and effects on each segment
segments = cysox.split_by_silence('recording.wav', 'one_shots/',
fade_in=5, fade_out=20,
effects=[fx.Normalize()],
)
Parameters:
path: Input audio fileoutput_dir: Directory for segment files (created if needed)threshold_db: Amplitude threshold in dB (default: -48dB)min_silence: Minimum silence duration to trigger split, in seconds (default: 0.25)min_segment: Minimum segment duration, in seconds (default: 0.25)fade_in: Fade-in per segment in milliseconds (default: 0)fade_out: Fade-out per segment in milliseconds (default: 0)speed_factor: Playback speed multiplier (default: None)output_format: Output format (default: "wav")effects: Effects to apply to each segment
Returns: List of created file paths
cysox.pitch_scale() - Generate Chromatic Pitch Variants
Create multiple pitch-shifted copies of a sample at semitone intervals, useful for building playable melodic sample libraries:
# Generate one octave (12 semitones) of chromatic variations
files = cysox.pitch_scale('c3_piano.wav', 'scale/')
# Creates: scale/c3_piano_pitch_+0.wav through scale/c3_piano_pitch_+11.wav
# Two octaves starting from one octave below
files = cysox.pitch_scale('sample.wav', 'scale/',
semitones=24, offset=-12)
# With effects on each copy
files = cysox.pitch_scale('sample.wav', 'scale/',
semitones=12, effects=[fx.Normalize()])
Parameters:
path: Input audio fileoutput_dir: Directory for pitch-shifted files (created if needed)semitones: Number of copies to generate (default: 12)offset: Starting semitone offset (default: 0)output_format: Output format (default: "wav")effects: Effects to apply to each copy after pitch shifting
Returns: List of created file paths
cysox.batch() - Batch Process Directories
Process all audio files in a directory tree:
# Convert a folder to mono 22050Hz
processed = cysox.batch('samples/', 'processed/',
sample_rate=22050, channels=1)
# Apply effects to all files
processed = cysox.batch('raw/', 'ready/',
effects=[fx.Normalize(), fx.Fade(fade_in=0.01)])
# Convert format, non-recursive
processed = cysox.batch('input/', 'output/',
output_format='flac', recursive=False)
# With progress callback
cysox.batch('raw/', 'done/',
on_file=lambda i, o: print(f" {i} -> {o}"))
Parameters:
input_dir: Directory containing audio filesoutput_dir: Directory for processed files (created if needed)effects: Effects to apply to each filesample_rate: Target sample rate in Hzchannels: Target number of channelsbits: Target bits per samplerecursive: Process subdirectories (default: True)output_format: Output format (None keeps original)on_file: Callback called after each file(input_path, output_path)
Returns: List of processed output file paths
Low-Level API
For advanced use cases, access the full libsox bindings:
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 mkdocs-material
make docs # Build static site
make docs-serve # Live preview at http://localhost:8000
License
MIT
KissFFT (vendored in vendor/kissfft/) is BSD-3-Clause licensed. See vendor/kissfft/COPYING.
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.11.tar.gz.
File metadata
- Download URL: cysox-0.1.11.tar.gz
- Upload date:
- Size: 2.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57f5e9c741986edd0b37aadb1fdde30d29da735bd00f174127f02eb50e73459d
|
|
| MD5 |
1d0c089312b29678f315848529310e48
|
|
| BLAKE2b-256 |
94282c832e2499a851a58890877f9be776dad6cc32f1cd5eec4aaccf64a85ffc
|
File details
Details for the file cysox-0.1.11-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cysox-0.1.11-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 856.6 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 |
1ea85f5902b0760bf4f374df0a0a26ecdc768ce8f346eeca7e85cb47ff0e7586
|
|
| MD5 |
fae6311f4152dcc24d1001e112e241ea
|
|
| BLAKE2b-256 |
cfb2f9cfbf7b8dc48006a7569c322da387179c243a353f6f01ee1a1c613ab8aa
|
File details
Details for the file cysox-0.1.11-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cysox-0.1.11-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 830.0 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 |
0f8e190c4087d072f15f84a382fbe054274ed42316634ed22ccd43ae849b1de7
|
|
| MD5 |
c51e26ad4763eb8d1e3e9c80fe78f29b
|
|
| BLAKE2b-256 |
432fec064117a195c76230a0cd2a1962eeab128689bfb5e7853615e8080bdf57
|
File details
Details for the file cysox-0.1.11-cp314-cp314-macosx_11_0_arm64.whl.
File metadata
- Download URL: cysox-0.1.11-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 |
cd96517d277268b7ffc11bbbbd4f08b3d7666ab4e2155d37e1064bb8cfd89e85
|
|
| MD5 |
e686b98ce7fcdfde0dfd548e1e80ad2e
|
|
| BLAKE2b-256 |
bbf2c6d866be65086394bc2a6da149db5f0307e347d41a4a165c58d799c8707a
|
File details
Details for the file cysox-0.1.11-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cysox-0.1.11-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 854.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 |
8b2b1944266c2ecc79a35f8f3dcbd5b07ef031ea7c7bab8e5eca88fdd0e1bb13
|
|
| MD5 |
76ad218d057c1b2c073563869ef938e1
|
|
| BLAKE2b-256 |
628b2dfe9f0ca7090e37f2edf6ac0e3ed4529cadc85ec993166bd5c6980bd1e7
|
File details
Details for the file cysox-0.1.11-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cysox-0.1.11-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 825.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 |
a8da890014cff43722e9d515ece135f8ee5af0b6ded8b00cfd8c55fdd0d44fd8
|
|
| MD5 |
4cf60482cfaa143b852c08a710dacdb6
|
|
| BLAKE2b-256 |
1344cfa05fb97c1482117efa0b38d4d467dc1135e719f1fcb46b5ad1f9b46670
|
File details
Details for the file cysox-0.1.11-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: cysox-0.1.11-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 |
e1e3158334083a60b49e71f4c90761f7f948ca94afc1dfe71a82c8d5372cec3d
|
|
| MD5 |
a322c01e423d4c0d2e122b6b7b6615c2
|
|
| BLAKE2b-256 |
220f17878fd77204dea74d159922a6e522472ac3afc3c17b9e9e397865931f1c
|
File details
Details for the file cysox-0.1.11-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cysox-0.1.11-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 854.7 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 |
914bd64ac8f5d7b7bf70e0440646c269c2ca39a1c40e936f1c0e0f359130486b
|
|
| MD5 |
227525e9f831b1ee49515a5e78c8075e
|
|
| BLAKE2b-256 |
581b41d6c5c4d4a05da5b59031b1fdad3989ae2bf3dc05ab0e112abf2c045f76
|
File details
Details for the file cysox-0.1.11-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cysox-0.1.11-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 825.9 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 |
87f80aa7a61f58e58a450d7e10f5d166e4a7b488d12248667fc90426fe359a0d
|
|
| MD5 |
f0a00937ad2a3c274fed592eeb14b54c
|
|
| BLAKE2b-256 |
2afb929fbe7e5de17650db1c2bcf320af8189ccc491a8a9d073eca4b4e413553
|
File details
Details for the file cysox-0.1.11-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: cysox-0.1.11-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 |
66ff19e73d4c776495ee37228054fa2fc5a6913e7c847c516fbbcefbd6ceefe0
|
|
| MD5 |
7dcd1c4ec465e26eee28a81de1849077
|
|
| BLAKE2b-256 |
7addc98723efd0a84e3a5eba39df00d22f4a51125778b5e1691b3389f6ae1135
|
File details
Details for the file cysox-0.1.11-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cysox-0.1.11-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 864.7 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 |
d789a48f7206774094acc49f87866ab03c3b8501786d8f6c6642045eb12906ef
|
|
| MD5 |
b0befdc8aa6bff987976b9d9a8cec848
|
|
| BLAKE2b-256 |
8400f8a2fb0ce0af9043b5d16e7e4af25f24757f9dc1eac2e30dbab5fcb92ba7
|
File details
Details for the file cysox-0.1.11-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cysox-0.1.11-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 842.3 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 |
552f3df79395c456b579c9cceea6a0a4adb1aba166a48d0bc246d502156f0858
|
|
| MD5 |
c89d7752573a49e9090f2667befc22a9
|
|
| BLAKE2b-256 |
917905cab2befdec939d9b4193157eef230c406241f71d1e69b3ddf0afd2a14b
|
File details
Details for the file cysox-0.1.11-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: cysox-0.1.11-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 |
537392e361d3b515d20b93b530619960444abfe7a4945635d3d9db424cf213bd
|
|
| MD5 |
1dd5d6e2d97b3063ffba9653b01b5492
|
|
| BLAKE2b-256 |
5b69908078f0660929ac8565cd7b57894e05bc19c5f4c88f75ccb89c6e4957c4
|
File details
Details for the file cysox-0.1.11-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cysox-0.1.11-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 862.5 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 |
0b43f035426d7016c5d6b67e485f9075570cebaffc52666d3fc01d1c6beca349
|
|
| MD5 |
7738f75834b0a1969478e0421bf36d3f
|
|
| BLAKE2b-256 |
19023855a7da7364ccb6dcfa39d5199f81dc05b1bb40c582773a930993327186
|
File details
Details for the file cysox-0.1.11-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cysox-0.1.11-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 839.8 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 |
61206dbce466dd7e9122fc46f97ab0c65d1c5fd7d567c9aac01abe7cc4be6148
|
|
| MD5 |
8c044c971881285688ef0872b1dbe7da
|
|
| BLAKE2b-256 |
31b5b7f6031955cc4f75e7c13c83839f22b6e37eab6659caf38085590fd40868
|
File details
Details for the file cysox-0.1.11-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: cysox-0.1.11-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 |
62b744ebf8609d89e396879bfd6a966d59538b051cfe8244bc063cfae8353973
|
|
| MD5 |
85a7eeb001abe358abaf96908f287c73
|
|
| BLAKE2b-256 |
037a6f933b7389bd243f132732d406440d668eb47c93add65e20df3f11c17528
|
File details
Details for the file cysox-0.1.11-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cysox-0.1.11-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 863.0 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 |
eb7e56f46f6fa1d1bcaeb9374f4326ac647b8878a0e7450dfdb0296ef14264af
|
|
| MD5 |
08f54a365ff47d4f25579603c65c783a
|
|
| BLAKE2b-256 |
a622f2330639e8251296a096c52951dbbdf66bbcdfc5f68688b4b122aa135ed3
|
File details
Details for the file cysox-0.1.11-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cysox-0.1.11-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 840.6 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 |
844e5cf2018714ed59daa1249e02306bb9fa93e8a2147327cbbe01df8a6ac28e
|
|
| MD5 |
b53d97852f68ce54aecae69439f8ebe7
|
|
| BLAKE2b-256 |
567b779c0d5954e4b58ffdea6a7ddb06dd6548f0345bbc238015df507ceb0c65
|
File details
Details for the file cysox-0.1.11-cp39-cp39-macosx_11_0_arm64.whl.
File metadata
- Download URL: cysox-0.1.11-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 |
90fa64d46a5e63e5f5964001e7255e4c3ef0e034886b62ba9d9b7160ede9da47
|
|
| MD5 |
19926c02395e89e72d73a9f89921bfed
|
|
| BLAKE2b-256 |
ccb82f9e2d052d46f8acaaa0e85520ed283c7d9ad33033db5d99e1f4c18f6d52
|