commit - 6a82e8ad5c44b3d93d46ddf1435abf7d80c5fd21
commit + bf5177b65a99d5e54854d1582bed66cd26a1b191
blob - 8283d22422e606634ca60f721913a870e1bac089
blob + 73d03f6f42c37dd0d01d033814130591f837d5a8
--- README.md
+++ README.md
Terminal browser for an MPD release archive, written in Chez Scheme.
-Paths are read as:
+The input directory must contain `all.txt`. Its non-empty lines are
+slash-separated release paths, read as:
- `artist/album`
-- `label/artist/release`
+- `label/artist/release` (or a longer label/artist/release path)
-Parent paths are not counted as releases. All recognized files are scanned; no
-date cutoff is applied.
+Parent paths are not counted as releases. mcol scans the catalog and recognized
+dated lists without a date cutoff:
+- `YEAR/MONTH/dailies/YYYY-MM-DD.txt`, or historical `DD_MM_YYYY.txt`
+- `YEAR/dailies/YYYY-MM-DD.txt` as a fallback when a month-local daily is absent
+- `YEAR/dailies/stdin_playlist_YYYYMMDD*.txt` as a fallback when no daily exists
+- `YEAR/MONTH/1_..._....txt` through `YEAR/MONTH/4_..._....txt` for weekly lists
+
+`MONTH` is a full English month name. Multiple session playlists for a date are
+merged. Weekly and daily totals are compared in the Weeks view, never combined.
+Files below `mixes/` or `labels/` are ignored. `--strict` rejects malformed
+filenames in recognized daily and weekly locations.
+
## Run
Requires Chez Scheme 10.4 or newer. Playback requires `mpc`.
make tui
```
+A small runnable demo is included in [`demo/`](demo/README.md):
+
+```sh
+make tui INPUT=demo
+```
+
## Keys
```text
`:day 2026-08-11`, `:label Warp`, `:artist Autechre`, and `:search Autechre`
are also accepted.
-Use `p 4 5 2` to append visible releases 4, 5, and 2 and start the first one.
-Use `q 4 5 2` to append them without changing playback.
+`r` prompts for a random-release count (default: 5). Use `p 4 5 2` to append
+visible releases 4, 5, and 2 and start the first one. Use `q 4 5 2` to append
+them without changing playback.
## Build and install
blob - d3f6be58e4c132b824df642eafd4f3215950b56b
blob + 95e2464c6878a517eb2e5fe7da0f74b22d682ad1
--- doc/mcol.1
+++ doc/mcol.1
-.TH MCOL 1 "2026-08-12" "mcol" "User Commands"
+.TH MCOL 1 "2026-08-23" "mcol" "User Commands"
.SH NAME
mcol \- browse an MPD release archive
.SH SYNOPSIS
.SH DESCRIPTION
.B mcol
is a terminal browser for a directory of release lists.
-It reads two-part paths as artist/album and longer paths as
-label/artist/release.
+The directory must contain an
+.I all.txt
+catalog. Each non-empty line is a slash-separated release path. Two-part
+paths are interpreted as artist/album; paths with three or more parts are
+interpreted as label/artist/release, with any remaining parts retained in the
+release name. Parent paths are not counted as releases.
.PP
The input directory comes from
.BR \-\-input ,
.BR MCOL_INPUT ,
or the current directory, in that order.
-All recognized files are scanned.
+The catalog and recognized dated lists are scanned without a date cutoff.
Playback uses
.BR mpc (1).
+.SH ARCHIVE LAYOUT
+In addition to
+.IR all.txt ,
+mcol recognizes these text-list locations beneath the input directory:
+.TP
+.I YEAR/MONTH/dailies/YYYY-MM-DD.txt
+Daily additions, where MONTH is a full English month name. The historical
+.I DD_MM_YYYY.txt
+form is also accepted.
+.TP
+.I YEAR/dailies/YYYY-MM-DD.txt
+A legacy daily list. It is used only when no month-local daily list exists
+for that date.
+.TP
+.I YEAR/dailies/stdin_playlist_YYYYMMDD*.txt
+Session playlists. Multiple playlists for a date are merged and are used
+only when no daily list exists for that date.
+.TP
+.I YEAR/MONTH/1_..._....txt through YEAR/MONTH/4_..._....txt
+Weekly lists. Weekly and daily totals are shown side by side and are not
+combined.
+.PP
+Other text files, including files below directories named
+.IR mixes
+or
+.IR labels ,
+are ignored. With
+.BR \-\-strict ,
+malformed filenames in otherwise recognized daily or weekly locations cause
+the scan to fail.
.SH OPTIONS
.TP
.BI \-\-input " PATH"
.B s
Search artists, labels, releases, and paths.
.TP
+.B r
+Play randomly selected releases. It prompts for a count and defaults to 5.
+.TP
.B p
Append the selected release to the MPD queue and play its first track.
.B p N ...
-does the same for numbered release rows in the given order.
+does the same for numbered release rows visible on the current page, in the
+given order.
.TP
.B q
Append the selected release to the end of the MPD queue.
.B q N ...
-queues numbered release rows in the given order.
+queues numbered release rows visible on the current page, in the given order.
.TP
.B NUMBER
Open a row.
.TP
-.BR [ ,
-.B ]
-Move between pages.
+.BR nn ,
+.B pp
+Move to the next or previous page.
.TP
.B b
Go back.
Default input directory.
.TP
.B NO_COLOR
-Disable colour.
+Disable ANSI colour when set to any value.
.TP
.B MPD_HOST
MPD server or socket, read by
.SH EXIT STATUS
Zero on normal exit, non-zero on error.
.SH SEE ALSO
+.BR mpc (1),
.BR mpd (1)
blob - /dev/null
blob + f1b71aebc64cd176e8e40db41867a315c6bc3444 (mode 644)
--- /dev/null
+++ demo/2024/december/dailies/2024-12-05.txt
+Distant Signs/Loam/Seasonal Shift
+Field Notes/Iris/Slow Map
blob - /dev/null
blob + 45a35329552163bd1942010c73f1ea141920aab5 (mode 644)
--- /dev/null
+++ demo/2025/august/1_08_2025.txt
+Coral Circuit/Zero Fold/Date Line
+Analog Sea/Nocturne/Resonant
+Coastline/Rune/Blue Current
blob - /dev/null
blob + 9cd12db105eed5ef3f82fcab73f10de57cc87be9 (mode 644)
--- /dev/null
+++ demo/2025/dailies/2025-08-12.txt
+Coral Circuit/Zero Fold/Date Line
+Lumen Records/Mara Venn/Between Stations
+Heat Index/Sable/Light Leak
+Kaito/Glass Gardens
blob - /dev/null
blob + 39b49ef0a0eac834655130b34833b3a5a12d4638 (mode 644)
--- /dev/null
+++ demo/2026/august/1_08_2026.txt
+Northern Electronics/Elin Piel/Soft Static
+Lumen Records/Mara Venn/Between Stations
+Kaito/Glass Gardens
+Aria/Signals at Dawn
+Analog Sea/Nocturne/Resonant
blob - /dev/null
blob + 5262217dbea8bf8e9b04178c5d64fc8b54250294 (mode 644)
--- /dev/null
+++ demo/2026/august/dailies/2026-08-20.txt
+Northern Electronics/Elin Piel/Soft Static
+Kaito/Glass Gardens
+Aria/Signals at Dawn
+Distant Signs/Loam/Seasonal Shift
+Coastline/Rune/Blue Current
+Heat Index/Sable/Light Leak
+Field Notes/Iris/Slow Map
blob - /dev/null
blob + 6b73089ed3ffa5a9ee4c3f318cbeb960f053313e (mode 644)
--- /dev/null
+++ demo/2026/august/dailies/21_08_2026.txt
+Lumen Records/Mara Venn/Between Stations
+Analog Sea/Nocturne/Resonant
blob - /dev/null
blob + 9d42347726a1704cc598d961331516e8adc7913c (mode 644)
--- /dev/null
+++ demo/2026/august/labels/august_labels.txt
+Distant Signs
+Lumen Records
blob - /dev/null
blob + 3245a971988aa00cf7394461d80b921cf6191b9a (mode 644)
--- /dev/null
+++ demo/2026/dailies/2026-08-18.txt
+Aria/Signals at Dawn
+Coral Circuit/Zero Fold/Date Line
+Heat Index/Sable/Light Leak
blob - /dev/null
blob + b85fcf2c43b4d1ea69dba4765a27172ea671a319 (mode 644)
--- /dev/null
+++ demo/2026/dailies/2026-08-20.txt
+Aria/Signals at Dawn
+Kaito/Glass Gardens
+Distant Signs/Loam/Seasonal Shift
+Field Notes/Iris/Slow Map
+Coastline/Rune/Blue Current
blob - /dev/null
blob + b3d079eae2c5e1cae583136393d056211608b378 (mode 644)
--- /dev/null
+++ demo/2026/dailies/stdin_playlist_20260819_120000.txt
+Northern Electronics/Elin Piel/Soft Static
+Lumen Records/Mara Venn/Between Stations
+Distant Signs/Loam/Seasonal Shift
+Heat Index/Sable/Light Leak
blob - /dev/null
blob + a0b6533a13f32c4d86d0e1fd66e77b08fd381e59 (mode 644)
--- /dev/null
+++ demo/2026/dailies/stdin_playlist_20260819_180000.txt
+Lumen Records/Mara Venn/Between Stations
+Coastline/Rune/Blue Current
blob - /dev/null
blob + a26e5133697c62ba42413cd19c29659bddee9cea (mode 644)
--- /dev/null
+++ demo/README.md
+# Demo
+
+Run this small set of release lists from the repository root:
+
+```sh
+make tui INPUT=demo
+```
+
+The dated lists demonstrate daily, legacy, session, and weekly activity
+sources. mcol derives its browsable release library from these files.