Summary
lib/song.py already has a fully-wired field for this — Note.pick_direction (default -1), serialized as pkd on the wire (song.py:267-268) and pickDirection in RS-XML (song.py:1110) — but neither Guitar Pro importer ever populates it:
lib/gp2rs.py (GP3/4/5 binary import via PyGuitarPro) — no reference to stroke/pick direction anywhere in the file.
lib/gp2rs_gpx.py (GP6/7/8 GPX/XML import) — same, no reference.
Every note imported from a .gp3/.gp4/.gp5/.gpx file ends up with pick_direction = -1 (unset), even when the source file authored an explicit up/down stroke.
Separately, gp2rs.py:1224 writes a strum="down" attribute on chord elements, but it's hardcoded unconditionally for every chord regardless of the source data — it doesn't read anything from the file either. That's a different, chord-level legacy attribute, not a substitute for real per-beat direction.
The source data is actually there to read
Checked the guitarpro (PyGuitarPro) library gp2rs.py already depends on: Beat.effect (a BeatEffect) exposes both stroke: BeatStroke and pickStroke: BeatStrokeDirection (an up/down/none enum) directly — confirmed via inspect.signature(guitarpro.models.BeatEffect.__init__). So for GP3-5 this isn't a "library doesn't expose it" situation; the value is sitting on the parsed beat object and is simply never read. GPX (GP6+) has the equivalent <Stroke><Direction> element in its own beat/XML schema.
Ask
Wire beat.effect.pickStroke (GP3-5) / the GPX <Stroke><Direction> element (GP6+) into Note.pick_direction in both gp2rs.py and gp2rs_gpx.py, so strumming direction survives import instead of silently dropping to unset. strum_group (the rake/strum-gesture grouping key next to pick_direction in song.py) may also be relevant if a beat's stroke applies across the whole chord rather than per-note — worth checking during implementation whether both fields need populating or just pick_direction.
Context
Found while investigating a related question about why feedpakr flags "two notes on the same string" during GP import (unrelated root cause, already understood — that one's a wire-format encoding artifact for keys/drums/multi-voice guitar, not a bug). Verified not a duplicate of any open issue (searched "strum", "pick direction", "pickDirection", "stroke").
Summary
lib/song.pyalready has a fully-wired field for this —Note.pick_direction(default-1), serialized aspkdon the wire (song.py:267-268) andpickDirectionin RS-XML (song.py:1110) — but neither Guitar Pro importer ever populates it:lib/gp2rs.py(GP3/4/5 binary import via PyGuitarPro) — no reference to stroke/pick direction anywhere in the file.lib/gp2rs_gpx.py(GP6/7/8 GPX/XML import) — same, no reference.Every note imported from a
.gp3/.gp4/.gp5/.gpxfile ends up withpick_direction = -1(unset), even when the source file authored an explicit up/down stroke.Separately,
gp2rs.py:1224writes astrum="down"attribute on chord elements, but it's hardcoded unconditionally for every chord regardless of the source data — it doesn't read anything from the file either. That's a different, chord-level legacy attribute, not a substitute for real per-beat direction.The source data is actually there to read
Checked the
guitarpro(PyGuitarPro) librarygp2rs.pyalready depends on:Beat.effect(aBeatEffect) exposes bothstroke: BeatStrokeandpickStroke: BeatStrokeDirection(an up/down/none enum) directly — confirmed viainspect.signature(guitarpro.models.BeatEffect.__init__). So for GP3-5 this isn't a "library doesn't expose it" situation; the value is sitting on the parsed beat object and is simply never read. GPX (GP6+) has the equivalent<Stroke><Direction>element in its own beat/XML schema.Ask
Wire
beat.effect.pickStroke(GP3-5) / the GPX<Stroke><Direction>element (GP6+) intoNote.pick_directionin bothgp2rs.pyandgp2rs_gpx.py, so strumming direction survives import instead of silently dropping to unset.strum_group(the rake/strum-gesture grouping key next topick_directioninsong.py) may also be relevant if a beat's stroke applies across the whole chord rather than per-note — worth checking during implementation whether both fields need populating or justpick_direction.Context
Found while investigating a related question about why feedpakr flags "two notes on the same string" during GP import (unrelated root cause, already understood — that one's a wire-format encoding artifact for keys/drums/multi-voice guitar, not a bug). Verified not a duplicate of any open issue (searched "strum", "pick direction", "pickDirection", "stroke").