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.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nextcloud_talk_capture-0.3.1.tar.gz | 43.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nextcloud_talk_capture-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 86.8 kB
Release files / nextcloud_talk_capture-0.3.1.tar.gz
| Download URL | nextcloud_talk_capture-0.3.1.tar.gz |
|---|---|
| Size | 43.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1f057bfc3f0c4ee6b9be29227bfc926c55d625f7ba2281f2d424abe81d606ced
|
|
BLAKE2b-256 checksum How to use checksums |
6317cc1ff63016956d28721e69ba1f9434329a6853b6fd6ec2145145c0466ba2
|
| 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 Sep 23, 2026.
Transparency logRelease files / nextcloud_talk_capture-0.3.1-py3-none-any.whl
| Download URL | nextcloud_talk_capture-0.3.1-py3-none-any.whl |
|---|---|
| Size | 43.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
43d6a1a6e8058f19a70457f37efab29f4681e24a336d32283d5f3bf9382b65b6
|
|
BLAKE2b-256 checksum How to use checksums |
faa13e5309e3a15e19bb2f58641b3c7bb816a2c2203b0f6214777ef10f10a807
|
| 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 Sep 23, 2026.
Transparency log