A small Scrypted mixin that gives an existing RTSP/PTZ camera device an
Intercom interface by delegating talkback to another Scrypted camera that
already has working two-way audio.
The plugin was built and tested with a TP-Link Tapo C246D dual-lens camera and
Scrypted 0.143.0. The PTZ lens remains an independent RTSP Camera device while
the C246D wide-camera device, using the official @scrypted/tapo Two Way Audio
extension, acts as its Intercom backend.
Apple Home
-> RTSP/PTZ camera device
video: existing RTSP streams
PTZ: existing ONVIF PTZ extension
Intercom: Tapo Intercom Proxy
-> selected camera with an existing Intercom interface
-> physical Tapo camera talkback
The proxy passes the original Scrypted MediaObject unchanged to the backend.
It does not implement the Tapo protocol, transcode audio, change RTSP streams,
or modify PTZ, HomeKit, motion, or recording configuration.
- Scrypted 0.143.0 or a compatible runtime.
- An RTSP/PTZ target device with type
Cameraand no existingIntercominterface. - A separate Scrypted camera that already exposes a working
Intercominterface. - For Tapo cameras, enable Third-Party Compatibility for the Tapo account.
- Enable the official Tapo Two Way Audio extension on the backend camera and configure its Tapo cloud password.
Third-Party Compatibility is a Tapo account-wide setting. The exact location in the Tapo app may vary, but current versions expose it under Me -> Third-Party Services -> Third-Party Compatibility.
npm ci
npm run tsc
npm run buildThe deployable archive is written to out/plugin.zip. The build deliberately
removes sdk.json: Scrypted 0.143.0 loads this development plugin through its
evalLocal runtime and injects deviceManager and systemManager. Adding
sdk.json or importing the default runtime object from @scrypted/sdk causes
startup failure in this environment.
At the time of publication, npm reports GHSA-xcpc-8h2w-3j85 through
adm-zip, a transitive dependency of the official @scrypted/sdk build
tooling. The affected package is development-only and is not included in the
deployed runtime bundle. npm currently proposes a breaking SDK downgrade, and
the latest official SDK still depends on adm-zip 0.5.x, so this repository
does not apply an unverified forced override. Only build trusted source and
plugin archives.
- Download or clone this repository.
- Run
npm ci,npm run tsc, andnpm run build. - Open the Scrypted management console.
- Install or open the JavaScript development plugin.
- Upload/deploy
out/plugin.zipusing your normal development-plugin flow.
Do not remove an existing HomeKit pairing or change working RTSP URLs.
- Confirm the backend wide-camera device already supports
Intercomand that two-way audio works directly on that device. - Open the RTSP/PTZ camera device.
- Enable the Tapo Intercom Proxy extension.
- In the extension settings, select Intercom Backend.
- Choose the working wide-camera device. The list only includes devices that
already expose
Intercom. - Restart the HomeKit plugin without removing or recreating the pairing.
- Open the RTSP/PTZ camera in Apple Home and test the microphone button.
The mixin is offered only to Camera devices that do not already expose
Intercom; it will not overwrite a native or existing talkback implementation.
Verify that sdk.json is absent from out/plugin.zip. This project must not
use a runtime import sdk from '@scrypted/sdk', ScryptedDeviceBase,
SettingsMixinDeviceBase, or another helper that expects an initialized
default SDK object during module evaluation.
Enable Tapo Third-Party Compatibility and verify the cloud password stored on the official Tapo Two Way Audio extension. The proxy itself performs no Tapo authentication.
Confirm that the proxy extension is active, Intercom Backend is selected,
and the target device shows the Intercom interface in Scrypted. Then restart
the HomeKit plugin. Do not remove the HomeKit pairing.
Check whether HomeKit is forcing full video transcoding. A compatible H.264 substream, the default RTP sender, disabled forced transcoding, and Rebroadcast prebuffering can substantially reduce startup time. These settings are independent of this Intercom proxy.
Never publish Scrypted logs containing Authorization headers, RTSP URLs with
credentials, cloud passwords, device tokens, or SRTP key material. HTTP Basic
authorization values are only Base64 encoded and can reveal credentials.
Confirmed:
- Scrypted server 0.143.0 on Linux x64
- TP-Link Tapo C246D
- RTSP
stream6/stream7PTZ-lens device - official
@scrypted/tapoTwo Way Audio backend - Apple Home/HomeKit talkback
Other camera models may work when the target and backend follow the same split-device architecture, but have not yet been verified.
MIT