Software to play back Gescom's 1998 album MiniDisc uniquely, every time.
Python
0
10 commits
updated Sep 16, 2026

Software to play back Gescom's 1998 album MiniDisc uniquely, every time.
Gescom Runner generates one 88-track M3U playlist at a time and moves through the possible track orders in exact lexicographic order. It does not try to create one enormous playlist containing every possible order; instead, it generates the current order, gives it to VLC, waits for playback to finish, records a checkpoint, and then moves to the next order.
Link to my original blog post: EI3LH - Gescom, MiniDisc and Mind-boggling Mathematics.
Important: This project is for use with audio files you have legally obtained. Do not add copyrighted audio recordings to this GitHub repository, branches or in your personal use of this software unless you have the necessary rights to redistribute them. Support the artists!
This project was written with the assistance of AI (OpenAI's ChatGPT). AI was used to help develop, refine, and document the code, while the project itself is provided as an open-source experiment in exploring the absurd combinatorial possibilities of Gescom's MiniDisc.
The music is not included with this project. Please support the artists and obtain the music legally.
Purchase Gescom – MiniDisc: Boomkat — MiniDisc
Gescom – MiniDisc © Gescom. All rights reserved. This project is not affiliated with or endorsed by Gescom or the rights holders.
Before starting, install:
gescom_exact_m3u_runner.pyNo third-party Python packages are required. The script uses Python's standard library.
The program expects a text file containing exactly 88 track filenames or paths, one per line.
The order in that file defines the starting order:
0 = the exact order in tracks.txt1 = the next lexicographic order2 = the next one after thatThe program calculates the total as:
88! = 1.8548264225739844 × 10^134
That number is unimaginably large, so the software only creates one 88-entry M3U file at a time.
Create a folder for the project.
A simple layout is:
Gescom-MiniDisc-Runner/
├── gescom_exact_m3u_runner.py
├── tracks.txt
├── assets/
│ └── gescom-runner-banner.png
├── gescom_current_permutation.m3u # generated later
└── gescom_permutation_checkpoint.txt # generated later
The last two files are created by the script and do not need to be committed to GitHub.
Install Python 3 from the official Python website.
After installation, open Command Prompt or PowerShell and check:
py --version
You should see a Python 3 version.
If py is not available, try:
python --version
Open Terminal and check:
python3 --version
You should see a Python 3 version.
If Python 3 is not installed, install it before continuing.
Open a terminal and check:
python3 --version
Install Python 3 using your distribution's normal package manager if necessary.
Install VLC from VideoLAN using the normal installer/package for your operating system.
After installing VLC, the easiest setup is to make the vlc command available from your terminal.
Open a new Command Prompt or PowerShell window and run:
vlc --version
If Windows says that vlc is not recognized, add the VLC installation directory to your system PATH, then open a new terminal window.
A typical VLC executable location is:
C:\Program Files\VideoLAN\VLC
The goal is simply that this works:
vlc --version
The VLC application may not put a vlc command on your normal PATH.
You can test:
vlc --version
If that command is not found, use VLC's executable inside the application bundle:
/Applications/VLC.app/Contents/MacOS/VLC --version
The examples later in this README use that full path when necessary.
Test:
vlc --version
If VLC was installed normally, this will usually work directly.
Put your 88 audio files somewhere accessible.
For example:
music/
├── track_01.flac
├── track_02.flac
├── track_03.flac
...
└── track_88.flac
The files can be WAV, FLAC, MP3, or another format supported by VLC.
The order matters.
Decide which file is track 1, which is track 2, and so on. That order becomes the starting point for the entire permutation sequence.
tracks.txtCreate a plain text file called:
tracks.txt
Put exactly 88 entries in it, one per line.
For example:
music/track_01.flac
music/track_02.flac
music/track_03.flac
music/track_04.flac
...
music/track_88.flac
You can also use absolute paths, for example:
/home/you/Music/Gescom/track_01.flac
or:
/Users/you/Music/Gescom/track_01.flac
or:
D:\Music\Gescom\track_01.flac
Relative paths are often easier to maintain if the project is kept together in one directory.
The script ignores:
#It does not accept fewer or more than 88 track entries.
Open a terminal in the project directory.
py gescom_exact_m3u_runner.py tracks.txt --show-first
python3 gescom_exact_m3u_runner.py tracks.txt --show-first
The program should print 88 lines.
If you get:
tracks.txt contains 87 track entries; exactly 88 are required.
or a similar message, fix tracks.txt before continuing.
This is the safest first test.
py gescom_exact_m3u_runner.py tracks.txt --once
python3 gescom_exact_m3u_runner.py tracks.txt --once
The script creates:
gescom_current_permutation.m3u
That file contains exactly one 88-track permutation.
For the first run, permutation 0 is simply the order from tracks.txt.
Before starting the automated runner, test that VLC can play the generated playlist.
You can open:
gescom_current_permutation.m3u
with VLC using your normal operating-system method.
Make sure:
Once the M3U works correctly, let Python launch VLC for one permutation.
py gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}" --once
If vlc is available on your PATH:
python3 gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}" --once
Otherwise:
python3 gescom_exact_m3u_runner.py tracks.txt --player "/Applications/VLC.app/Contents/MacOS/VLC --play-and-exit {m3u}" --once
python3 gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}" --once
The important part is:
{m3u}
The script replaces that placeholder with the path to the current generated playlist.
--once doesThe --once option means:
Generate/play exactly one permutation, then stop.
This is useful for testing.
Once one permutation works correctly, you can remove --once to begin continuous operation.
py gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}"
With VLC on PATH:
python3 gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}"
Or with the standard VLC application path:
python3 gescom_exact_m3u_runner.py tracks.txt --player "/Applications/VLC.app/Contents/MacOS/VLC --play-and-exit {m3u}"
python3 gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}"
The runner will now repeat this cycle:
Generate permutation
↓
Write M3U
↓
Launch VLC
↓
VLC plays all 88 tracks
↓
VLC exits
↓
Save checkpoint
↓
Generate next permutation
↓
Repeat
The script marks a permutation as complete after VLC exits successfully.
That means the intended workflow is:
Start VLC
↓
Let all 88 tracks play
↓
VLC exits because --play-and-exit was reached
↓
Python advances to the next permutation
Important: the Python code only treats a non-zero VLC exit status as a playback failure. Manually closing VLC may therefore be interpreted as a successful exit by the operating system, causing the current permutation to be marked complete.
For the most reliable sequence, allow VLC to finish the playlist normally.
The runner creates:
gescom_permutation_checkpoint.txt
The checkpoint contains the number of the next permutation to run.
For example, if the file contains:
12345
the next run starts at permutation:
12345
This means you can stop the computer and later run the same command again without starting from permutation 0.
The script reads the checkpoint automatically unless you provide --start.
After a restart, simply run the same command again.
py gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}"
python3 gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}"
The checkpoint tells the script where to continue.
You can jump directly to a specific zero-based permutation with --start.
For example:
python3 gescom_exact_m3u_runner.py tracks.txt --start 1000000 --once
On Windows:
py gescom_exact_m3u_runner.py tracks.txt --start 1000000 --once
This uses factorial-number-system unranking to calculate the requested permutation directly instead of generating all earlier permutations.
To generate a playlist and print its contents without launching a player:
python3 gescom_exact_m3u_runner.py tracks.txt --dry-run
On Windows:
py gescom_exact_m3u_runner.py tracks.txt --dry-run
This is useful when testing the permutation logic.
By default, the program creates:
gescom_current_permutation.m3u
You can change that with --m3u.
Example:
python3 gescom_exact_m3u_runner.py tracks.txt --m3u current.m3u --once
Using a simple filename without spaces is recommended, particularly for cross-platform command-line use.
The default checkpoint is:
gescom_permutation_checkpoint.txt
You can change it with --checkpoint.
Example:
python3 gescom_exact_m3u_runner.py tracks.txt --checkpoint my_progress.txt --once
This can be useful if you want multiple independent runs or experiments.
To restart from permutation 0, remove the checkpoint file:
gescom_permutation_checkpoint.txt
Then run the normal command again.
You can also explicitly start from zero:
python3 gescom_exact_m3u_runner.py tracks.txt --start 0 --once
On Windows:
py gescom_exact_m3u_runner.py tracks.txt --start 0 --once
tracks.txt halfway through a runThe order in tracks.txt defines the permutation universe.
For example:
A
B
C
...
creates a different universe from:
B
A
C
...
Changing the file while keeping an old checkpoint means the checkpoint number will now refer to a different ordering.
For a clean run, keep tracks.txt unchanged for the entire sequence.
The generated playlist and checkpoint are runtime files.
A useful .gitignore is:
gescom_current_permutation.m3u
gescom_permutation_checkpoint.txt
You may also choose not to commit tracks.txt if it contains personal absolute file paths.
Instead, commit a template such as:
tracks.example.txt
with example paths.
A convenient setup is:
Gescom-MiniDisc-Runner/
├── gescom_exact_m3u_runner.py
├── README.md
├── tracks.example.txt
├── assets/
│ └── gescom-runner-banner.png
└── .gitignore
Your personal audio collection can live outside the Git repository.
Windows:
py --version
macOS/Linux:
python3 --version
vlc --version
or, on macOS when needed:
/Applications/VLC.app/Contents/MacOS/VLC --version
Windows:
py gescom_exact_m3u_runner.py tracks.txt --show-first
macOS/Linux:
python3 gescom_exact_m3u_runner.py tracks.txt --show-first
Windows:
py gescom_exact_m3u_runner.py tracks.txt --once
macOS/Linux:
python3 gescom_exact_m3u_runner.py tracks.txt --once
Windows:
py gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}" --once
macOS/Linux:
python3 gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}" --once
Windows:
py gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}"
macOS/Linux:
python3 gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}"
The attached Python program uses two permutation techniques.
permutation_from_rank() uses factorial-number-system unranking.
That allows the program to take a number such as:
1000000
and calculate exactly which 88-track permutation that number represents without storing all earlier permutations.
next_permutation() changes the current ordering into the next lexicographic ordering.
That lets the runner move from:
permutation N
to:
permutation N + 1
without generating a giant collection of future playlists.
write_m3u() writes only the current 88-entry playlist.
The software therefore scales with the size of a single playlist, not with the total number of permutations.
The Python source explicitly describes this design as generating one 88-entry M3U at a time and avoiding materialization of the full permutation set. fileciteturn0file0L5-L12
The runner reads a checkpoint when it starts and writes the next permutation number after successful playback handling. The source also defines the permutation counter as zero-based. fileciteturn0file0L30-L40
Your tracks.txt does not contain exactly 88 usable entries.
Count the lines and make sure you have exactly 88 filenames/paths.
Try:
vlc --version
If that fails, either:
PATH--playerOn macOS, the standard application-bundle executable is:
/Applications/VLC.app/Contents/MacOS/VLC
First generate a playlist manually:
python3 gescom_exact_m3u_runner.py tracks.txt --once
Then open:
gescom_current_permutation.m3u
directly in VLC.
If the M3U does not work when opened manually, fix the paths in tracks.txt before troubleshooting the Python runner.
This is expected if VLC returns a non-zero exit status.
The script reports the exit status and does not advance the checkpoint in that situation. That behavior is implemented directly in launch_player() and the playback loop. fileciteturn0file0L150-L160 fileciteturn0file0L227-L255
Check:
gescom_permutation_checkpoint.txt
Also make sure tracks.txt has not been changed since the checkpoint was created.
Use:
python3 gescom_exact_m3u_runner.py tracks.txt --start NUMBER --once
For example:
python3 gescom_exact_m3u_runner.py tracks.txt --start 1000000 --once
The attached script builds the media-player command through a shell and uses Python's shlex.quote() when inserting the generated M3U path. fileciteturn0file0L150-L160
For the easiest cross-platform setup:
gescom_current_permutation.m3uvlc from PATH on Windows rather than passing a VLC executable path containing spacesThis avoids unnecessary command-line quoting problems.
This runner does not:
88! permutations finish in a human lifetimeIt does provide a deterministic, repeatable and resumable way to enumerate the permutation space one playlist at a time.
The entire point of Gescom Runner is that the sequence is mathematically enormous while the software needed to traverse it is small.
One playlist is created.
VLC plays it.
The checkpoint advances.
The next playlist is created.
And the process continues.
Gescom MiniDisc: same tracks, different order, every time.
10 commits
Python
100.0%
Software to play back Gescom's 1998 album MiniDisc uniquely, every time.
Python
0
10 commits
updated Sep 16, 2026

Software to play back Gescom's 1998 album MiniDisc uniquely, every time.
Gescom Runner generates one 88-track M3U playlist at a time and moves through the possible track orders in exact lexicographic order. It does not try to create one enormous playlist containing every possible order; instead, it generates the current order, gives it to VLC, waits for playback to finish, records a checkpoint, and then moves to the next order.
Link to my original blog post: EI3LH - Gescom, MiniDisc and Mind-boggling Mathematics.
Important: This project is for use with audio files you have legally obtained. Do not add copyrighted audio recordings to this GitHub repository, branches or in your personal use of this software unless you have the necessary rights to redistribute them. Support the artists!
This project was written with the assistance of AI (OpenAI's ChatGPT). AI was used to help develop, refine, and document the code, while the project itself is provided as an open-source experiment in exploring the absurd combinatorial possibilities of Gescom's MiniDisc.
The music is not included with this project. Please support the artists and obtain the music legally.
Purchase Gescom – MiniDisc: Boomkat — MiniDisc
Gescom – MiniDisc © Gescom. All rights reserved. This project is not affiliated with or endorsed by Gescom or the rights holders.
Before starting, install:
gescom_exact_m3u_runner.pyNo third-party Python packages are required. The script uses Python's standard library.
The program expects a text file containing exactly 88 track filenames or paths, one per line.
The order in that file defines the starting order:
0 = the exact order in tracks.txt1 = the next lexicographic order2 = the next one after thatThe program calculates the total as:
88! = 1.8548264225739844 × 10^134
That number is unimaginably large, so the software only creates one 88-entry M3U file at a time.
Create a folder for the project.
A simple layout is:
Gescom-MiniDisc-Runner/
├── gescom_exact_m3u_runner.py
├── tracks.txt
├── assets/
│ └── gescom-runner-banner.png
├── gescom_current_permutation.m3u # generated later
└── gescom_permutation_checkpoint.txt # generated later
The last two files are created by the script and do not need to be committed to GitHub.
Install Python 3 from the official Python website.
After installation, open Command Prompt or PowerShell and check:
py --version
You should see a Python 3 version.
If py is not available, try:
python --version
Open Terminal and check:
python3 --version
You should see a Python 3 version.
If Python 3 is not installed, install it before continuing.
Open a terminal and check:
python3 --version
Install Python 3 using your distribution's normal package manager if necessary.
Install VLC from VideoLAN using the normal installer/package for your operating system.
After installing VLC, the easiest setup is to make the vlc command available from your terminal.
Open a new Command Prompt or PowerShell window and run:
vlc --version
If Windows says that vlc is not recognized, add the VLC installation directory to your system PATH, then open a new terminal window.
A typical VLC executable location is:
C:\Program Files\VideoLAN\VLC
The goal is simply that this works:
vlc --version
The VLC application may not put a vlc command on your normal PATH.
You can test:
vlc --version
If that command is not found, use VLC's executable inside the application bundle:
/Applications/VLC.app/Contents/MacOS/VLC --version
The examples later in this README use that full path when necessary.
Test:
vlc --version
If VLC was installed normally, this will usually work directly.
Put your 88 audio files somewhere accessible.
For example:
music/
├── track_01.flac
├── track_02.flac
├── track_03.flac
...
└── track_88.flac
The files can be WAV, FLAC, MP3, or another format supported by VLC.
The order matters.
Decide which file is track 1, which is track 2, and so on. That order becomes the starting point for the entire permutation sequence.
tracks.txtCreate a plain text file called:
tracks.txt
Put exactly 88 entries in it, one per line.
For example:
music/track_01.flac
music/track_02.flac
music/track_03.flac
music/track_04.flac
...
music/track_88.flac
You can also use absolute paths, for example:
/home/you/Music/Gescom/track_01.flac
or:
/Users/you/Music/Gescom/track_01.flac
or:
D:\Music\Gescom\track_01.flac
Relative paths are often easier to maintain if the project is kept together in one directory.
The script ignores:
#It does not accept fewer or more than 88 track entries.
Open a terminal in the project directory.
py gescom_exact_m3u_runner.py tracks.txt --show-first
python3 gescom_exact_m3u_runner.py tracks.txt --show-first
The program should print 88 lines.
If you get:
tracks.txt contains 87 track entries; exactly 88 are required.
or a similar message, fix tracks.txt before continuing.
This is the safest first test.
py gescom_exact_m3u_runner.py tracks.txt --once
python3 gescom_exact_m3u_runner.py tracks.txt --once
The script creates:
gescom_current_permutation.m3u
That file contains exactly one 88-track permutation.
For the first run, permutation 0 is simply the order from tracks.txt.
Before starting the automated runner, test that VLC can play the generated playlist.
You can open:
gescom_current_permutation.m3u
with VLC using your normal operating-system method.
Make sure:
Once the M3U works correctly, let Python launch VLC for one permutation.
py gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}" --once
If vlc is available on your PATH:
python3 gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}" --once
Otherwise:
python3 gescom_exact_m3u_runner.py tracks.txt --player "/Applications/VLC.app/Contents/MacOS/VLC --play-and-exit {m3u}" --once
python3 gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}" --once
The important part is:
{m3u}
The script replaces that placeholder with the path to the current generated playlist.
--once doesThe --once option means:
Generate/play exactly one permutation, then stop.
This is useful for testing.
Once one permutation works correctly, you can remove --once to begin continuous operation.
py gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}"
With VLC on PATH:
python3 gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}"
Or with the standard VLC application path:
python3 gescom_exact_m3u_runner.py tracks.txt --player "/Applications/VLC.app/Contents/MacOS/VLC --play-and-exit {m3u}"
python3 gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}"
The runner will now repeat this cycle:
Generate permutation
↓
Write M3U
↓
Launch VLC
↓
VLC plays all 88 tracks
↓
VLC exits
↓
Save checkpoint
↓
Generate next permutation
↓
Repeat
The script marks a permutation as complete after VLC exits successfully.
That means the intended workflow is:
Start VLC
↓
Let all 88 tracks play
↓
VLC exits because --play-and-exit was reached
↓
Python advances to the next permutation
Important: the Python code only treats a non-zero VLC exit status as a playback failure. Manually closing VLC may therefore be interpreted as a successful exit by the operating system, causing the current permutation to be marked complete.
For the most reliable sequence, allow VLC to finish the playlist normally.
The runner creates:
gescom_permutation_checkpoint.txt
The checkpoint contains the number of the next permutation to run.
For example, if the file contains:
12345
the next run starts at permutation:
12345
This means you can stop the computer and later run the same command again without starting from permutation 0.
The script reads the checkpoint automatically unless you provide --start.
After a restart, simply run the same command again.
py gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}"
python3 gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}"
The checkpoint tells the script where to continue.
You can jump directly to a specific zero-based permutation with --start.
For example:
python3 gescom_exact_m3u_runner.py tracks.txt --start 1000000 --once
On Windows:
py gescom_exact_m3u_runner.py tracks.txt --start 1000000 --once
This uses factorial-number-system unranking to calculate the requested permutation directly instead of generating all earlier permutations.
To generate a playlist and print its contents without launching a player:
python3 gescom_exact_m3u_runner.py tracks.txt --dry-run
On Windows:
py gescom_exact_m3u_runner.py tracks.txt --dry-run
This is useful when testing the permutation logic.
By default, the program creates:
gescom_current_permutation.m3u
You can change that with --m3u.
Example:
python3 gescom_exact_m3u_runner.py tracks.txt --m3u current.m3u --once
Using a simple filename without spaces is recommended, particularly for cross-platform command-line use.
The default checkpoint is:
gescom_permutation_checkpoint.txt
You can change it with --checkpoint.
Example:
python3 gescom_exact_m3u_runner.py tracks.txt --checkpoint my_progress.txt --once
This can be useful if you want multiple independent runs or experiments.
To restart from permutation 0, remove the checkpoint file:
gescom_permutation_checkpoint.txt
Then run the normal command again.
You can also explicitly start from zero:
python3 gescom_exact_m3u_runner.py tracks.txt --start 0 --once
On Windows:
py gescom_exact_m3u_runner.py tracks.txt --start 0 --once
tracks.txt halfway through a runThe order in tracks.txt defines the permutation universe.
For example:
A
B
C
...
creates a different universe from:
B
A
C
...
Changing the file while keeping an old checkpoint means the checkpoint number will now refer to a different ordering.
For a clean run, keep tracks.txt unchanged for the entire sequence.
The generated playlist and checkpoint are runtime files.
A useful .gitignore is:
gescom_current_permutation.m3u
gescom_permutation_checkpoint.txt
You may also choose not to commit tracks.txt if it contains personal absolute file paths.
Instead, commit a template such as:
tracks.example.txt
with example paths.
A convenient setup is:
Gescom-MiniDisc-Runner/
├── gescom_exact_m3u_runner.py
├── README.md
├── tracks.example.txt
├── assets/
│ └── gescom-runner-banner.png
└── .gitignore
Your personal audio collection can live outside the Git repository.
Windows:
py --version
macOS/Linux:
python3 --version
vlc --version
or, on macOS when needed:
/Applications/VLC.app/Contents/MacOS/VLC --version
Windows:
py gescom_exact_m3u_runner.py tracks.txt --show-first
macOS/Linux:
python3 gescom_exact_m3u_runner.py tracks.txt --show-first
Windows:
py gescom_exact_m3u_runner.py tracks.txt --once
macOS/Linux:
python3 gescom_exact_m3u_runner.py tracks.txt --once
Windows:
py gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}" --once
macOS/Linux:
python3 gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}" --once
Windows:
py gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}"
macOS/Linux:
python3 gescom_exact_m3u_runner.py tracks.txt --player "vlc --play-and-exit {m3u}"
The attached Python program uses two permutation techniques.
permutation_from_rank() uses factorial-number-system unranking.
That allows the program to take a number such as:
1000000
and calculate exactly which 88-track permutation that number represents without storing all earlier permutations.
next_permutation() changes the current ordering into the next lexicographic ordering.
That lets the runner move from:
permutation N
to:
permutation N + 1
without generating a giant collection of future playlists.
write_m3u() writes only the current 88-entry playlist.
The software therefore scales with the size of a single playlist, not with the total number of permutations.
The Python source explicitly describes this design as generating one 88-entry M3U at a time and avoiding materialization of the full permutation set. fileciteturn0file0L5-L12
The runner reads a checkpoint when it starts and writes the next permutation number after successful playback handling. The source also defines the permutation counter as zero-based. fileciteturn0file0L30-L40
Your tracks.txt does not contain exactly 88 usable entries.
Count the lines and make sure you have exactly 88 filenames/paths.
Try:
vlc --version
If that fails, either:
PATH--playerOn macOS, the standard application-bundle executable is:
/Applications/VLC.app/Contents/MacOS/VLC
First generate a playlist manually:
python3 gescom_exact_m3u_runner.py tracks.txt --once
Then open:
gescom_current_permutation.m3u
directly in VLC.
If the M3U does not work when opened manually, fix the paths in tracks.txt before troubleshooting the Python runner.
This is expected if VLC returns a non-zero exit status.
The script reports the exit status and does not advance the checkpoint in that situation. That behavior is implemented directly in launch_player() and the playback loop. fileciteturn0file0L150-L160 fileciteturn0file0L227-L255
Check:
gescom_permutation_checkpoint.txt
Also make sure tracks.txt has not been changed since the checkpoint was created.
Use:
python3 gescom_exact_m3u_runner.py tracks.txt --start NUMBER --once
For example:
python3 gescom_exact_m3u_runner.py tracks.txt --start 1000000 --once
The attached script builds the media-player command through a shell and uses Python's shlex.quote() when inserting the generated M3U path. fileciteturn0file0L150-L160
For the easiest cross-platform setup:
gescom_current_permutation.m3uvlc from PATH on Windows rather than passing a VLC executable path containing spacesThis avoids unnecessary command-line quoting problems.
This runner does not:
88! permutations finish in a human lifetimeIt does provide a deterministic, repeatable and resumable way to enumerate the permutation space one playlist at a time.
The entire point of Gescom Runner is that the sequence is mathematically enormous while the software needed to traverse it is small.
One playlist is created.
VLC plays it.
The checkpoint advances.
The next playlist is created.
And the process continues.
Gescom MiniDisc: same tracks, different order, every time.
10 commits
Python
100.0%