mirror of
https://github.com/baketnk/frame-yap.git
synced 2026-10-06 04:04:07 +02:00
Release v0.1.202609251506
Pin the installer to this release; README documents the curl | sh install. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4cbeff08d4
commit
f5b4371f4a
6 files changed
+20
-13
No files matched your search
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Voice typing on Steam Frame, with recognition on the headset rather than a desktop or cloud server.
|
Voice typing on Steam Frame, with recognition on the headset rather than a desktop or cloud server.
|
||||||
Hold a controller button to record, review the transcript, then deliberately type it into the focused app.
|
Hold a controller button to record, review the transcript, then deliberately type it into the focused app.
|
||||||
Standalone OpenVR overlay; no Steam store AppID or sudo. First v0.1 release is in progress.
|
Standalone OpenVR overlay; no Steam store AppID or sudo. First release: v0.1.202609251506.
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
@@ -10,16 +10,17 @@ Standalone OpenVR overlay; no Steam store AppID or sudo. First v0.1 release is i
|
|||||||
- For voice recognition, a **CPU Python runtime** (moondream 2.4.0 / Kestrel 0.8.0, CPU Torch 2.8.0) and the pinned local Parakeet Redux model. Neither is bundled; each has its own explicit install step: `sh install.sh --install-model --backend redux --yes` and `sh install.sh --install-runtime --yes` (needs Python 3.10–3.13 with venv; about 200 MB download). Use `--print-plan` first to see exactly what each fetches. There is no fallback ASR service.
|
- For voice recognition, a **CPU Python runtime** (moondream 2.4.0 / Kestrel 0.8.0, CPU Torch 2.8.0) and the pinned local Parakeet Redux model. Neither is bundled; each has its own explicit install step: `sh install.sh --install-model --backend redux --yes` and `sh install.sh --install-runtime --yes` (needs Python 3.10–3.13 with venv; about 200 MB download). Use `--print-plan` first to see exactly what each fetches. There is no fallback ASR service.
|
||||||
- A local source build needs CMake 3.20+, C++20 and explicit native libraries/SDK; the default hardware-free build needs only CMake and C++20. See [build requirements](docs/build.md).
|
- A local source build needs CMake 3.20+, C++20 and explicit native libraries/SDK; the default hardware-free build needs only CMake and C++20. See [build requirements](docs/build.md).
|
||||||
|
|
||||||
## Install (local artifacts only)
|
## Install
|
||||||
|
|
||||||
**No public release is published.** To install a locally vetted, checksummed ARM64 native-only archive without a compiler:
|
On the Frame, open a terminal (desktop mode's Konsole, or SSH) and run:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sh install.sh --mode binary --archive /path/to/frameyap-VERSION-linux-aarch64.tar.gz \
|
curl -fsSL https://github.com/baketnk/frame-yap/releases/latest/download/install.sh | sh
|
||||||
--sha256 ARCHIVE_SHA256 --version VERSION
|
|
||||||
```
|
```
|
||||||
|
|
||||||
`VERSION` is numeric `0.1.YYYYMMDDHHMM` for this release line; a future release tag will be `vVERSION`. The installer has an explicit local source-build path with toolchain/dependency inputs, and a read-only `--print-plan`/machine-readable `--json` mode; the producer stage→archive path still needs a clean-account artifact test and release audit. See [packaging](docs/packaging.md). Installation is user-local with rollback, no automatic launch or registration, and no Steam store AppID. Before voice typing, independently supply a licensed Python CPU environment and pinned weights, and configure their absolute paths in `~/.config/frameyap/paths.conf` (or the XDG config equivalent). Model download is opt-in and separate: `sh install.sh --install-model --backend redux --print-plan --json` inspects pinned metadata, while `--yes` explicitly authorizes installation from the *installed* manifest; `--expected-manifest-sha256 HASH` additionally binds consent to its exact bytes. The locally implemented Settings → Models chooser offers selection/restart and a two-click Install/Confirm Install with source, size, license, attribution and manifest SHA-256; it has not been validated as an installed/headset flow. No chooser action installs the Python runtime. Do not mistake a native-only install for working ASR. The pinned GitHub download route must not be advertised as functional until a vetted release exists.
|
You can download and read `install.sh` first; it is one self-contained file. The installer pins its own release (currently `v0.1.202609251506`) and verifies the archive's SHA-256. It asks three y/n questions: install FrameYap, download the Parakeet Redux speech model (about 180 MB, CC-BY-4.0), and pip-install the CPU Python runtime (moondream/Kestrel with CPU Torch; about 200 MB download, roughly 1–1.5 GB on disk). Everything goes under your home directory: no sudo, compiler or Steam store AppID. Afterwards, launch **FrameYap** from the desktop application menu.
|
||||||
|
|
||||||
|
The release archive contains FrameYap, SDL3 and the OpenVR client library only; Kestrel, Torch, moondream and the model weights are fetched on your machine from PyPI and Hugging Face. For automation, the same steps are `sh install.sh --yes`, `sh install.sh --install-model --backend redux --yes` and `sh install.sh --install-runtime --yes`; add `--print-plan --json` to preview any step. Maintainers build release archives on Linux ARM64 with `sh scripts/build-release.sh WORKDIR VERSION`. See [packaging](docs/packaging.md) and [install design](docs/install-design.md).
|
||||||
|
|
||||||
## Controls (default Frame binding)
|
## Controls (default Frame binding)
|
||||||
|
|
||||||
|
|||||||
@@ -130,8 +130,10 @@ fresh clean install on Frame (install → `--install-model` → `--install-runti
|
|||||||
`--print-plan` and `--json` support offline plans and structured outcomes;
|
`--print-plan` and `--json` support offline plans and structured outcomes;
|
||||||
explicit model installs use installed pinned manifests. Tested with local
|
explicit model installs use installed pinned manifests. Tested with local
|
||||||
fixtures only, not a released archive or an installed Frame UI handoff.
|
fixtures only, not a released archive or an installed Frame UI handoff.
|
||||||
- [ ] **D3. Publish a prebuilt ARM64 archive.** (M) **Deferred.** v0.1 is
|
- [x] **D3. Publish a prebuilt ARM64 archive.** (M) `scripts/build-release.sh`
|
||||||
source-only. Revisit after source-build acceptance.
|
builds SDL3/OpenVR-pinned archives on Linux ARM64; v0.1.202609251506 is built
|
||||||
|
on the Frame and published with its checksum and `install.sh`. The archive has
|
||||||
|
no Kestrel/Torch/moondream/model; those are user-side downloads.
|
||||||
- [x] **D4. Installer fetches the Python runtime with pip.** (M) Implemented
|
- [x] **D4. Installer fetches the Python runtime with pip.** (M) Implemented
|
||||||
2026-09-25 as explicit `install.sh --install-runtime --yes`: user-local venv,
|
2026-09-25 as explicit `install.sh --install-runtime --yes`: user-local venv,
|
||||||
CPU `torch==2.8.0` from PyTorch's CPU index, `moondream==2.4.0` from PyPI,
|
CPU `torch==2.8.0` from PyTorch's CPU index, `moondream==2.4.0` from PyPI,
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
# Installation goal and current boundary
|
# Installation goal and current boundary
|
||||||
|
|
||||||
Goal: a one-command, pinned GitHub release install for Steam Frame without a Steam
|
Goal: a one-command, pinned GitHub release install for Steam Frame without a Steam
|
||||||
store AppID, sudo or end-user compiler. **No public archive or verified clean
|
store AppID, sudo or end-user compiler. Release v0.1.202609251506 publishes an
|
||||||
install is published. Do not advertise a `curl | sh` command as functional.**
|
ARM64 archive, its `.sha256` and `install.sh` on GitHub, built on a Frame with
|
||||||
|
`scripts/build-release.sh`; `curl …/releases/latest/download/install.sh | sh`
|
||||||
|
runs the attended flow. A clean-install check on Frame is the remaining gate.
|
||||||
The local installer has binary-archive and explicitly provisioned source-build
|
The local installer has binary-archive and explicitly provisioned source-build
|
||||||
modes, machine-readable plans/results and an attended TTY path. The native-only
|
modes, machine-readable plans/results and an attended TTY path. The native-only
|
||||||
artifact does not include an ASR runtime; a separate explicit
|
artifact does not include an ASR runtime; a separate explicit
|
||||||
|
|||||||
+1
-1
@@ -45,7 +45,7 @@ import urllib.request
|
|||||||
KEY = "local.frameyap.overlay"
|
KEY = "local.frameyap.overlay"
|
||||||
# The pinned release this installer belongs to (set in the release commit that
|
# The pinned release this installer belongs to (set in the release commit that
|
||||||
# is tagged vRELEASE_VERSION); empty in a development tree.
|
# is tagged vRELEASE_VERSION); empty in a development tree.
|
||||||
RELEASE_VERSION = ""
|
RELEASE_VERSION = "0.1.202609251506"
|
||||||
MARKER = "# FrameYap managed launcher v1\n"
|
MARKER = "# FrameYap managed launcher v1\n"
|
||||||
ARCHIVE_LIMIT = 12 * 1024**3
|
ARCHIVE_LIMIT = 12 * 1024**3
|
||||||
MEMBER_LIMIT = 50000
|
MEMBER_LIMIT = 50000
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import urllib.request
|
|||||||
KEY = "local.frameyap.overlay"
|
KEY = "local.frameyap.overlay"
|
||||||
# The pinned release this installer belongs to (set in the release commit that
|
# The pinned release this installer belongs to (set in the release commit that
|
||||||
# is tagged vRELEASE_VERSION); empty in a development tree.
|
# is tagged vRELEASE_VERSION); empty in a development tree.
|
||||||
RELEASE_VERSION = ""
|
RELEASE_VERSION = "0.1.202609251506"
|
||||||
MARKER = "# FrameYap managed launcher v1\n"
|
MARKER = "# FrameYap managed launcher v1\n"
|
||||||
ARCHIVE_LIMIT = 12 * 1024**3
|
ARCHIVE_LIMIT = 12 * 1024**3
|
||||||
MEMBER_LIMIT = 50000
|
MEMBER_LIMIT = 50000
|
||||||
|
|||||||
@@ -762,8 +762,10 @@ class InstallTests(unittest.TestCase):
|
|||||||
output.extend(os.read(master, 8192))
|
output.extend(os.read(master, 8192))
|
||||||
except OSError:
|
except OSError:
|
||||||
break
|
break
|
||||||
self.assertEqual(child.wait(timeout=8), 2)
|
# Dev tree: usage error. Release: defaults to its pin, then needs --yes.
|
||||||
|
self.assertEqual(child.wait(timeout=8), 1 if installer.RELEASE_VERSION else 2)
|
||||||
self.assertNotIn(b"Mode [binary/source]:", output)
|
self.assertNotIn(b"Mode [binary/source]:", output)
|
||||||
|
self.assertNotIn(b"[y/n]:", output)
|
||||||
self.assertFalse((self.data / "frameyap").exists())
|
self.assertFalse((self.data / "frameyap").exists())
|
||||||
finally:
|
finally:
|
||||||
if child.poll() is None:
|
if child.poll() is None:
|
||||||
|
|||||||
Reference in new issue
Block a user