Skip to main content

Quote/0

A Quote/0 Client + Streamlit App and Notes about SSPAI's Quote/0

Firmware 1.6.x · client v0.2.0 targets the current authV2 open API

The device had a major firmware update. The open API moved to https://dot.mindreset.tech/api/authV2/open/device/{deviceId}/{image|text} (device id now in the URL path). The legacy /api/open/{image|text} endpoints are deprecated but still forward to the new API (no removal date announced). Quote0(...) defaults to authV2; pass legacy=True to use the old endpoints. Official docs source: https://github.com/MindReset/dot_web_docs (en-US/service/open/image_api.mdx, text_api.mdx).

Getting Started

  1. Connect Type-C
  2. Bind device in Mobile App
  3. Select content to show
  4. (optional) Request API key in App (and get Device ID) -> use API
  5. (optional) Setup .env (follow .env.example)

NOTE: to test if the display is normal you can use the script checkerboard_gray.sh

CLI

# Install this package (core client is lightweight: requests + pydantic + pillow + tyro)
$ uv tool install quote0
# Optional extras:
#   quote0[ui]        Streamlit web app (streamlit, watchdog)
#   quote0[examples]  chart-rendering example scripts (matplotlib, numpy)

# Image API
# NOTE: the CHECKERBOARD_GRAY pattern is good to test if your monitor is defect
$ quote0 image --preset CHECKERBOARD_GRAY --api-key dot_app_.... --device-id ABCD1234ABCD
🖼️  Using preset image: checkerboard_gray
📤 Sending image to Quote/0 device... (border: WHITE)
✅ Image sent successfully!

# Text API with Environment Variable
export DOT_API_KEY=dot_app_....
export DOT_DEVICE_ID=ABCD1234ABCD

$ quote0 text --title Hello --message World
📤 Sending text to Quote/0 device...
✅ Text sent successfully!

Python

from quote0 import Quote0

client = Quote0(api_key="dot_app_...", device_id="ABCD1234ABCD")  # authV2 by default
client.send_text(title="总市值 12.34M", message="持仓盈亏 +98,765", signature="14:31")
client.send_image(image_base64=b64, dither_type="DIFFUSION")

# new authV2 fields:
#   send_text(..., styles={"fontSize": 18}, task_key=..., task_alias=...)
#   send_image(..., task_key=..., task_alias=...)
# legacy endpoints (device id in body):
#   Quote0(api_key, device_id, legacy=True)

Streamlit UI

uv sync --extra ui   # or: pip install "quote0[ui]"
uv run streamlit run Streamlit_Playground.py

Todo

  • Determine whether same API Key can control multiple Device ID

Notes / gotchas:

  • authV2 404 on push / screen doesn't change: the device needs an Open API content slot in its loop task, otherwise pushed content has nowhere to show. Add an Open API card to the device in the Dot App.
  • Rate limit is 10 requests/second; image payload max 3MB (base64) and image/ icon may also be a public http(s) URL.
  • Somehow Image API's "link" didn't work => NFC is not working

Resources

API

  • Docs site: 了解 API
  • Docs source (Markdown, authoritative for endpoints/fields): MindReset/dot_web_docs
    • en-US/service/open/image_api.mdx — authV2 image endpoint, dithering, taskKey/taskAlias
    • en-US/service/open/text_api.mdx — authV2 text endpoint, styles, fonts, \n/\t

authV2 quick reference

authV2 (default) legacy (legacy=True, deprecated)
Image POST /api/authV2/open/device/{deviceId}/image POST /api/open/image
Text POST /api/authV2/open/device/{deviceId}/text POST /api/open/text
device id URL path request body (deviceId)
auth Authorization: Bearer <DOT_API_KEY> same
rate limit 10 req/s 10 req/s

Metadata

Release files for quote0 0.2.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 quote0 0.2.0
File Size Uploaded Provenance
quote0-0.2.0.tar.gz 306.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for quote0 0.2.0
File Interpreter ABI Platform
quote0-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 320.9 kB

Release files / quote0-0.2.0.tar.gz

Download URL quote0-0.2.0.tar.gz
Size 306.9 kB
Tags Source
SHA-256 checksum
How to use checksums
673c6f693baba577263189eda9869a5e90d42cf94905a3e5a56dec7cdce228bf
BLAKE2b-256 checksum
How to use checksums
5a05f5fda5b69e16aea7a4fda5ac9cdcebdf0487f26ac15d4bc2046e694b4bff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release files / quote0-0.2.0-py3-none-any.whl

Download URL quote0-0.2.0-py3-none-any.whl
Size 14.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3f437433526d9fa835bc76633afd7267bec68f8ec83b74b0ca7e7e1b868ca3f1
BLAKE2b-256 checksum
How to use checksums
f57b276cf39317730e95ac4db22c186b109a84079858d3eb1d6c7e52e62918fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Security for quote0 0.2.0

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

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