LIVE ON-DEVICE • NO CLOUD • NO TRACKING

Pose
Perfect.
Every Shot.

PosePal overlays a reference pose on your live camera, scores your alignment 0–100% in real time, and auto-captures when you match. Fully offline. 260 curated poses.

Android 7+ • Camera2 487 tests • 0 warnings 3.2 MB poses • 6 MB models
0
Curated poses
0
Landmarks / frame
0
Offline
P.01 — Hero • 12 col • masthead ink-aligned • folio 01/07

Live on Vivo I2214 • 150ms pose • 200ms seg • parallax on move

Tap score cards — they’re interactive drag ghost in demo ↓
0 poses
08 locations • lens-aware
246 back / 14 front. Single-person, simple portrait. Indian set.
0%
Auto-capture threshold
Hold 1.5s → 3-2-1 → 3-frame burst. Sharpest wins.
~0ms
Compare vs all 260
Weighted 33-lm + 30% silhouette. LRU cached.
0 bytes
Sent to cloud
No backend. No accounts. Photos stay on device.

Interactive — Try it

Drag the ghost.
Watch the score.

This is the real comparator — 33 landmarks, weighted upper-body, silhouette blend. Drag the teal ghost to align with the dim live skeleton. Green = aligned. Hold 85% and it would auto-fire. Use arrow keys, +/- to scale, R to reset.

Live skeleton
33 landmarks • dim
Reference ghost
Draggable • EMA 0.3
P.02 — Demo • canvas 288px (12×24) • keyboard a11y • folio 02/07
DRAG ME
● Live● Ghostdrag / pinch • arrows / R
CLOSE — keep adjusting
Lift left elbow 14° • Rotate torso 9°
Auto would fire at
85% × 1.5s

01 — Features

Everything Huawei
doesn't show you.

Huawei's AI Posture gives you a ghost outline. PosePal gives you a score, a skeleton, per-joint feedback, arrows, voice, and a shutter that fires itself when you're perfect.

Live 33-point detection — accurate, not lite

ML Kit PoseDetector in accurate mode. Confidence-filtered (≥0.5), One-Euro smoothed, adaptive throttle 150→500 ms via EMA latency + busy ratio. Pure-Dart headless tests for every engine.

Throttle
AdaptiveFrameThrottle • 150ms min • 400ms kicker at 30% busy
Filter
LandmarkConfidenceFilter • 0.5 gate • 5 lost frames → tracking lost
ML KitOne-Euro β 0.007AdaptiveHeadless tests

Real-time 0–100% score

Per-landmark green / amber / red. Body-part chips. 85% = green, 60% = amber. Weighted upper-body, silhouette blend 30%. One number tells you when you're there.

85 / 60 gatesSilhouette 30%

Directional arrows + voice

15° angular threshold. Up to 5 corrections, TTS throttled 3s, deduped. “Lift left elbow 12°” — not “adjust pose”. Speaks only when needed.

ArrowsTTS 3s

Auto-capture burst

Hold ≥ threshold 1.5s → Countdown 3-2-1 → 3-frame burst (200ms). Laplacian + pose composite picks the sharpest, best-scored frame. Single-tap also works.

1.5s hold3× burstSharpest wins

Stylized silhouettes

Every pose has a studio PNG — outer outline + inner folds + skeleton. Drag, pinch, twist freely; double-tap to reset. Missing asset → contour fallback.

PNG ghostDrag / pinch / twist

Scene-aware ghost — YOLOv8n + Hough + MobileNet in a worker isolate

Ghost auto-morphs onto your body or snaps to floor / wall / table anchors. “Matches your scene” strip re-ranks every 2 s.

YOLOv8nHoughMorph EMA 0.3
P.03 — Features • bento 8+4 + 4+4+4 • hover lift 200ms spring • folio 03/07

02 — How it works

Pick. Align. Score. Shot.

Four steps. No learning curve. The same pipeline runs on stills in the Image Test Lab before you go live.

Step 01

Pick a pose

Browse 260 poses by location, difficulty, lens. Tap a card — ghost loads. Scene strip suggests what fits your room.

Step 02

Align to ghost

Ghost contour letterboxes to your sensor. Drag / pinch / twist if you want it somewhere else.

Step 03

Chase 85%

Gauge climbs. Limbs go green. Arrows nudge you. Voice says the next fix. Hold it 1.5 s.

Step 04 — Auto

Countdown → Burst

3-2-1, flash, 3 frames at 200 ms. Sharpest + best-scored is saved. No shutter press needed.

NV21 → rotate → ML Kit Pose → confidence filter → PoseComparator → arrows / TTS → CameraBloc state machine seg isolate 200ms + scene-ml isolate 2s YOLO in parallel
P.04 — Flow • 4×3 cols • connector 960+ • folio 04/07

03 — Pose browser

260 poses. 8 locations.
One ghost for each.

Every pose ships with a bundled photo, 33 landmarks, ~300-pt silhouette contour, scene/support metadata, and a stylized PNG ghost. Filters are instant (fade, not jump). Favorites sync to prefs. Lens flips clear mismatched poses.

LENS-AWARE
Back 246 • Front 14
Front cam for mirror selfies — only front-tagged poses appear.
Beach • EasyGolden Hour Lean beach pose reference
33 LMS + 300 PT

Golden Hour Lean

Back • Beach • Natural light

ID beach_001 • 4:3
Café • MediumCafé Window Sit pose reference
33 LMS + 300 PT

Café Window Sit

Back • Café • Indoor soft

ID cafe_003 • 3:4
City • Easy
33 LMS

Street Stride

Back • City • Leading lines

ID city_001 • 16:9
Lake • Hard
33 LMS

Lake Reflection

Back • Lake • Symmetry

ID lake_004 • 9:16
Browse all on GitHub ↗
P.05 — Browser • filter chips 44px • card hover scale 1.04 • folio 05/07

04 — Scene aware

Ghost that knows
your room.

Cheap luma → palette + lighting + indoor likelihood. YOLOv8n (full COCO) every 2s. Hough floor/wall lines. Every 2s the recommender re-ranks all 260 against 7 signals and shows the top 3 “matches your scene”.

  • Contour morph — EMA 0.3 onto your body bbox when visible
  • Anchor morph — snaps to floor / wall / table when not
  • PlacementNet — learned full transform, EMA-smoothed
  • Manual freeze — drag/pinch survives until double-tap reset
YOLOv8n.tfliteMobileNet embedderSceneLayoutNetPlacementNet
Live scene descriptor
Floor Y0.82 Hough ✓
Wall X0.88 • 0.74 conf
Objectschair, cup, table
Lightingbright
Indoor0.34 • outdoor
✓ Matchedbeach_007 +2.0 palette
Gallery screen showing scene recommendations
Beach • 0.91 Café • 0.64

Left: descriptor memoised at 2 s cadence. Right: top-3 strip. EMA-smoothed — no jumps.

P.06 — Scene • YOLO 2s • Hough 0.82 • folio 06/07

05 — Comparison

Why PosePal
vs the rest.

North star: match/exceed Huawei Pura 90 AI Posture (Apr 2026). We kept the ghost and added everything it leaves out.

● PosePal leads ◐ Huawei Pura 90
CapabilityPosePalHuawei AI Posture
Alignment score
0–100% real-time
0–100%
Per-limb + gauge
✗ None
Ghost only
Per-joint feedback✓ Green / amber / red per landmark✗ Outline only
Directional arrows✓ 15° gate, 5 suggestions✗ —
Voice coach✓ TTS, 3s throttled✗ —
Auto-capture✓ 85% × 1.5s → burst 3✗ Manual shutter only
Skeleton overlay✓ 33 LM skeleton◐ Plain outline
Offline✓ 100% offline◐ Cloud assist

All thresholds tunable in AppConfig — threshold, hold, burst, EMA, Hough bins, everything.

06 — Engineering

On-device.
Isolated.
Measured.

No backend. No SDK phoning home. Two worker isolates. Pure-Dart math. 487 tests. Perfetto traces on triple-tap.

Flutter 3.12 • BLoC • get_it
Camera2 (pinned) • ML Kit Pose + Segmentation
tflite_flutter • YOLOv8n + MobileNetV3
Read architecture.md
P.07 — Eng • 150/200/500 ms • 2 isolates • folio 07/07
Pipeline
Main isolate
NV21 → rotateNv21 → PoseDetector (150–500 ms adaptive) → LandmarkFilter → uprightToPaint → PoseComparator → CameraBloc
Worker isolates
seg-mask ≥200 ms • scene-ml ≥200 ms frame / 2 s YOLO
Storage
Posesposes.json
Embeddingspose_embeddings.bin
PhotosappDocs/photos/*.jpg
SettingsSharedPrefs JSON
No Hive. No Isar. Just prefs + filesystem.
Performance budgets
150ms
pose min
200ms
seg min
500ms
adaptive max
Single-flight workers. Handshake-first startup. 5 s timeouts. Any worker failure → v1 fallback. Frame scheduler staggers seg / scene / luma phases.
AppConfig is the single source. ~150 constants • 281 registry entries • zero magic numbers outside it.
app_config.dart

Trust

Built in the open.
Verified on device.

Every commit runs analyze + tests. Every release is a GitHub Release with debug + release APKs. No store gatekeeping needed to try it.

VG
“Finally an app that tells me *how* to fix my pose, not just that it's wrong. The arrows + voice are chef's kiss.”
Early tester • Vivo I2214 • 92% avg
AK
“100% offline sold me. No upload, no account, photos stay on my phone. And the burst picker actually saves the sharpest one.”
Photographer • 260 poses tried
Release health • live
flutter analyze0 errors • 0 warnings
flutter test487 / 487 pass
APKdebug + release
CIActions • on push master
View workflow runs

07 — Get PosePal

Put a studio
in your pocket.

Free. Offline. No account. Build from source or grab the debug APK. Debug keystore today — production signing before store.

flutter build apk --debug 487 tests • analyze 0/0 MIT
SCAN TO DOWNLOAD
github.com/vipulgote1999/PosePal
Android 7+ • API 24+ Camera2 • 50 MB cache
Privacy?
Photos never leave the device. No analytics SDK. ML Kit models download once via Play Services — that's the only network use.
iPhone?
Android only today. iOS shell exists, untested — no Mac yet.
Cost?
Free & MIT. No ads. No IAP. No backend to pay for — everything is on-device.
Contribute?
GitHub → dev branch. Read docs/architecture.md first. All constants in AppConfig.