paces 0.0.8__tar.gz → 0.0.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {paces-0.0.8 → paces-0.0.9}/PKG-INFO +24 -6
- {paces-0.0.8 → paces-0.0.9}/README.md +23 -5
- {paces-0.0.8 → paces-0.0.9}/paces/pose.py +11 -2
- {paces-0.0.8 → paces-0.0.9}/pyproject.toml +7 -2
- {paces-0.0.8 → paces-0.0.9}/tests/test_pose.py +30 -0
- {paces-0.0.8 → paces-0.0.9}/.gitignore +0 -0
- {paces-0.0.8 → paces-0.0.9}/LICENSE +0 -0
- {paces-0.0.8 → paces-0.0.9}/docs/README.md +0 -0
- {paces-0.0.8 → paces-0.0.9}/docs/alignment/README.md +0 -0
- {paces-0.0.8 → paces-0.0.9}/docs/poc-reference/README.md +0 -0
- {paces-0.0.8 → paces-0.0.9}/docs/poc-reference/artifacts/clips.json +0 -0
- {paces-0.0.8 → paces-0.0.9}/paces/__init__.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/paces/__main__.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/paces/derivation.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/paces/edits.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/paces/excerpts.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/paces/measure.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/paces/model.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/paces/projection.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/paces/render.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/paces/segmenters.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/paces/tools.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/tests/audio_synth.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/tests/data/routine.json +0 -0
- {paces-0.0.8 → paces-0.0.9}/tests/poc_fixture.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/tests/test_chapters.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/tests/test_cli_surface.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/tests/test_derivation.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/tests/test_edits.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/tests/test_excerpts.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/tests/test_measure.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/tests/test_render_media.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/tests/test_roundtrip_poc.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/tests/test_segment.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/tests/test_smoke.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/tests/test_vertical_slice.py +0 -0
- {paces-0.0.8 → paces-0.0.9}/tests/video_synth.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: paces
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.9
|
|
4
4
|
Summary: Turn instructional media into structured, interactive learning material
|
|
5
5
|
Project-URL: Homepage, https://github.com/thorwhalen/paces
|
|
6
6
|
Project-URL: Repository, https://github.com/thorwhalen/paces
|
|
@@ -109,11 +109,29 @@ quarantined into one — is the **ultralytics** distribution, which is AGPL-3.0.
|
|
|
109
109
|
|
|
110
110
|
What it pulls in is a different question, and worth stating plainly: rtmlib
|
|
111
111
|
requires opencv, and opencv's *bundled FFmpeg* is **GPL-3.0-or-later on macOS
|
|
112
|
-
wheels** (built `--enable-gpl`
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
112
|
+
wheels of the versions measured (4.12.0.88 / 4.13.0.92)** (built `--enable-gpl`
|
|
113
|
+
with libx264/libx265) though LGPL-2.1-or-later on manylinux and Windows — a
|
|
114
|
+
per-version fact, not a per-platform one: the 5.0.0.93 macOS x86_64 wheel ships
|
|
115
|
+
no FFmpeg at all. This is measured from the shipped binaries — the wheels' own
|
|
116
|
+
`LICENSE-3RD-PARTY.txt` never mentions x264. `paces[media]` already brings such
|
|
117
|
+
a wheel, so `[pose]` adds a second copy rather than a higher tier. Worse:
|
|
118
|
+
rtmlib's own metadata requires *both* `opencv-python` *and*
|
|
119
|
+
`opencv-contrib-python`, unpinned, so a plain `pip install paces[media,pose]`
|
|
120
|
+
ends up with two distributions owning one `cv2` — harmless until either is
|
|
121
|
+
uninstalled, at which point the survivor's `cv2` can be left with files
|
|
122
|
+
missing (issue #20). rtmlib only calls plain `cv2` APIs (`VideoCapture`,
|
|
123
|
+
`dnn.readNetFromONNX`, drawing helpers — nothing contrib-only), so `[media]`'s
|
|
124
|
+
`opencv-contrib-python` already covers it; to keep the closure
|
|
125
|
+
single-provider, install in two steps instead of one:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
pip install "paces[media]" # opencv-contrib-python, the fleet's one cv2
|
|
129
|
+
pip install --no-deps "rtmlib>=0.0.16,<0.1" # skip rtmlib's own opencv-* re-declaration
|
|
130
|
+
pip install onnxruntime tqdm # rtmlib's other real deps (numpy already arrives via opencv)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
`paces.pose.check_pose_requirements()` reports what you have, and names the
|
|
134
|
+
repair command if both providers are already present.
|
|
117
135
|
|
|
118
136
|
## How it thinks
|
|
119
137
|
|
|
@@ -71,11 +71,29 @@ quarantined into one — is the **ultralytics** distribution, which is AGPL-3.0.
|
|
|
71
71
|
|
|
72
72
|
What it pulls in is a different question, and worth stating plainly: rtmlib
|
|
73
73
|
requires opencv, and opencv's *bundled FFmpeg* is **GPL-3.0-or-later on macOS
|
|
74
|
-
wheels** (built `--enable-gpl`
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
74
|
+
wheels of the versions measured (4.12.0.88 / 4.13.0.92)** (built `--enable-gpl`
|
|
75
|
+
with libx264/libx265) though LGPL-2.1-or-later on manylinux and Windows — a
|
|
76
|
+
per-version fact, not a per-platform one: the 5.0.0.93 macOS x86_64 wheel ships
|
|
77
|
+
no FFmpeg at all. This is measured from the shipped binaries — the wheels' own
|
|
78
|
+
`LICENSE-3RD-PARTY.txt` never mentions x264. `paces[media]` already brings such
|
|
79
|
+
a wheel, so `[pose]` adds a second copy rather than a higher tier. Worse:
|
|
80
|
+
rtmlib's own metadata requires *both* `opencv-python` *and*
|
|
81
|
+
`opencv-contrib-python`, unpinned, so a plain `pip install paces[media,pose]`
|
|
82
|
+
ends up with two distributions owning one `cv2` — harmless until either is
|
|
83
|
+
uninstalled, at which point the survivor's `cv2` can be left with files
|
|
84
|
+
missing (issue #20). rtmlib only calls plain `cv2` APIs (`VideoCapture`,
|
|
85
|
+
`dnn.readNetFromONNX`, drawing helpers — nothing contrib-only), so `[media]`'s
|
|
86
|
+
`opencv-contrib-python` already covers it; to keep the closure
|
|
87
|
+
single-provider, install in two steps instead of one:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
pip install "paces[media]" # opencv-contrib-python, the fleet's one cv2
|
|
91
|
+
pip install --no-deps "rtmlib>=0.0.16,<0.1" # skip rtmlib's own opencv-* re-declaration
|
|
92
|
+
pip install onnxruntime tqdm # rtmlib's other real deps (numpy already arrives via opencv)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
`paces.pose.check_pose_requirements()` reports what you have, and names the
|
|
96
|
+
repair command if both providers are already present.
|
|
79
97
|
|
|
80
98
|
## How it thinks
|
|
81
99
|
|
|
@@ -412,7 +412,12 @@ def check_pose_requirements() -> dict:
|
|
|
412
412
|
``opencv-contrib-python``, while the fleet standardises on the contrib
|
|
413
413
|
superset (mixing's single cv2 provider). An install can therefore end up
|
|
414
414
|
with two distributions owning one ``cv2`` package. Reported, not fatal:
|
|
415
|
-
it works until one of them is uninstalled, and a reader deserves to know
|
|
415
|
+
it works until one of them is uninstalled, and a reader deserves to know
|
|
416
|
+
— and, since neither package's uninstall is safe once both are present
|
|
417
|
+
(each claims files the other also claims), the note names the repair
|
|
418
|
+
command rather than only the collision. See README's "Auto-crop" section
|
|
419
|
+
for the install recipe that avoids the pair in the first place
|
|
420
|
+
(issue #20).
|
|
416
421
|
|
|
417
422
|
Downloads nothing: weights arrive on first inference, not on this check.
|
|
418
423
|
"""
|
|
@@ -449,7 +454,11 @@ def check_pose_requirements() -> dict:
|
|
|
449
454
|
notes.append(
|
|
450
455
|
"two distributions provide cv2 "
|
|
451
456
|
f"({', '.join(cv2_providers)}) — rtmlib declares both; uninstalling "
|
|
452
|
-
"either can leave the other's cv2 broken"
|
|
457
|
+
"either can leave the other's cv2 broken. Repair: "
|
|
458
|
+
"pip uninstall -y opencv-python opencv-contrib-python && "
|
|
459
|
+
"pip install --force-reinstall opencv-contrib-python — not sticky: "
|
|
460
|
+
"the next plain `pip install paces[pose]` re-adds opencv-python, "
|
|
461
|
+
"so use README's Auto-crop install recipe to avoid it recurring"
|
|
453
462
|
)
|
|
454
463
|
return {
|
|
455
464
|
"ok": rtmlib_version is not None and onnxruntime_version is not None,
|
|
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
|
|
|
6
6
|
|
|
7
7
|
[project]
|
|
8
8
|
name = "paces"
|
|
9
|
-
version = "0.0.
|
|
9
|
+
version = "0.0.9"
|
|
10
10
|
description = "Turn instructional media into structured, interactive learning material"
|
|
11
11
|
readme = "README.md"
|
|
12
12
|
license = "MIT"
|
|
@@ -89,7 +89,12 @@ media = [
|
|
|
89
89
|
# unaudited wheel in silently.
|
|
90
90
|
# Not mirrored into [dev] on purpose: the tests are offline and stay on fake
|
|
91
91
|
# locators (no weights, no network), and CI has no reason to take on the second
|
|
92
|
-
# cv2 provider. `check_pose_requirements()` reports that pair when it happens
|
|
92
|
+
# cv2 provider. `check_pose_requirements()` reports that pair when it happens
|
|
93
|
+
# and names the repair command; README's "Auto-crop" section has the two-step
|
|
94
|
+
# install recipe that avoids the pair in the first place (issue #20). Not
|
|
95
|
+
# fixable from here: rtmlib declares both wheels unconditionally, with no
|
|
96
|
+
# marker paces can override, so a single-provider closure needs either that
|
|
97
|
+
# recipe or an upstream rtmlib change — not a pin in this file.
|
|
93
98
|
pose = [
|
|
94
99
|
"rtmlib>=0.0.16,<0.1",
|
|
95
100
|
"onnxruntime",
|
|
@@ -439,6 +439,36 @@ def test_check_pose_requirements_reports_channels_without_downloading():
|
|
|
439
439
|
assert any("paces[pose]" in note for note in report["notes"])
|
|
440
440
|
|
|
441
441
|
|
|
442
|
+
def test_check_pose_requirements_names_the_repair_when_both_cv2_providers_present(
|
|
443
|
+
monkeypatch,
|
|
444
|
+
):
|
|
445
|
+
# issue #20: rtmlib declares both opencv-python and opencv-contrib-python.
|
|
446
|
+
# Naming the collision isn't enough — a reader who hits it needs the
|
|
447
|
+
# repair command, not just the two package names, since neither package's
|
|
448
|
+
# uninstall is safe once both are present (each claims the other's files).
|
|
449
|
+
import importlib.metadata
|
|
450
|
+
|
|
451
|
+
installed = {
|
|
452
|
+
"rtmlib": "0.0.16",
|
|
453
|
+
"onnxruntime": "1.2.3",
|
|
454
|
+
"opencv-python": "4.12.0.88",
|
|
455
|
+
"opencv-contrib-python": "4.13.0.92",
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
def fake_version(distribution, *args, **kwargs):
|
|
459
|
+
try:
|
|
460
|
+
return installed[distribution]
|
|
461
|
+
except KeyError:
|
|
462
|
+
raise importlib.metadata.PackageNotFoundError(distribution)
|
|
463
|
+
|
|
464
|
+
monkeypatch.setattr(importlib.metadata, "version", fake_version)
|
|
465
|
+
report = check_pose_requirements()
|
|
466
|
+
assert report["cv2_providers"] == ["opencv-python", "opencv-contrib-python"]
|
|
467
|
+
assert any(
|
|
468
|
+
"pip install --force-reinstall" in note for note in report["notes"]
|
|
469
|
+
)
|
|
470
|
+
|
|
471
|
+
|
|
442
472
|
# ── the licence perimeter (packaging facts, guarded because nothing else is) ─
|
|
443
473
|
|
|
444
474
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|