Jamorham
Nightscout용 xDrip+ 버전
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기On-device AI workout analysis. MediaPipe pose detection, seek-based frame extraction, rep counting, form scoring, biomechanics. React 19 PWA, zero backend.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
On-device AI workout analysis. Upload a video of your exercise, get rep counts, form scores, and biomechanical feedback. Everything runs locally in the browser — no server, no uploads, no account.README 전문 보기 ↗Film one set on your phone. The phone counts the reps, shows what it saw, and asks you to confirm. The video is analysed on the phone; the app sends it nowhere.
Live app (test version): david-dabert.github.io/workout-vision
Every number on this page comes from the scoreboard files in the repository, with their date (CLAUDE.md, R13).
Other sections (sports, equine, coaches, chat, nutrition, workplace ergonomics) were added on 12-14 October 2026. None of them is measured by the scoreboards below; read their numbers as demonstrations unless the screen says they come from your own data.
These hold for the rep counter, its result screen, its report, its PDF, its JSON file and the history. The other sections listed above are not covered here.
Labelled sets are counted by the same code the app runs, in CI on every push and pull request (npm run scoreboard, .github/workflows/ci.yml). Labels come from David or from human-annotated public datasets (R1).
David's sets (test/real-phone/accuracy/scoreboard.txt, 25 October 2026):
Public build half (test/real-phone/accuracy/public-scoreboard.txt, 25 October 2026): 1064 sets, 517 exact (49 %). Per dataset: Countix cut to its labelled window 203 of 447 exact (45 %), Countix whole 189 of 447 (42 %), CFRep 8 of 12, MM-Fit 117 of 158 (74 %). 44 of the 946 counted sets are off by 3 or more. Countix's two readings of a clip are not independent; by distinct clip, both readings are exact on 172 of 447 (38 %), either reading on 220 (49 %). Since 18 October a last rep the video stops at its working end counts (David's convention): Countix, whose labels count it, gained; MM-Fit, whose labels count whole reps only, lost 10. Since 20 October that rule reads the set's depth from one earlier rep instead of two, so a clip of two or three reps cut at its last working end counts that rep: Countix gained 12, no dataset lost a set. Since 25 October overlong reps in two-cycle sets (shorter cycle at least 0.8 s) and on the first sample are split, and the head return compares against one accepted rep: Countix gained 3 exact, off by 3 or more fell by 1.
Synthetic sets (test/real-phone/synth/synth.txt, last written 6 October 2026): two rendered bodies read by the app's pose detection, 96 sets: 74 exact (77 %), 13 off by 3 or more. Ranges of motion read on average 29 degrees (30 %) below the skeleton's truth, and phase times about 0.6 s short. Synthetic bodies are not people: these figures bound what the pipeline can do in clean conditions.
The video is decoded on the phone at 15 samples per second (src/lib/extractionConfig.js), and MediaPipe Pose Landmarker (full model, @mediapipe/tasks-vision 0.10.35) runs in a Web Worker on each sample. One joint angle per lift is taken from the 3D landmarks, smoothed with a Savitzky-Golay filter over 0.333 s (about 5 samples), and counted as full cycles away from the rest position and back, with thresholds from the set's own range (src/lib/counting/core.ts). A set is refused when the counted joint is seen on fewer than half the samples (src/lib/coreAnalysis.js). See ARCHITECTURE.md for the modules and data flow.
Pose detection, counting, storage and the PDF run in the browser on the phone. The app never uploads the video, its frames or the landmarks. What leaves the phone leaves by a tap: a shared report, a shared or downloaded file, a report of a wrong count by e-mail or GitHub issue.
The data-protection position of the app (GDPR and others) has not been reviewed; this README makes no compliance claim.
npm ci
npm run dev # dev server, this computer only
npm test # unit tests (Vitest)
npm run lint # oxlint
npm run typecheck # tsc --noEmit
npm run scoreboard # count every labelled set; fails on a lost exact count or a new error of 3 or more
npm run build # production build
Built with React 19, Vite 5, Vitest, Playwright and oxlint. Rules: CLAUDE.md; steps and current state: PLAN.md, STATE.md.
MIT: see LICENSE. The bundled fonts and the MediaPipe pose model keep their own licences.
Public benchmark data. Only landmark files derived through the app's own pose path are kept (test/real-phone/public/); no video or frame is in the repository or redistributed. RepCount-A (Hu et al., TransRAC, CVPR 2022), read from its Hugging Face mirror lmms-lab-eval/repcounta-lance, licence "other": the videos are YouTube's and the counts and rep marks TransRAC's; used as a research benchmark only (test/real-phone/public/repcount/, scripts/public/fetch-repcount-lance.sh), it decides no gate. Countix and MM-Fit: see scripts/public/countix.mjs and test/real-phone/public/mmfit/ATTRIBUTION.txt.
EquiVision cites Dyson & Greve (2016), J Equine Vet Sci 38:1-7: subjective gait assessment of 57 sports horses in hand, on the lunge and ridden (EquiVision cites it for one point: a horse that moves evenly in a straight line can be lame on the lunge or ridden. The paper defines no asymmetry index or threshold).