Skip to main content

stapel-recordings

CI coverage pypi downloads python license llms.txt

Recording lifecycle: audio/video upload (presigned single-PUT and multipart), storage, a configurable processing pipeline (convert, transcribe, diarize, merge) producing a unified speaker-attributed transcript, optional automatic summaries, and a watchdog that recovers stuck or abandoned recordings.

Part of the Stapel framework — composable Django apps that deploy as a monolith or as microservices without changing module code.

Install

pip install stapel-recordings

At a glance

Fact Value
Version 0.20.0
Python >=3.11 (3.11, 3.12, 3.13, 3.14)
HTTP operations 11
Config axes 1
Usage surface 40
Extension points 7
Error codes 59
Fleet dependencies stapel-agent (optional) · stapel-auth (optional) · stapel-core

Documentation

OpenAPI · capabilities.json · llms.txt (for agents)

What this is

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.

Quick start

The base install uses the Django-storage backend; add the s3 extra for the boto3 S3/MinIO backend:

pip install "stapel-recordings[s3]"
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); the run events carry run_id + attempt — a reprocess is a new run, so meter on recording_id + run_id
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 — see LICENSE.


This page is assembled by stapel-readme from docs/readme.md plus the contract artifacts in docs/. Edit the prose in docs/readme.md; the badges, facts and links above and below it are generated — do not hand-edit README.md.

Download files

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

Source Distribution

stapel_recordings-0.20.0.tar.gz (250.8 kB view details)

Uploaded Source

Built Distribution

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

stapel_recordings-0.20.0-py3-none-any.whl (198.0 kB view details)

Uploaded Python 3

File details

Details for the file stapel_recordings-0.20.0.tar.gz.

File metadata

  • Download URL: stapel_recordings-0.20.0.tar.gz
  • Upload date:
  • Size: 250.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for stapel_recordings-0.20.0.tar.gz
Algorithm Hash digest
SHA256 83154470aabae5ffa579babc740aaeb95e34c1e34041ee5c82131324e035ace9
MD5 2da803a778126bbef5a43f5bd58d69fa
BLAKE2b-256 3f810b8191fa3580c16a3c9028d318ba7d4dc88b1028e55aa51b0f1779f9a778

See more details on using hashes here.

Provenance

The following attestation bundles were made for stapel_recordings-0.20.0.tar.gz:

Publisher: publish.yml on usestapel/stapel-recordings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file stapel_recordings-0.20.0-py3-none-any.whl.

File metadata

File hashes

Hashes for stapel_recordings-0.20.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d0a41e139be1b7c59e4c3804298876e7f96aeef7bb811f8e2f104414b880b9fa
MD5 f9c00b923bf5134be749cc3420cf71e3
BLAKE2b-256 520158a2652ea6dd9f744f0921e74a00bb2f24b84297ada4043b38441ed595d4

See more details on using hashes here.

Provenance

The following attestation bundles were made for stapel_recordings-0.20.0-py3-none-any.whl:

Publisher: publish.yml on usestapel/stapel-recordings

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.25.0

2 files

0.24.0

2 files

0.23.1

2 files

0.23.0

2 files

0.22.1

2 files

0.22.0

2 files

0.21.1

2 files

0.21.0

2 files

0.20.2

2 files

0.20.1

2 files

This release

0.20.0 This release

2 files

0.19.0

2 files

0.18.0

2 files

0.17.1

2 files

0.16.1

2 files

0.15.0

2 files

0.14.2

2 files

0.14.1

2 files

0.14.0

2 files

0.13.1

2 files

0.13.0

2 files

0.12.0

2 files

0.10.0

2 files

0.9.0

2 files

0.8.3

2 files

0.8.2

2 files

0.8.1

2 files

0.8.0

2 files

0.7.0

2 files

0.6.2

2 files

0.6.1

2 files

0.6.0

2 files

0.5.2

2 files

0.5.1

2 files

0.4.4

2 files

0.4.3

2 files

0.4.0

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.2.1

2 files

0.1.2

2 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