Skip to main content

nextcloud-talk-capture

Captures Nextcloud Talk calls: the service joins a call, takes one audio stream per speaker, and streams it to a processing gateway.

That is all it does. No recognition, no analysis, no writing files — the finished files come back from the gateway, and the Nextcloud app puts them away under its own credentials, which never leave the customer's premises.

Part of Voxonta. Documentation: running the connector yourself.

Three parts, one of them here

Nextcloud + the app             the connector (this repo)            the cloud
───────────────────             ─────────────────────────            ─────────
keeps the meeting archive       reads its settings from the app
serves settings and calls  ───▶ joins the call
writes the finished files       streams per-speaker audio       ───▶ processing
        ▲                                                            │
        └────────────────── finished files ◀─────────────────────────┘

Nextcloud is a black box to the cloud and the other way round: the connector does not know what happens to the audio once it is sent, and the cloud has no access to Nextcloud.

Install

Two values are needed. Everything else the service asks the app for at startup — the signalling server and its secret, the bot account, which conversations to capture, the folder names.

docker run -d --name nextcloud-talk-capture \
  -e NEXTCLOUD_URL=https://cloud.example.com \
  -e APP_SERVICE_TOKEN=<key from the app's admin settings> \
  -e GATEWAY_TARGET=<gateway address> \
  -e GATEWAY_TOKEN=<gateway key> \
  nextcloud-talk-capture

The service makes outbound connections only: behind NAT it needs no port forwarding and no inbound webhooks.

Where to put it

Capture is a WebRTC client — it connects to the signalling server the way an ordinary participant does. Running it next to the signalling server is not required, but the closer the two are on the network, the fewer reasons ICE has to fail to agree.

Environment

Variable Required What it is
NEXTCLOUD_URL yes the Nextcloud address
APP_SERVICE_TOKEN yes shared secret with the app
GATEWAY_TARGET yes host:port of the processing gateway
GATEWAY_TOKEN yes access key for the gateway
GATEWAY_TLS no false for local debugging only
POLL_INTERVAL no how often to ask the app about calls, seconds (5)
NC_APP_ID no the app's id, voxonta by default — only if you renamed it
INCLUDED_ROOMS / EXCLUDED_ROOMS no narrow the scope locally without changing it for everyone
DIAGNOSTIC_LOGGING no verbose capture logs

As a library

pip install nextcloud-talk-capture
from talk_capture import AppClient, AppCallMonitor, BrainSink, SpreedClient

The generated contract stubs ship inside the package (talk_capture/_pb), so installing needs no protoc. After editing proto/meeting/v1/meeting.proto regenerate them with scripts/regen_stubs.sh.

Development

pip install -e '.[dev]' pytest
python -m pytest tests -v

Licence

MIT.

Metadata

Release files for nextcloud-talk-capture 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nextcloud-talk-capture 0.3.0
File Size Uploaded
nextcloud_talk_capture-0.3.0.tar.gz 42.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nextcloud-talk-capture 0.3.0
File Interpreter ABI Platform
nextcloud_talk_capture-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 84.9 kB

Release files / nextcloud_talk_capture-0.3.0.tar.gz

Download URL nextcloud_talk_capture-0.3.0.tar.gz
Size 42.1 kB
Tags Source
SHA-256 checksum
How to use checksums
534afb451275fef9b271a075340903d4eaf0498448282e6e9066847022ac3c36
BLAKE2b-256 checksum
How to use checksums
ef670221ef796e58b3147ea1d4680f3de41f72c8d68504746770833c6c127cad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 11, 2026.

Transparency log

Release files / nextcloud_talk_capture-0.3.0-py3-none-any.whl

Download URL nextcloud_talk_capture-0.3.0-py3-none-any.whl
Size 42.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c0820090805407d446255438e69faabe67786157019a7573f01e7c50cdd1a3f0
BLAKE2b-256 checksum
How to use checksums
8819b85907ff49b4241ca5a340ef177ffc63170baa2fa573c4a9e8bc3c65b7c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 11, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.1

2 release files

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.0

2 release 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