Add autoplay, progress rings, duplicate-lesson detection, title-card thumbnails
- Auto-play next lesson on end, with a cancelable countdown and a Settings toggle (default on). - Grid-view course cards show a small progress ring (checkmark at 100%) instead of a separate bar. - Duplicate Lesson Files: scans within each course/folder for media files that look like the same lesson downloaded twice, with per-file delete and a shared ignore list with Duplicate Courses. - Auto-generated cover art now samples a few early candidate frames and keeps the largest JPEG, favoring an intro title card over a blank fade-in or a plain presenter frame. - Settings -> "Regenerate Thumbnails" re-runs that logic for every course with an auto-generated thumbnail (never touches manual covers), so already-cached thumbnails can pick up the improvement. - Add .gitignore for __pycache__/. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -101,7 +101,11 @@ silently stay blank instead of erroring.
|
||||
completion % at a glance
|
||||
- Cover art: uses a manually-placed `cover`/`folder`/`thumbnail`/`thumb`/
|
||||
`poster` image if a course has one, otherwise auto-generates one via
|
||||
`ffmpeg` from a frame of the course's first video
|
||||
`ffmpeg` - samples a few candidate frames from the first several seconds
|
||||
of the course's first video (where an intro title card typically lives)
|
||||
and keeps the one that compresses to the largest JPEG, a cheap proxy for
|
||||
"has the most going on" that favors a title card/logo over a blank
|
||||
fade-in or a plain frame of the presenter
|
||||
- **File Management** ([/unsorted](templates/unsorted.html), its own item
|
||||
("Files") in the bottom tab bar alongside Home/Notes/Help/Settings): a
|
||||
dedicated page for everything that touches files on disk, since it needs
|
||||
@@ -181,13 +185,20 @@ silently stay blank instead of erroring.
|
||||
difference doesn't hide a real duplicate. Groups by similarity (union of
|
||||
any two courses over the threshold, transitively) rather than showing
|
||||
raw pairs; each course in a group gets a one-click Hide, or a **Delete**
|
||||
that permanently removes it from disk (the one destructive action in the
|
||||
whole app - confirmed with the full path before it runs). A group can
|
||||
also be marked **"Not a duplicate"** if the match is wrong, which
|
||||
excludes that specific pair from future scans without touching anything
|
||||
else that happens to match one of those courses; ignored pairs are
|
||||
listed (and reversible) under "Ignored matches," and persist through
|
||||
backup/restore alongside hidden paths and Next Up.
|
||||
that permanently removes it from disk (confirmed with the full path
|
||||
before it runs). A group can also be marked **"Not a duplicate"** if the
|
||||
match is wrong, which excludes that specific pair from future scans
|
||||
without touching anything else that happens to match one of those
|
||||
courses; ignored pairs are listed (and reversible) under "Ignored
|
||||
matches," and persist through backup/restore alongside hidden paths and
|
||||
Next Up.
|
||||
- *Duplicate Lesson Files*: the same idea one level down - media files
|
||||
sitting in the same folder that look like the same lesson downloaded
|
||||
twice (e.g. a re-download that landed alongside the original instead of
|
||||
replacing it). Compares only within a folder, at a higher match
|
||||
threshold than Duplicate Courses, so two different lessons on a similar
|
||||
topic don't get flagged; shares its ignore list with Duplicate Courses.
|
||||
Delete here removes a single file, not a whole course.
|
||||
- *Clean Up Stale References*: finds entries in the hidden-paths list,
|
||||
Next Up queue, Favorites, or Recently Viewed history that point at a path
|
||||
no longer on disk - normally from renaming/moving/deleting a course
|
||||
@@ -210,10 +221,15 @@ silently stay blank instead of erroring.
|
||||
- Recently Added / Recently Viewed
|
||||
- Surprise Me — dice icon in the header, random pick weighted toward
|
||||
incomplete courses
|
||||
- Grid view shows a small progress ring in the corner of each course's
|
||||
thumbnail (a checkmark once complete) instead of a separate bar, so
|
||||
completion reads at a glance without switching to list view
|
||||
|
||||
**Playback & progress**
|
||||
- Video/audio player with resize, playback-speed presets, and resume-from-
|
||||
last-position
|
||||
- Auto-play next lesson when one ends, with a cancelable few-second
|
||||
countdown - on by default, toggle it off in Settings → Video Player
|
||||
- Keyboard shortcuts on the lesson page: Space (play/pause), ←/→ (seek
|
||||
10s), ↑/↓ (volume), `,`/`.` (step playback speed), `[`/`]` (previous/next
|
||||
lesson), `F` (fullscreen), `N` (quick-capture a note) - see Help for the
|
||||
@@ -226,6 +242,11 @@ silently stay blank instead of erroring.
|
||||
- Settings → "Precompute Lengths & Cover Art" walks the whole library in
|
||||
the background to populate durations and thumbnails up front, with live
|
||||
progress
|
||||
- Settings → "Regenerate Thumbnails" deletes and re-runs auto-generated
|
||||
cover art for every course that has one (manually-placed covers are
|
||||
never touched) - the only way to pick up an improvement to how
|
||||
thumbnails are picked on courses whose thumbnail was already cached
|
||||
under the old logic, since it's otherwise served from disk forever
|
||||
|
||||
**Notes**
|
||||
- Timestamped notes per lesson, capturable via a keyboard shortcut without
|
||||
|
||||
Reference in New Issue
Block a user