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.1

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.1
File Size Uploaded
nextcloud_talk_capture-0.3.1.tar.gz 43.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nextcloud-talk-capture 0.3.1
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 release files

0.3.0

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