Working on pull hooks · compression · getting stuck · lower-back pain
Top priority
- Backswing-first — load the trail side EARLIER (by P2–P3), to the cuboid/midfoot (not heel), mass centered → so it crests and eases before the top.
- Set a POSITIVE line of pressure at transition → something to post & rotate from, instead of a late thrust → less stuck, less flip, less back.
- Back: get a physical screen (lead-hip IR); don't practice into pain.
Evidence
- 1trail pressure is still 75% at the top (frame 432) and still climbing; it should have crested ~P2–P3 (it was only 54% back at frame 329) and be easing by now. Late load.
- 2at the top the line of pressure (the yellow line between the feet) is only +1.8° (barely positive — fragile).
- 2through impact (frame 541) the line has collapsed to −25.5°, pointing behind the ball: a thrust, with nothing to post & rotate against.
- 3through impact the torso stands up and side-bends (the thrust "save") — the exact pattern that loads the lower back. Off-plate: confirm with a screen.
- 2on the Antero-Posterior page the lead foot dives to ≈ −16% at impact (trail +9%): the AP couple fires late and hard — the thrust this priority fixes.
Level 1 — high-level read
| Read | Field | What we see |
|---|---|---|
| good | Sequence (order) | rotational (Tz) peaks before vertical (Fz); vertical is last & tallest |
| good | Timing (each force's peak) | on the tour clock: lateral peaks ~0.2s before impact (fr ~481), vertical ~0.1s before (fr ~507) — matching Greg Rose's ~0.23s / ~0.1s targets — and vertical is last & tallest. Forces are not late; timing isn't the fault. (Watch: lateral & rotational peak close together, so lateral isn't clearly leading — confirm on per-force frames.) |
| okay | Magnitude (6i) | vert ~148%, Tz peak ~66, lateral only ~12% (light — under the 20% driver floor; lower is expected for a 6-iron but it's the soft spot). Sizes aren't the main story |
| concern | Pressure (COP) | trail load still ~75% and climbing at the top (frame 432) — late; the forward shift does arrive (lead 84–85% by impact) but via a late lunge, not an early load |
| concern | Line of pressure | non-positive at transition: −5° → +1.8° (weak) → −25° through impact — a thrust, not a post |
| concern | Verdict — explains the miss? | Yes (pressure). late load → late lunge → negative line = thrust → club trapped (stuck) → hands flip → pull hook; the side-bend "save" loads the lower back |
Deeper levels (L2–L4)
| Read | Field | What we see |
|---|---|---|
| concern | L2 · Trail-load timing | late — ~75% and still climbing at the top (fr 432); should crest ~P2–P3 and ease |
| concern | L2 · Line of pressure | non-positive at transition → −25° through impact (the thrust) |
| concern | L2 · Trail COP location | sits heel-ish (matches the felt heel/roll), not cuboid/mid-foot |
| concern | L4 · Lower back (off-plate) | the stand-up/side-bend "save" loads it → get a physical screen (lead-hip IR); don't drill into pain |
| concern | L3 · AP couple (Fx) — now confirmed (video) | at impact the lead foot drives posterior (≈ −16%) while the trail spikes anterior (≈ +9%) — a large, sharp couple firing right at impact (net ≈ −3%), not a smooth early build. The late, violent AP burst = the thrust/save behind getting stuck |
| concern | L3 · Lateral impulse (Fy) | total lateral peaks ~+12% just before impact then snaps to ~−10% — a late, abrupt lunge, not a long early shift |
| okay | L3 · Torque (Tz) | peaks ~+57 N·m/mass near impact after a transition dip, holds positive through follow — strong but on the late side (peaks ~impact vs the P5–P6 window) |
| good | L2 · Forward shift | lead foot reaches 84–85% by impact — the shift itself works; the timing/quality doesn't |
Trackman conclusion
- Not captured this session. Prediction from forces: a pull / pull-hook with low-point control issues. Next session: capture the Trackman shot (path/face/start/curve/low-point) to grade this.
- Club: 6-iron.
- Ball-flight focus: pull hooks, compression, getting through without getting stuck, lower-back pain "from reacting to the ball."
- Screenshots: Kinetic-Sequence + pressure captures.
- Video: session screen-recording → 40 stills (P1–P10 × 4 pages: Kinetic Sequence · Lateral Fy · Antero-Posterior Fx · Vertical Torque Tz). No Vertical Force (Fz / jump) page in this clip.
- Trackman: not captured this session.
Source: session video → stills extracted at P1–P10 for each graph page.
Kinetic Sequence — P1–P10
Lateral force (Fy) — P1–P10
Antero-posterior (Fx) — P1–P10
Vertical torque (Tz) — P1–P10
Next capture
- Add the Vertical Force (Fz / jump) page (missing here) for the full 5-page set — it's the speed channel.
- Matching Trackman shot (path/face/start/curve/low-point) to grade the pull-hook prediction.
- Tighten P-frame alignment: extract by the graph scrubber position so P-positions match across pages (the even-time-spaced labels here don't line up page-to-page — fine for curve reads, not for per-P comparison).
Since last session
- Same swing, deeper data. The original read used only the Kinetic-Sequence screenshots; the session video added the per-foot Lateral (Fy), Antero-Posterior (Fx), and Torque (Tz) pages (40 stills). That confirmed the AP couple/thrust that was previously only inferred — L2 → L3 now grounded in data, not a guess. Story is unchanged but stronger: late load → late lunge → late, sharp AP thrust at impact = stuck → flip → pull hook + back load.
Trend across sessions
| date | club | focus | trail_load_pct | line_at_transition | vert_peak_pct | tz_peak | ball_flight_result |
|---|---|---|---|---|---|---|---|
| 2026-06-20 | 6-iron | pull-hook/stuck/compression/back | 75 | ~-2deg(non-positive) | 148 | 66 | no-trackman |
New concepts emerging in the data
Your growing cause→effect maps (validated from your data, feed back into the cards):
- line-of-pressure — see
correlations/line-of-pressure.md
Force-Plate Analysis Protocol · /fp-analyze
This is the single, canonical method for analyzing a Smart2Move capture. Run it the same way every
time — even after a context reset or on a new computer. Invoke with /fp-analyze (the slash command
loads this file + your last analysis, runs the steps below, saves the output, and diffs vs last).
Folder map (short paths below are relative to these roots):
- Analysis Protocol/ — this file + build_report.py + build_site.py.
- Golf Knowledge Repository/ — the knowledge: concepts/ cards, source transcripts, site/, _index.md.
- Analysis Sessions/ — one folder per session, named by ISO date (YYYY-MM-DD/): the dropped photos + that
session's .md record + .html report all live together. Plus a catch-all _Cross-Session/ that spans
sessions: _tracker.csv, data/, correlations/, journal/, practice/, _template.md. So below,
_tracker.csv/data//correlations/ = under _Cross-Session/; concepts/… = Golf Knowledge Repository/concepts/….
Core principle — grounded in the concept cards
Every judgment routes to the concept + Details cards (concepts/**) — our transcript-derived core
knowledge (Smart2Move · TPI · Measured Golf · Shauheen, cited, with nuance in each card's Details).
The protocol interprets via the cards; it never invents. Each step names its card(s) + the Trackman
metric that confirms it.
Knowledge stack (grows over time):
1. Core: concept cards + Details (transcripts).
2. + Observations: the dated session folders (one per session) + correlations/ (your cause→effect map).
3. + Tested outputs: validated worked/hasn't + correlations/<lever>.md → flow back into the cards,
overriding textbook matchups with your confirmed truths.
Inputs
| Input | Required? | Notes |
|---|---|---|
| Club | Required | Sets the reference bands — driver ≠ 6-iron ≠ wedge for magnitudes and setup pressure. |
| Ball-flight issue / focus | Required | Your miss or what you're trying to improve → drives prioritization. |
| P1–P10 screenshots | Required (L1); more for deeper | L1 = combined Kinetic-Sequence + pressure view. L2/L3 need P1–P10 for each sub-force (lateral/rotational/vertical) showing individual feet. |
| Trackman shot data | Optional (the conclusion) | Pulled from Trackman Scraper/ exports, matched by date+club, to grade the prediction. |
| Concept cards | Always (AI ref) | The interpretation layer. |
Capturing a swing — video → frames (5 graph pages × P1–P10 = 50 stills)
The Smart2Move app shows one graph page at a time. A full read wants all 5 force-channel pages, each across the whole swing. Record the swing once per page in a single screen-recording (top pressure panel visible), then extract stills:
| # | Page (app title) | Channel | What it shows |
|---|---|---|---|
| 1 | Kinetic Sequence | Ks | combined order · timing · magnitude (Fy·Tz·Fz readouts) — the L1 view |
| 2 | Lateral Force | Fy | side-to-side (weight shift), both feet |
| 3 | Antero-Posterior | Fx | toward/away the ball — the AP couple / early-extension channel, both feet |
| 4 | Vertical Torque | Tz | the twist (about the vertical axis), both feet |
| 5 | Vertical Force | Fz | the jump (up/down) — most correlated with speed |
I can't read video as motion — only stills. Turn the video into frames with Analysis Protocol/video_to_frames.py
(uses bundled ffmpeg; py -m pip install imageio-ffmpeg once):
1. contact overview sheet → find where each page's segment starts/ends.
2. per-page contact sheet → read off the P1–P10 timestamps within each segment.
3. extract --spec (precise) or auto --page LABEL START END (10 evenly spaced) → writes
<page>-P01.jpg … P10.jpg into the session's Swing Photos & Videos/frames/.
→ 5 pages × P1–P10 = 50 stills. A page missing from the recording = 10 fewer (e.g. no Fz page → 40).
P-System — P1–P10 (use these positions consistently, every swing)
| P | Swing position | Force-plate event to expect there |
|---|---|---|
| P1 | Address / setup | setup pressure (driver = trail-biased; iron ≈ 50/50); line of pressure ~neutral |
| P2 | Takeaway — shaft parallel to ground (backswing) | trail pressure loading toward cuboid/mid-foot |
| P3 | Lead arm parallel to ground (backswing) | trail load near max (~75–80%), should be cresting |
| P4 | Top / transition | lateral (Fy) peaks; line of pressure going positive; trail load easing |
| P5 | Early downswing — lead arm parallel to ground | rotational (Tz) building; pressure shifting to lead |
| P6 | Shaft parallel to ground (downswing), hands ~hip height | Tz peak; vertical (Fz) peaking (pre-impact); lead COP ball-of-foot |
| P7 | Impact | Fz near/just past peak; line of pressure positive (post, not a thrust) |
| P8 | Shaft parallel to ground (early follow-through) | forces unloading; lead-side post holds |
| P9 | Lead arm parallel to ground (follow-through) | — |
| P10 | Finish | weight ~fully lead; balanced, stable post |
Standard golf P-positions; the right column ties each to the plate so reads line up run-to-run.
How a run works (cascading — stop when the miss is explained)
- Read the last analysis (latest dated session folder) so this run is relative to it.
- Ball-flight router → from your miss, jump to the likely suspects/levels first.
- Level 1 (high-level) + trend → does it explain the miss? If yes → fix. If not → double-click down.
- Continue L2 → L3 → L4 only as needed.
- Fix loop: prioritize what to work on + how (→ card fix).
- Save: write
Analysis Sessions/<date>/<date>-<club>.md, append_tracker.csv, log metrics todata/measurements.csv, and (if a change is observed vs last) appendcorrelations/_observations.csv. - Trackman conclusion (optional): attach the actual shot's ball flight → grade the force prediction.
Ball-flight router — start here
| Your miss | Check first (level · items) | Likely root | Cards |
|---|---|---|---|
| Pull / pull-hook + stuck | L1 pressure → L2 trail-load timing + line of pressure at transition + AP couple | late load → non-positive line → thrust/early-ext | line-of-pressure, trail-pressure-load, anterior-posterior-forces |
| Push / block | L2 lead-side post + AP couple; line of pressure | stuck/under, lead not posting | anterior-posterior-forces, cop-trace, lateral-force |
| Slice / fade / over-the-top | L1 sequence (rotation before lateral?) → L2 line of pressure (negative early) | early rotation / negative line | kinetic-sequence, line-of-pressure |
| Hook (non-pull) | L2 line of pressure (too positive?) + AP; L3 over-shallow | over-shallow / face-to-path closed | line-of-pressure, shallowing-methods |
| Fat / thin (compression) | L2 trail-load timing (hang-back?) + COP forward; lead post | late/weak shift, low point off | trail-pressure-load, cop-trace |
| Lacking distance | L1 magnitude + timing → L3 net impulse | low/late vertical, low impulse, late forces | vertical-force-peak, impulse, kinetic-sequence |
| Lower-back pain | L4 physical screen FIRST + L2 early-extension pattern | thrust/side-bend save; physical limit | anterior-posterior-forces + physical screen |
The cascade
LEVEL 1 — High-level read + trend
Inputs: P1–P10, combined Kinetic-Sequence + pressure view.
- Forces — Order · Timing · Magnitude (combined).
- Order = lateral→rotational→vertical, vertical last & tallest?
- Timing = does each force peak at the right time in the swing (per the card windows): lateral ~transition (P4), rotational ~lead-arm-45°→lead-arm-parallel (P5), vertical ~lead-arm-parallel→shaft-parallel (P5.5–P6)? Vertical peaking at impact (late) is the classic amateur miss → can't use the ground (and it reads low because it's late). Greg Rose: lateral ~0.23 s / vertical ~0.1 s before impact.
- Magnitude = each peak vs the club-adjusted bands?
- → kinetic-sequence (timing windows live here), lateral-force, rotational-force, vertical-force-peak.
- Pressure — COP path + line of pressure. Trail load early & decreasing before top? Line positive at transition? → cop-trace, line-of-pressure, trail-pressure-load.
- Output = a status table with a FIXED row set (same rows every run → trendable). Columns: Read
(a good / okay / concern chip) · Field · What we see (the read + card link). The rows are
always, in order: Sequence · Timing · Magnitude · Pressure (COP) · Line of pressure, then a
Verdict row (does it explain the miss?). Don't invent fields — fold sub-reads (e.g. forward shift /
lead post, trail-load timing, cuboid-vs-heel) into Pressure (COP). So good vs. bad is glanceable.
Explained? → fix. Else → L2.
- Trackman confirm: club speed, smash, path, low-point trends.
LEVEL 2 — Localize (individual forces & pressure, both feet, P1→P10)
Inputs: P1–P10 for each sub-force (lateral/rotational/vertical) showing individual feet, + pressure both feet.
- For each force & pressure, split lead vs trail and walk P1→P10: which foot, which force, which phase breaks.
- Point of application: trail-load amount + timing (cuboid vs heel), line-of-pressure sign at transition, lead COP ball-of-foot vs heel.
- → trail-pressure-load, line-of-pressure, cop-trace, anterior-posterior-forces, the force cards.
- Trackman confirm: path, face-to-path, low point, (video) early extension.
LEVEL 3 — Net impulse & duration
Inputs: same per-foot, per-force views (set the impulse time points).
- Net impulse per channel (direction + size): AP net (negative = space / positive = thrust), torque net, lateral net.
- Duration / area under curve / rate of force development — long-and-low vs short-and-hard.
- The force → club-delivery → ball-flight bridge.
- → impulse, anterior-posterior-forces, force-to-ballflight.
- Trackman confirm: speed/quantity of motion, path/curve.
LEVEL 4 — Root / Why (off the plate)
When the forces show the fault but not the cause ("force shows HOW, not WHY"): - Physical screen (TPI mobility/stability — esp. lead-hip internal rotation). - Fundamentals · Equipment · Mental (the 4 whys). - 3D / video kinematic cross-check (driver → 3D matters more; iron → force plate). - Output: technical vs physical vs equipment → sets the fix path. (Inputs off-plate — handoff checklist.)
Club-adjusted reference bands (directional — calibrate to YOUR solid strikes per club)
| Metric | Driver | Mid-iron (6i) | Wedge |
|---|---|---|---|
| Vertical peak (Fz) | ~190–210%+ (elite 230–250) | ~150–185% | ~150–160% |
| Unweighting valley | ~63–65% | moderate | shallow (~90%+); chip = stay up |
| Lateral peak | ~20% | lower | low |
| Rotational (Tz) | ~85 N·m/kg ref | lower | low |
| Setup L/R pressure | trail-biased (behind ball) | ~50/50 | centered / slight lead |
| > Card thresholds are driver-ish defaults. Adjust down for irons/wedges, then trust your own solid-strike numbers for that club over any textbook number. |
Fix loop — what to work on + how
- Priority ladder: Sequence → Timing → Point-of-application → Magnitude → Shape. A fault high up poisons everything below — fix top-down. Backswing-first (cause), not the downswing compensation.
- Test loop: change ONE thing → capture solid vs mishit → confirm the trace AND Trackman both moved → log it. Promote a fix only when your data confirms it.
- Physical gate: if a force can't be produced, screen the body — don't drill into a limit; protect injuries.
Output format (what /fp-analyze saves)
Each run writes the record into that session's dated folder: Analysis Sessions/<YYYY-MM-DD>/<YYYY-MM-DD>-<club>.md
(use _Cross-Session/_template.md; leave inputs_folder blank — photos are already in this same folder):
- Inputs: club, ball-flight focus, Trackman (if any).
- Level read(s): L1 as the fixed good/okay/concern status table (Read · Field · What we see · Verdict).
Down-clicks (L2–L4) use the same table — but no fixed rows: sorted by concern (worst first), each Field
tagged with its level (**L2** / **L3** / **L4**). Map each to its card (in the record; stripped from HTML).
- Top priority — what to work on + how (the fix). Every top priority must be pinned to the image —
add ≥1 evidence line naming the exact frame and where on it the read comes from:
- format: - evidence: <IMG_file> @ <x>,<y> — <what's visible here> where x,y are percent
(0–100, top-left origin) of where to drop the numbered pin on that frame.
- a priority can carry multiple evidence pins (e.g. the same fault at the top and through impact),
and they can point at different frames. Use the actual readouts (load %, line-of-pressure angle, the
force trace, or the video posture) — quote the number you see.
- Since last session: what changed → how each metric moved → how ball flight moved (the cascade).
- Trackman conclusion (optional): predicted vs actual → match?
Then: append a row to _tracker.csv (trend scan), log metrics to data/measurements.csv,
and append any change→outcome to correlations/_observations.csv (+ update correlations/<lever>.md).
Review report (the consumable output)
Finally, generate a self-contained 4-tab HTML report for review:
cd "Analysis Protocol" && py build_report.py "<YYYY-MM-DD>-<club>.md" → writes the .html next to the record in Analysis Sessions/<YYYY-MM-DD>/.
- Tab 1 · Analysis — built for fast reading, in this order:
1. Working on (the ball-flight focus) — plain text at the very top, no framing.
2. Top priority — numbered cards. Each priority is color-coded and its pin(s) on the image use the
SAME color (priority 1 ↔ pin 1, priority 2 ↔ pin 2 …) so the card↔image mapping is obvious at a glance.
3. Evidence — the frames with the colored numbered pins dropped exactly where each read
comes from, plus a Hide / Show pins toggle so the frame can be seen clean.
4. Level 1 — high-level read — the fixed good / okay / concern status table (rows above).
5. Deeper levels (L2–L4) — the same status table as L1, but sorted worst-first (top concerns at the
top, each row tagged with its level) — and the Trackman conclusion; both collapsed by default.
- No concept-card citations in the reader-facing tabs. The → card-id references stay in the markdown
record (grounding/traceability for the AI) but build_report.py strips them from the Analysis / Trend /
Inputs tabs (strip_card_refs). The Protocol tab keeps them, since naming the cards is the method.
- No image filenames shown. The report renders the picture, never the file name (IMG_….jpg / frames/…).
Filenames stay only in the markdown record's evidence: lines (so the build can find the file).
- Top-priority images must match the narrative. Each priority's pin(s) should show what the text says
(e.g. the AP-couple frame for the AP/thrust point, the top frame for the late-load point).
- Tab 2 · Inputs — the screenshots provided (embedded from inputs_folder) + Trackman + next-capture.
- Tab 3 · Trend & new concepts — the since-last diff + the cross-session _tracker.csv table + emerging correlations/.
- Tab 4 · Protocol — this method, so anyone can see how the analysis was conducted.
(Set inputs_folder in the record's frontmatter so the screenshots embed.)