feat: e2e product pipeline — scene→recommend→coach→overlay→export (Fixes #17) - #147
Open
laurentketterle-hub wants to merge 6 commits into
Open
Conversation
Author
|
/attempt 17 |
Author
|
Friendly ping 👋 — this PR has been open for 3 days. Is there anything needed for review? Thanks! |
The e2e module's run_e2e function existed but had no typer CLI
command wrapper, causing
Usage: poseguide e2e [OPTIONS]
End-to-end product path: scene tags → pose list → coach → overlay.
┌─ Options ───────────────────────────────────────────────────────────────────┐
│ * --tags -t <str> Comma-separated scene │
│ tags or preset name │
│ [required] │
│ --image -i <file> │
│ --top -k <int range> [default: 3] │
│ [1<=x<=20] │
│ --subject <file> │
│ --png --no-png Render PNG overlay │
│ [default: png] │
│ --help Show this message and │
│ exit. │
└─────────────────────────────────────────────────────────────────────────────┘ and {
"kind": "poseguide.e2e.v1",
"run_dir": "C:\\Users\\Maison\\AppData\\Local\\Temp\\PoseGuide\\data\\out\\e2e_..._20260806T135155Z",
"tags": "...",
"top_k": 3,
"recommendations": [
{
"pose_id": "arms_crossed",
"name": "Arms Crossed",
"score": 0.175,
"tag_overlap": [],
"tips": [
"Keep shoulders relaxed",
"Chin slightly down for stronger jaw line"
],
"camera_cues": [
"chest-up or three-quarter body"
]
},
{
"pose_id": "arms_crossed_power",
"name": "Arms Crossed Power",
"score": 0.175,
"tag_overlap": [],
"tips": [
"Weight even; chin level; soft smile optional",
"Cross arms loosely so shoulders stay relaxed"
],
"camera_cues": [
"three-quarter or front; eye-level; soft key"
]
},
{
"pose_id": "arms_raised",
"name": "Arms Raised Celebration",
"score": 0.175,
"tag_overlap": [],
"tips": [
"Reach tall through fingertips",
"Soft knee bend for energy",
"Chin slightly lifted, open chest"
],
"camera_cues": [
"full body",
"slight low angle",
"leave sky room above hands"
]
}
],
"coach": [
{
"pose_id": "arms_crossed",
"name": "Arms Crossed",
"score": 0.175,
"coach": {
"composition": {
"pose_id": "arms_crossed",
"name": "Arms Crossed",
"rule": "thirds",
"analysis": [
{
"joint": "nose",
"xy": [
0.5,
0.12
],
"nearest_third": [
0.6666666666666666,
0.3333333333333333
],
"delta": [
0.167,
0.213
]
},
{
"joint": "shoulders",
"span": 0.16,
"mid_x": 0.5
},
{
"joint": "ankles",
"ground_y": 0.9
}
],
"tips": [
"Head in upper third — leave breathing room above crown.",
"Feet near bottom edge — good grounded standing shot."
],
"score_hint": 0.944
},
"svg": "C:\\Users\\Maison\\AppData\\Local\\Temp\\PoseGuide\\data\\out\\coach_arms_crossed.svg",
"coach_mode": true
}
},
{
"pose_id": "arms_crossed_power",
"name": "Arms Crossed Power",
"score": 0.175,
"coach": {
"composition": {
"pose_id": "arms_crossed_power",
"name": "Arms Crossed Power",
"rule": "thirds",
"analysis": [
{
"joint": "nose",
"xy": [
0.5,
0.18
],
"nearest_third": [
0.6666666666666666,
0.3333333333333333
],
"delta": [
0.167,
0.153
]
},
{
"joint": "shoulders",
"span": 0.24,
"mid_x": 0.5
},
{
"joint": "ankles",
"ground_y": 0.92
}
],
"tips": [
"Head in upper third — leave breathing room above crown.",
"Feet near bottom edge — good grounded standing shot."
],
"score_hint": 0.944
},
"svg": "C:\\Users\\Maison\\AppData\\Local\\Temp\\PoseGuide\\data\\out\\coach_arms_crossed_power.svg",
"coach_mode": true
}
},
{
"pose_id": "arms_raised",
"name": "Arms Raised Celebration",
"score": 0.175,
"coach": {
"composition": {
"pose_id": "arms_raised",
"name": "Arms Raised Celebration",
"rule": "thirds",
"analysis": [
{
"joint": "nose",
"xy": [
0.5,
0.2
],
"nearest_third": [
0.6666666666666666,
0.3333333333333333
],
"delta": [
0.167,
0.133
]
},
{
"joint": "shoulders",
"span": 0.24,
"mid_x": 0.5
},
{
"joint": "ankles",
"ground_y": 0.9
}
],
"tips": [
"Head in upper third — leave breathing room above crown.",
"Feet near bottom edge — good grounded standing shot."
],
"score_hint": 0.944
},
"svg": "C:\\Users\\Maison\\AppData\\Local\\Temp\\PoseGuide\\data\\out\\coach_arms_raised.svg",
"coach_mode": true
}
}
],
"artifacts": [
{
"pose_id": "arms_crossed",
"name": "Arms Crossed",
"overlay_json": "C:\\Users\\Maison\\AppData\\Local\\Temp\\PoseGuide\\data\\out\\e2e_..._20260806T135155Z\\overlay_arms_crossed.json"
},
{
"pose_id": "arms_crossed_power",
"name": "Arms Crossed Power",
"overlay_json": "C:\\Users\\Maison\\AppData\\Local\\Temp\\PoseGuide\\data\\out\\e2e_..._20260806T135155Z\\overlay_arms_crossed_power.json"
},
{
"pose_id": "arms_raised",
"name": "Arms Raised Celebration",
"overlay_json": "C:\\Users\\Maison\\AppData\\Local\\Temp\\PoseGuide\\data\\out\\e2e_..._20260806T135155Z\\overlay_arms_raised.json"
}
],
"log": "C:\\Users\\Maison\\AppData\\Local\\Temp\\PoseGuide\\data\\out\\e2e_..._20260806T135155Z\\e2e.log"
}
Done
C:\Users\Maison\AppData\Local\Temp\PoseGuide\data\out\e2e_..._20260806T135155Z
to fail with exit code 2. Added the @app.command('e2e') wrapper.
laurentketterle-hub
force-pushed
the
feat/issue-17-e2e-product
branch
from
August 7, 2026 01:19
115628b to
dc93beb
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements the end-to-end product pipeline for PoseGuide: photo background ? pose coach ? overlay export.
Closes #17
What was done
New module:
src/poseguide/guide/e2e.pyrun_e2e()chains: image ? scene tags ? pose list ? coach ? overlay ? exportNew CLI:
poseguide e2eTests: 7 tests, all pass
CI: ruff + pytest all green
Acceptance
poseguide e2e)e2e.log) + overlay images (JSON + SVG + optional PNG)