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
authV2open APIThe 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; passlegacy=Trueto 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
- Connect Type-C
- Bind device in Mobile App
- Select content to show
- (optional) Request API key in App (and get Device ID) -> use API
- (optional) Setup
.env(follow.env.example)
- Update Software
- update firmware
- reset network
- reset device
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
404on 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/iconmay also be a publichttp(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/taskAliasen-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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| quote0-0.2.0.tar.gz | 306.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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.