tthhanh commited on
Commit
2e223b3
·
1 Parent(s): 5349353

docs: refine hackathon README and add demo image

Browse files
Files changed (2) hide show
  1. .gitattributes +1 -0
  2. README.md +118 -49
.gitattributes ADDED
@@ -0,0 +1 @@
 
 
1
+ docs/assets/demo.png filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -16,11 +16,26 @@ tags:
16
  - fitness
17
  - video-analysis
18
  - llama-cpp
 
 
 
 
 
 
 
 
 
 
 
19
  ---
20
 
21
  # Pozify
22
 
23
- Pozify turns a short workout video into a structured form-review report:
 
 
 
 
24
 
25
  - exercise detected
26
  - reps counted
@@ -36,23 +51,98 @@ retrieval, and a small summary model.
36
  Pozify is not a medical device. It does not diagnose injuries, claim injury prevention, or replace a
37
  qualified trainer, clinician, or physical therapist.
38
 
39
- ## Current Status
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
 
41
- The current codebase supports:
 
 
42
 
43
- - web app runtime through `app.py`
44
- - trained exercise routing for `squat`, `push_up`, `shoulder_press`, and `unknown`
45
- - grounded coach-summary generation from structured JSON artifacts
46
- - verifier and conservative fallback summaries
47
- - Modal training pipelines for both the exercise router and coach-summary model
48
 
49
- The current default coach-summary model is:
 
50
 
51
- - `build-small-hackathon/pozify-coach-summary1`
 
 
 
52
 
53
- Pozify first tries Hugging Face `chat_completion`, then falls back to Hugging Face
54
- `text_generation` for non-chat model repos. If hosted inference still rejects the repo or returns an
55
- invalid schema, the app keeps the conservative fallback summary.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56
 
57
  ## Product Flow
58
 
@@ -103,18 +193,14 @@ The trained router is intentionally tiny:
103
 
104
  ## Run The App Locally
105
 
106
- This repo uses a `src/` layout, but `uv` is configured with `package = false`, so the correct local
107
- entrypoint is:
108
 
109
  ```bash
 
110
  uv run python app.py
111
  ```
112
 
113
- The app listens at:
114
-
115
- ```text
116
- http://127.0.0.1:7860
117
- ```
118
 
119
  ### Mock vs Real Mode
120
 
@@ -158,6 +244,8 @@ Pozify tries `chat_completion` first and falls back to `text_generation` when Hu
158
  that the repo is not a chat model. The deterministic fallback summary remains enabled if hosted
159
  inference is unavailable or the model output fails validation.
160
 
 
 
161
  ### 2. Use the fine-tuned merged model locally
162
 
163
  Download the merged repo locally, then point Pozify at it:
@@ -303,36 +391,10 @@ JSON artifacts are validated before they are written. The final report records:
303
  - coach summary provider/model/source
304
  - verifier status and bypass flags
305
 
306
- ## Docs Map
307
 
308
- See [docs/01-docs-index.md](docs/01-docs-index.md) for the ordered documentation map.
309
-
310
- Most useful operational docs:
311
-
312
- - [docs/10-overview-build-small-hackathon-report.md](docs/10-overview-build-small-hackathon-report.md)
313
- - [docs/20-router-training-report.md](docs/20-router-training-report.md)
314
- - [docs/21-router-huggingface-release.md](docs/21-router-huggingface-release.md)
315
- - [docs/30-coach-modal-training.md](docs/30-coach-modal-training.md)
316
- - [docs/31-coach-training-report.md](docs/31-coach-training-report.md)
317
- - [docs/40-data-custom-collection-guide.md](docs/40-data-custom-collection-guide.md)
318
-
319
- ## Project Structure
320
-
321
- ```text
322
- app.py
323
- web/
324
- src/pozify/
325
- pipeline.py
326
- contracts.py
327
- steps/
328
- ml/
329
- slm/
330
- exercises/
331
- scripts/
332
- docs/
333
- demo/
334
- runs/
335
- ```
336
 
337
  ## Development Checks
338
 
@@ -348,3 +410,10 @@ Run the real MediaPipe fixture smoke test only when the fixture is available:
348
  POZIFY_RUN_REAL_POSE_TESTS=1 \
349
  uv run python -m unittest tests.test_pose_steps.PoseStepTests.test_real_sample_mov_extracts_pose_landmarks
350
  ```
 
 
 
 
 
 
 
 
16
  - fitness
17
  - video-analysis
18
  - llama-cpp
19
+ - track:backyard
20
+ - sponsor:openbmb
21
+ - sponsor:openai
22
+ - sponsor:nvidia
23
+ - sponsor:modal
24
+ - achievement:offgrid
25
+ - achievement:welltuned
26
+ - achievement:offbrand
27
+ - achievement:llama
28
+ - achievement:sharing
29
+ - achievement:fieldnotes
30
  ---
31
 
32
  # Pozify
33
 
34
+ Pozify is a small-model workout form coach for people who want to train at home but still need
35
+ clear, trustworthy feedback. It is built for users who avoid gyms because they are far away, too
36
+ crowded, intimidating, or too expensive to replace with a 1:1 personal trainer.
37
+
38
+ Upload a short workout video and Pozify turns it into a structured, grounded form-review report:
39
 
40
  - exercise detected
41
  - reps counted
 
51
  Pozify is not a medical device. It does not diagnose injuries, claim injury prevention, or replace a
52
  qualified trainer, clinician, or physical therapist.
53
 
54
+ ![Pozify product demo](docs/assets/demo.png)
55
+
56
+ ## Hackathon Snapshot
57
+
58
+ - Track: `Backyard AI`
59
+ - Core user impact: affordable at-home workout feedback without needing a gym or private coach
60
+ - Submission format: `Gradio Space`
61
+ - Build Small fit: every runtime model used by Pozify is under the `32B` cap
62
+ - Demo video: `ADD_PUBLIC_DEMO_LINK`
63
+ - Social post: `ADD_PUBLIC_SOCIAL_POST_LINK`
64
+ - Hugging Face Space: [build-small-hackathon/Pozify](https://huggingface.co/spaces/build-small-hackathon/Pozify)
65
+ - Team repo: [tihado/Pozify](https://github.com/tihado/Pozify)
66
+ - Default coach-summary model: `build-small-hackathon/pozify-coach-summary1`
67
+
68
+ ## The Problem
69
+
70
+ Most beginner and intermediate gym users do not need a full-time trainer. They need a fast second
71
+ set of eyes:
72
+
73
+ - "Am I doing the right exercise?"
74
+ - "How many clean reps did I actually complete?"
75
+ - "Is this a valid variation or a real issue?"
76
+ - "What should I fix next session?"
77
+
78
+ Today, that feedback is often inaccessible:
79
+
80
+ - gyms can be far away or inconvenient
81
+ - crowded spaces make people self-conscious about training in public
82
+ - many users are afraid of doing an exercise wrong and being judged
83
+ - private coaching is effective, but too expensive for regular use
84
+
85
+ Pozify makes that feedback accessible from a short video, with a pipeline users can inspect instead
86
+ of a black-box answer they just have to trust.
87
+
88
+ ## Why It Stands Out
89
+
90
+ Pozify is not a generic chatbot and not a vague video captioner. It is a grounded movement-analysis
91
+ pipeline:
92
+
93
+ - computer vision extracts pose landmarks
94
+ - a tiny trained router identifies the exercise
95
+ - deterministic logic counts reps and tracks issues
96
+ - knowledge cards keep the coaching language exercise-specific
97
+ - a small language model turns structured JSON into a coach summary
98
+ - a verifier catches unsafe or ungrounded summary output
99
+
100
+ That design is the core product difference: structured evidence first, language second.
101
+
102
+ ## Sponsor Stack
103
+
104
+ Primary sponsor tools used in this build:
105
+
106
+ - `Hugging Face Spaces` for the app surface
107
+ - `Hugging Face Inference` for cloud small-model runtime
108
+ - `Modal` for coach-summary training and publishing workflows
109
+ - `OpenAI Codex` for implementation support and hackathon build velocity
110
+
111
+ Sponsor-fit highlights:
112
 
113
+ - `Modal`: used to prepare data, train, evaluate, merge, and publish the coach-summary model
114
+ - `OpenAI Codex`: used as the coding copilot during implementation and iteration
115
+ - `Hugging Face`: used across the product surface, cloud inference path, model hosting, and Space deployment
116
 
117
+ ## Why Pozify Fits Build Small
 
 
 
 
118
 
119
+ Pozify matches `Backyard AI` because it solves a real everyday problem with a small, practical,
120
+ personal tool. It also strongly matches the broader Build Small philosophy:
121
 
122
+ - local-first and modular architecture
123
+ - transparent model boundaries instead of one giant opaque system
124
+ - per-component models all under the `32B` limit
125
+ - useful enough for repeated day-to-day use, not just a tech demo
126
 
127
+ This gives Pozify a practical consumer use case that still feels very "Build Small": local-first,
128
+ inspectable, modular, and cheap enough to run on real-world hardware budgets.
129
+
130
+ ## What Pozify Delivers
131
+
132
+ For each uploaded workout clip, Pozify produces:
133
+
134
+ - detected exercise and confidence
135
+ - rep-by-rep analysis JSON
136
+ - valid variation markers versus real issues
137
+ - annotated output video
138
+ - grounded coach summary with fixes and next-session plan
139
+ - provider, model, and summary source metadata in the UI
140
+
141
+ The UI also makes it obvious whether the coach summary came from:
142
+
143
+ - `hf_inference`
144
+ - a local merged model
145
+ - or a conservative fallback
146
 
147
  ## Product Flow
148
 
 
193
 
194
  ## Run The App Locally
195
 
196
+ This repo uses a `src/` layout, but `uv` is configured with `package = false`. Run it with:
 
197
 
198
  ```bash
199
+ uv sync
200
  uv run python app.py
201
  ```
202
 
203
+ Then open `http://127.0.0.1:7860`.
 
 
 
 
204
 
205
  ### Mock vs Real Mode
206
 
 
244
  that the repo is not a chat model. The deterministic fallback summary remains enabled if hosted
245
  inference is unavailable or the model output fails validation.
246
 
247
+ Recommended if you want the live Space or local demo to behave predictably during judging.
248
+
249
  ### 2. Use the fine-tuned merged model locally
250
 
251
  Download the merged repo locally, then point Pozify at it:
 
391
  - coach summary provider/model/source
392
  - verifier status and bypass flags
393
 
394
+ ## Docs
395
 
396
+ For the deeper technical write-up, training notes, and data workflow, see
397
+ [docs/01-docs-index.md](docs/01-docs-index.md).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
398
 
399
  ## Development Checks
400
 
 
410
  POZIFY_RUN_REAL_POSE_TESTS=1 \
411
  uv run python -m unittest tests.test_pose_steps.PoseStepTests.test_real_sample_mov_extracts_pose_landmarks
412
  ```
413
+
414
+ ### Contributors
415
+
416
+ - 🚀 [@nvti](https://github.com/nvti)
417
+ - 🌿 [@honghanhh](https://github.com/honghanhh)
418
+ - 🔧 [@NLag](https://github.com/NLag)
419
+ - ✨ [pnhneee](https://github.com/ctpnheee)