Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

QUII Helper 📹

Python package for connecting to QUII / Qualvision-based cameras and video doorbells from code.

It can capture snapshots, save video clips, expose the camera as an RTSP stream, read available device metadata, and explicitly open a connected door without using the original mobile app.

What It Does ✨

  • 📸 Captures JPEG snapshots from the camera preview stream.
  • 🎞 Saves MP4/H.264 video clips for a user-selected duration.
  • 📡 Serves the live preview as an RTSP stream for players such as VLC.
  • 🔎 Reads cloud, LAN, storage, network, product, alarm, video, and capability information where the device supports it.
  • 🧭 Discovers local devices that expose Qualvision-compatible HTTP services.
  • Reads incoming-call cloud history with the experimental get_call_events() API, without push registration or door commands.
  • Sends explicit local door-opening commands with Camera.open_door(); see Door Control for settings and acknowledgement semantics.

Compatibility 🔍

This project targets devices that use the QUII / Qualvision protocol family, including devices managed by the vHome 2.2 mobile app.

Useful discovery hints:

  • A direct HTTP request to the device IP may return Server: Qualvision -HTTPServer.
  • Many compatible devices expose TCP port 34567.
  • Local read-only device methods usually require that your machine can reach the camera LAN IP.

Successfully tested devices:

  • Tantos Marilyn Wi-Fi s: snapshot, MP4 capture, RTSP, door opening in auto mode, and incoming-call cloud history on the tested account/backend.

History access does not guarantee live delivery or a maximum notification delay. The library is also used by entrance-bot on Raspberry Pi ARM64; its mocked integration tests cover that deployment, not ARM64 media capture.

If another device works, please open an issue or pull request so the compatibility list can be expanded.

Quick Start 🚀

Use Python 3.10 or newer. For JPEG/MP4 output, also install the FFmpeg executable and put it on PATH (ffmpeg -version must work in the same environment). Installing this Python package does not install FFmpeg; see Media Prerequisites. RTSP and read-only device methods do not require FFmpeg.

For development or the bundled examples, install from a checkout:

git clone https://github.com/xaer981/quii-helper.git
cd quii-helper
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e .

For an application that only needs the library, install a built wheel instead:

python -m pip install /path/to/quii_helper-0.1.0rc6-py3-none-any.whl

0.1.0rc6 is a prepared candidate, not yet uploaded by this change. After a release is published on PyPI, python -m pip install --pre quii-helper selects an available pre-release. No repository checkout is needed for library use. The wheel does not include examples or .env.example; use the installed-package setup to create your own application directory and configuration.

Copy the required native assets extracted from the Android app into assets/:

assets/
  ca.pem
  client.pem
  client.txt
  libqv-p2p-v2.so

Use the verified vHome 2.2 arm64-v8a libqv-p2p-v2.so, regardless of your computer's architecture. Unsupported ELF/table layouts are rejected; files from other ABIs or app builds are not interchangeable without native verification.

Create .env from .env.example and fill in your account, device, cloud, and app constants:

CLOUD_ACCOUNT=
CLOUD_PASSWORD=
DEVICE_ID=
CLOUD_CLIENT_UUID=
CLOUD_AUTH_URL=
CLOUD_SERVICE_URL=
CAMERA_OEM=
CAMERA_APP_ID=
CAMERA_CLIENT_TYPE=
IP_REGION_ID=

Detailed extraction instructions are in docs/setup.md.

Basic Usage 🧩

from quii_helper import Camera, load_config

camera = Camera(config=load_config())

snapshot = camera.snapshot()
print(snapshot)

video = camera.save_video(duration_seconds=15)
print(video)

Start an RTSP stream:

from quii_helper import Camera, load_config

camera = Camera(config=load_config())

try:
    with camera.serve_rtsp(port=8554) as session:
        print(session.url)
        session.wait()
except KeyboardInterrupt:
    pass

Open the stream in VLC:

rtsp://127.0.0.1:8554/live

Alternatively, run python -m quii_helper.main to serve RTSP on port 8554 until Ctrl+C. This entry point does not open the door. RTSP binds to localhost by default. To serve a trusted LAN, explicitly pass host="0.0.0.0" and use the server's LAN IP in the player. There is no RTSP authentication or TLS: restrict access and do not expose the port publicly. Examples honor TLS_VERIFY (enabled by default). The editable main.py currently passes tls_verify=False for the owner's tested setup; remove that override to use configured TLS verification.

Read device information:

from quii_helper import Camera, load_config

camera = Camera(config=load_config())

print(camera.get_device_info())
print(camera.get_product_info())
print(camera.get_storage_info())
print(camera.get_network_info())

For the complete API reference, see docs/api.md.

load_config() explicitly reads .env from the working directory without changing the process environment. For embedding, pass an AutonomousConfig or use Camera(...) with process environment values and keyword arguments; neither reads .env implicitly. Assets and default outputs belong to the application (./assets and ./data), not the installed package. See Library Configuration.

Logging 🧾

The standalone entry point and examples configure console logging explicitly. Set LOG_LEVEL=info for user-friendly progress messages:

LOG_LEVEL=info

Set LOG_LEVEL=debug when collecting diagnostics for bug reports:

LOG_LEVEL=debug

Debug logging includes protocol counters, packet statistics, decoding summaries, and connection details.

Library logging is disabled by default and importing the package preserves application Loguru sinks. To use your own logging setup, call logger.enable("quii_helper") after importing the package. See Logging for the optional console helper.

Documentation 📚

Important Notes ⚠️

  • Do not commit .env, assets/, data/, logs, screenshots, or recordings.
  • The package depends on native crypto/material extracted from the original Android app version you use.
  • Some local read-only methods return error=-1 on devices that do not support that command.
  • If cloud TLS fails with CERTIFICATE_VERIFY_FAILED, see Cloud Region And Auth URL.
  • From a checkout, python -m examples.open_door is an explicit door-control check. It prints capability 24 and sends a real opening command using UNLOCK_PASSWORD and password_mode="auto"; do not use it as a read-only smoke test.

Status 🛠

The project is usable but still protocol-research-heavy. Public APIs are being stabilized around Camera, capture results, RTSP streaming, read-only device inspection, and explicit local door control.

Metadata

Release files for quii-helper 0.1.0rc6

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

Source distribution (sdist)

Source distribution for quii-helper 0.1.0rc6
File Size Uploaded Provenance
quii_helper-0.1.0rc6.tar.gz 408.4 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for quii-helper 0.1.0rc6
File Interpreter ABI Platform
quii_helper-0.1.0rc6-py3-none-any.whl Python 3 none any Details

Total release size: 762.4 kB

Release files / quii_helper-0.1.0rc6.tar.gz

Download URL quii_helper-0.1.0rc6.tar.gz
Size 408.4 kB
Tags Source
SHA-256 checksum
How to use checksums
44ec989301bde2c3c81110ed22b64df583e722c10253cb56b6027b0318b3fb42
BLAKE2b-256 checksum
How to use checksums
8276440cbd32a16f3714977b8583303e751c1ef827e6d7cf202b5c16067dcbb2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 22, 2026.

Transparency log

Release files / quii_helper-0.1.0rc6-py3-none-any.whl

Download URL quii_helper-0.1.0rc6-py3-none-any.whl
Size 354.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
62fbb0d9400359d85f1ba5c3a998b32821a7a0ae5f80168a8aa254137c847a13
BLAKE2b-256 checksum
How to use checksums
2f8c6321b4e547b0f40580417ff050921d535e85cc2108e52eddfafdbaa78448
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 22, 2026.

Transparency log

Security for quii-helper 0.1.0rc6

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for quii_helper-0.1.0rc6.tar.gz

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 Oct 22, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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