Recording lifecycle and transcription for the Stapel framework
Project description
stapel-recordings
Recording lifecycle and transcription for the Stapel framework — composable Django apps that deploy as a monolith or as microservices without changing module code.
Owns the lifecycle capture/upload → storage → transcribe → summarize:
Recording + Speaker + Segment (the unified transcript), presigned /
multipart upload sessions, and a data-driven, outbox-backed processing
pipeline with retry, DLQ and reconcile.
Speech-to-text and summarization are delegated to
stapel-agent via the
llm.transcribe / llm.summarize comm Functions — this module does not
implement STT or LLM calls. Object storage goes through a swappable seam.
Install
pip install stapel-recordings # default: Django-storage backend
pip install "stapel-recordings[s3]" # + boto3 S3/MinIO backend
INSTALLED_APPS = [
# ...
"stapel_core.django.outbox", # transactional outbox (pipeline reliability)
"stapel_recordings",
]
# urls.py
path("recordings/", include("stapel_recordings.urls"))
The transcribe / merge stages call stapel-agent by comm name — install
and configure stapel-agent (or provide llm.transcribe / llm.summarize
providers) for the pipeline to complete. The default convert stage needs
ffmpeg/ffprobe on PATH (or set NORMALIZER to passthrough_normalize).
The pipeline is data you can edit
STAPEL_RECORDINGS = {
# Reorder / subset / insert stages — no fork:
"PIPELINE": ["convert", "transcribe", "redact_pii", "merge"],
# Replace or add stage handlers (merge-over-builtins; None removes):
"STAGES": {"diarize": "myproject.stages.PyannoteDiarizer"},
# Or source the list at runtime (DB / per-workspace / per-recording):
"PIPELINE_RESOLVER": "myproject.pipelines.resolve",
# Swap the object store:
"STORAGE": "stapel_recordings.storage.S3Backend",
}
A generic driver runs the resolved stage list, advancing the status machine and emitting the next stage through the outbox. See MODULE.md for the stage contract and worked examples.
Settings
All configuration lives in the STAPEL_RECORDINGS namespace (dict setting,
flat setting, or env var — resolved lazily). See the full table in
MODULE.md. Highlights: PIPELINE, STAGES,
PIPELINE_RESOLVER, STORAGE, NORMALIZER, SUMMARIZE_ENABLED,
MAX_STAGE_RETRIES.
comm surface
| Kind | Name | Contract |
|---|---|---|
| Action (emit) | recording.uploaded, recording.stage_completed, recording.completed, recording.failed |
pipeline lifecycle (public) |
| Action (consume) | recording.uploaded, recording.stage, user.deleted |
driver + GDPR erase |
| Function (call) | llm.transcribe, llm.summarize |
provided by stapel-agent |
Operations
python manage.py recordings_reconcile --once # re-drive stuck recordings
Development
pip install -e . && pip install pytest pytest-django ruff jsonschema djangorestframework
./setup-hooks.sh
pytest tests/
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 Distribution
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 stapel_recordings-0.4.4.tar.gz.
File metadata
- Download URL: stapel_recordings-0.4.4.tar.gz
- Upload date:
- Size: 71.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae9fb6e85e8a90277fab933ac57003cd582a1d02164f9ec5d5bbc98290fb87a6
|
|
| MD5 |
44a066700b98afa9549f9ddae77221e1
|
|
| BLAKE2b-256 |
6265c65c04dd22c9b46a82cbb0c103e450c6399f868f2b7dec3766d6597524c0
|
Provenance
The following attestation bundles were made for stapel_recordings-0.4.4.tar.gz:
Publisher:
publish.yml on usestapel/stapel-recordings
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
stapel_recordings-0.4.4.tar.gz -
Subject digest:
ae9fb6e85e8a90277fab933ac57003cd582a1d02164f9ec5d5bbc98290fb87a6 - Sigstore transparency entry: 2215134377
- Sigstore integration time:
-
Permalink:
usestapel/stapel-recordings@f614debb3a69d78c70cd644b5c6f45996efa4b71 -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/usestapel
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f614debb3a69d78c70cd644b5c6f45996efa4b71 -
Trigger Event:
push
-
Statement type:
File details
Details for the file stapel_recordings-0.4.4-py3-none-any.whl.
File metadata
- Download URL: stapel_recordings-0.4.4-py3-none-any.whl
- Upload date:
- Size: 63.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36dee6abf326d55b0df1e5c8f58c0709581091a9fb9940aa5f53b4597f817863
|
|
| MD5 |
95b3cf346d9ded5ed5390317207f42ec
|
|
| BLAKE2b-256 |
a7cca1d864c7d3ad2608a11b6423f7a199f016c6c2d7eda4fba578adf812abc2
|
Provenance
The following attestation bundles were made for stapel_recordings-0.4.4-py3-none-any.whl:
Publisher:
publish.yml on usestapel/stapel-recordings
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
stapel_recordings-0.4.4-py3-none-any.whl -
Subject digest:
36dee6abf326d55b0df1e5c8f58c0709581091a9fb9940aa5f53b4597f817863 - Sigstore transparency entry: 2215134429
- Sigstore integration time:
-
Permalink:
usestapel/stapel-recordings@f614debb3a69d78c70cd644b5c6f45996efa4b71 -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/usestapel
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f614debb3a69d78c70cd644b5c6f45996efa4b71 -
Trigger Event:
push
-
Statement type: