mirror of
https://github.com/DeeJanuz/frametop.git
synced 2026-10-14 15:00:53 +02:00
voice/ft-voiced (was frame_voice.py) runs in Frametop's container as frametop-voice.service. It keeps the mic, the wake word and live text, and hands the keyboard side to the input relay: - push-to-talk keys are key combinations (dictate, dictate_hold); the relay sends "toggle|start|stop" to @frametop_voice, taken only from this user - text goes to the relay as "type TEXT" (ASCII, in pieces of 2000 bytes), so it lands where typing goes; the relay holds it back while a modifier is held - controller buttons are read from vrserver's web socket with input/vrws.py, in a thread, so the websockets package goes No own uinput keyboard, fd store, evdev, or controller service any more. whisper-server runs only while the wake word is on, started and stopped by ft-voiced. Voice commands and hooks run on the host through distrobox-host-exec (env passed through env(1)); their FRAME_VOICE_* variables keep frame-voice's names. Settings: ~/.config/frametop-voice.json (voice_settings.py, standard library), wake word off by default, "advanced" for the old config.toml tunables. voice/run.sh install carries frame-voice's settings over once (its keys become key combinations) and turns the standalone units off. Install: install.sh step 8/11 asks (yes by default; --no-voice through get.sh, install-release.sh and a FrameDrop checkbox). voice/build.sh builds whisper-server (whisper.cpp d09f61a, Vulkan, static) and build/venv; voice/models.sh fetches the 322 MB of models into ~/.local/share/frametop/voice by fixed URL and sha256. The image gets glslc, spirv-headers-devel and pipewire-utils, uv.lock a voice group (sherpa-onnx with its core pinned: uv dropped it), CI smoke whisper-server and the venv. uninstall.sh asks about the models; update-check and report.sh know the service (report.sh leaves out the lines with what was said). Tests: voice/test (settings, carrying over, typing through a stand-in relay, push-to-talk, controller buttons from a stand-in web socket) in just test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
43 lines
1.4 KiB
TOML
43 lines
1.4 KiB
TOML
[project]
|
|
name = "frametop"
|
|
version = "0.1.0"
|
|
description = "Desktops in VR on the Steam Frame"
|
|
readme = "README.md"
|
|
requires-python = ">=3.12"
|
|
|
|
# Frametop's Python dependencies, locked in uv.lock. The Frame's runtime apps
|
|
# (input settings uses Kirigami) still come from the container's dnf packages;
|
|
# these groups cover everything uv can pin: dev tooling and the hand tracker's
|
|
# NumPy/OpenCV stack (Fedora's python3-opencv pulls in over a gigabyte).
|
|
[dependency-groups]
|
|
dev = [
|
|
"pytest>=8",
|
|
"ruff>=0.14",
|
|
"pyflakes>=3.4",
|
|
]
|
|
# type checking is dev tooling outside the image: the image installs the
|
|
# default groups (dev for CI's pytest/ruff, tracker for the hand tracker,
|
|
# voice for Frametop Voice) but not this one
|
|
types = [
|
|
"mypy>=1.19",
|
|
]
|
|
tracker = [
|
|
"numpy>=2.2",
|
|
"opencv-python-headless>=4.11",
|
|
"huggingface_hub>=0.34",
|
|
]
|
|
# Frametop Voice (voice/ft-voiced): Moonshine, the wake word spotter and Silero VAD run
|
|
# through sherpa-onnx; sentencepiece spells out wake phrases (voice/requirements.txt has the
|
|
# same versions, for the dev container). sherpa-onnx's wheels need sherpa-onnx-core of the
|
|
# same version (onnxruntime and its C++ side), but don't all say so, and uv locks without it:
|
|
# both are named here, at one version.
|
|
voice = [
|
|
"numpy>=2.2",
|
|
"sentencepiece>=0.2.2",
|
|
"sherpa-onnx==1.13.8",
|
|
"sherpa-onnx-core==1.13.8",
|
|
]
|
|
|
|
[tool.uv]
|
|
package = false
|