reeln-core
Shared Rust core library for reeln — the sports highlight rendering CLI. Provides native media processing, overlay rendering, game state management, and sport-specific logic consumed by the Python CLI, OBS plugin, and future Tauri desktop app.
License: AGPL-3.0-only | Homepage: https://streamn.dad | Org: StreamnDad
Architecture
reeln-core (Rust workspace)
├── reeln-media Media processing via libav* (probe, render, concat, xfade, composite, extract)
├── reeln-overlay 2D overlay template engine (tiny-skia + cosmic-text → PNG)
├── reeln-sport Sport registry & segment naming
├── reeln-state Game state machine, JSON persistence, directory management
├── reeln-config XDG configuration, env overrides, validation
├── reeln-plugin Hook system, capabilities, dynamic plugin loading
├── reeln-python PyO3 bindings → published as `reeln-native` on PyPI
└── reeln-ffi C ABI (cdylib + staticlib) for OBS plugin integration
Crate Details
| Crate | Tests | Key Dependencies | Purpose |
|---|---|---|---|
reeln-media |
150 | ffmpeg-next 8 |
Probe, render, concat, xfade, composite, frame extract |
reeln-overlay |
156 | tiny-skia, cosmic-text, image |
Template-to-PNG rasterization |
reeln-sport |
38 | serde |
Sport aliases, segment naming |
reeln-state |
35 | serde_json, chrono, uuid, glob |
Game state CRUD, directory ops |
reeln-config |
61 | dirs, serde_json |
Config loading, merge, env overrides |
reeln-plugin |
107 | libloading |
Hook emission, plugin discovery |
reeln-ffi |
37 | All reeln-* crates |
C ABI exports |
reeln-python |
— | pyo3 0.24 |
Python extension module |
| Total | 584 |
Prerequisites
Rust toolchain:
rustup update stable
libav* development libraries (the ffmpeg command-line binary is not required at runtime):
# macOS
brew install ffmpeg pkg-config
# Ubuntu/Debian
sudo apt-get install -y libavcodec-dev libavformat-dev libavfilter-dev \
libavutil-dev libswscale-dev libswresample-dev pkg-config
# Fedora
sudo dnf install ffmpeg-devel pkg-config
Building
# Build all crates
cargo build --release
# Run all tests (584 tests)
cargo test --all
# Check without building (faster)
cargo check --all
# Lint
cargo clippy --all-targets -- -D warnings
# Format
cargo fmt --all
Python Bindings
The reeln-python crate builds a native Python extension module published as reeln-native on PyPI.
# Development build (installs into active venv)
cd crates/reeln-python
pip install maturin
maturin develop --release
# Build wheel for distribution
maturin build --release
From reeln-cli:
# Install with native backend
pip install "reeln[native]"
# Or development install from source
cd /path/to/reeln-cli
make dev-install-native
Python API (reeln_native)
| Function | Module | Description |
|---|---|---|
probe(path) |
Media | Probe media file → dict with duration, fps, width, height, codec |
render(input, output, ...) |
Media | Render video with optional filters |
render_with_filters(input, output, filter_complex, ...) |
Media | Render with full filter_complex string |
concat(segments, output, ...) |
Media | Concatenate media segments |
xfade_concat(files, durations, output, ...) |
Media | Cross-fade concatenation (xfade + acrossfade) |
composite_overlay(video, overlay_png, output, ...) |
Media | Composite PNG overlay onto video |
extract_frame(input, timestamp, output) |
Media | Extract single frame as PNG |
list_sports() |
Sport | List supported sport aliases |
segment_dir_name(sport, number) |
Sport | Generate segment directory name |
segment_display_name(sport, number) |
Sport | Generate segment display name |
game_dir_name(date, home, away, number) |
State | Generate game directory name |
detect_next_game_number(base, date, home, away) |
State | Detect next double-header number |
find_unfinished_games(base_dir) |
State | Find unfinished game directories |
load_game_state(game_dir) |
State | Load game state JSON |
save_game_state(game_dir, json) |
State | Save game state JSON |
config_dir() |
Config | Default config directory path |
data_dir() |
Config | Default data directory path |
load_config(path, profile) |
Config | Load configuration as JSON |
validate_config(json) |
Config | Validate config, return warnings |
load_template(path) |
Overlay | Load overlay template JSON |
render_overlay(template, context, output) |
Overlay | Render template to PNG |
substitute_variables(text, context) |
Overlay | Substitute {{variables}} |
evaluate_visibility(condition, context) |
Overlay | Evaluate visibility condition |
list_hooks() |
Plugin | List all hook names |
load_native_plugin(path) |
Plugin | Load native plugin from .so/.dylib |
discover_plugins(dir) |
Plugin | Discover plugins in directory |
C ABI (reeln-ffi)
The reeln-ffi crate produces a C-compatible shared library for integration with C/C++ projects (e.g., OBS Studio plugins).
cargo build -p reeln-ffi --release
# Output: target/release/libreeln_ffi.{so,dylib,dll}
CI/CD
| Workflow | Trigger | What it does |
|---|---|---|
ci.yml |
Push/PR to main |
Format, clippy, test on Linux/macOS/Windows |
release.yml |
Tag v* |
Build wheels for 5 platforms, publish to PyPI (OIDC) |
Release targets:
x86_64-unknown-linux-gnuaarch64-unknown-linux-gnux86_64-apple-darwinaarch64-apple-darwin(Apple Silicon)x86_64-pc-windows-msvc
Consumers
| Project | How it uses reeln-core |
|---|---|
| reeln-cli | pip install "reeln[native]" — Python FFI via reeln_native |
| reeln plugins | Indirectly via reeln-cli at runtime |
| streamn-scoreboard | Subprocess calls to reeln CLI (future: link reeln-ffi) |
| reeln-tauri (planned) | Direct Rust dependency |
Versioning
- Workspace version: 0.2.2 (all crates share this version)
- reeln-cli declares
reeln-native >= 0.1.0, < 1.0as optional dependency - Changelog: CHANGELOG.md
- Semantic versioning: MAJOR.MINOR.PATCH
- Releases are tag-triggered (
v*pattern)
Metadata
Release files for reeln-native 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| reeln_native-0.3.0.tar.gz | 103.2 kB | With provenance | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| reeln_native-0.3.0-cp313-cp313-manylinux_2_28_x86_64.whl | CPython 3.13 | CPython 3.13 | Linux glibc 2.28+ x86-64 | Details |
| reeln_native-0.3.0-cp313-cp313-macosx_11_0_arm64.whl | CPython 3.13 | CPython 3.13 | macOS 11.0+ ARM64 | Details |
| reeln_native-0.3.0-cp312-cp312-manylinux_2_28_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.28+ x86-64 | Details |
| reeln_native-0.3.0-cp312-cp312-macosx_11_0_arm64.whl | CPython 3.12 | CPython 3.12 | macOS 11.0+ ARM64 | Details |
| reeln_native-0.3.0-cp311-cp311-manylinux_2_28_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.28+ x86-64 | Details |
| reeln_native-0.3.0-cp311-cp311-macosx_11_0_arm64.whl | CPython 3.11 | CPython 3.11 | macOS 11.0+ ARM64 | Details |
Total release size: 48.2 MB
Release files / reeln_native-0.3.0.tar.gz
| Download URL | reeln_native-0.3.0.tar.gz |
|---|---|
| Size | 103.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
69e1c381e2f0f5541a8f8e86be974fcd4a530ad14858ac804577c4e88214f34a
|
|
BLAKE2b-256 checksum How to use checksums |
0593761365e5a3a493c3f311e828ff4b3cfed57355f65be203c248ae8f65f8b7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / reeln_native-0.3.0-cp313-cp313-manylinux_2_28_x86_64.whl
| Download URL | reeln_native-0.3.0-cp313-cp313-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 14.1 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
91cded3f600248171e8e08bc0794bb59661e7b6f985c271dff2046bfee0885ca
|
|
BLAKE2b-256 checksum How to use checksums |
0e20e1e9a43cc66a13f4d652f28dc89fd80ad82b78fe740bd8bfb911a16f002e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / reeln_native-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | reeln_native-0.3.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.0 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
58d4983fe1a14b744b81de87f9e56266fda3fa75fe92249d363ddae0ccfb8e4c
|
|
BLAKE2b-256 checksum How to use checksums |
2860a8ddee4d775e356de0e4d4ba8f65bc47fb04ba0bf7a79c5734147b6b9c3c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / reeln_native-0.3.0-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | reeln_native-0.3.0-cp312-cp312-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 14.1 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
939404f4b76694e9015be90e1b8bd9ecf97753415e48e793620185eeb40ced3c
|
|
BLAKE2b-256 checksum How to use checksums |
69850eb5fd680395b922d5fe3d9d0e616505016edb0a050306f5b3416b80c71b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / reeln_native-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | reeln_native-0.3.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.0 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f32af7b42a275f28226501c759edfb785494ed194a1d38e5c1fdcb0b618380e7
|
|
BLAKE2b-256 checksum How to use checksums |
cf2112f7be1c0426a1de7a49493dfa17845e61bcbda5ef54564403692ab3cd0a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / reeln_native-0.3.0-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | reeln_native-0.3.0-cp311-cp311-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 14.1 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
1b63181009e5147028278e6b5908a92ef82112e4361f1d5f24f74dfac6d0204c
|
|
BLAKE2b-256 checksum How to use checksums |
933d514155e922a67fa6f8433b81989a24b1b70dab87bc0f645d9335d0b0ba13
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / reeln_native-0.3.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | reeln_native-0.3.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.0 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
5315ac4cec9396dc6b299ae1bc5e6d2c43bc91f06bd6f913b5bcc176cfcdedc4
|
|
BLAKE2b-256 checksum How to use checksums |
ab9d8d60ceaa764d85846fa3e7ce97794a62f95699397e4d97bd6e59ef608e0e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logSecurity for reeln-native 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 7 files in this release have been uploaded with provenance metadata.
Attestation for reeln_native-0.3.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.