Add progress bars for long-running item- or album-level operations
- Dominant language
- Python
- Stars
- 15.7k
- Forks
- 2.1k
- Avg merge
- 4d 21h
- Merged PRs (30d)
- 31
Description
### Proposed solution
There are a few Python progress bar libraries for terminal applications, including the popular [TQDM](https://tqdm.github.io/) as well as Enlighten. TQDM is great, of course, but it has the nasty habit of interacting poorly with log lines or other messages sent to STDOUT. [Enlighten](https://python-enlighten.readthedocs.io/en/stable/) handles the terminal output the way one would like it to be done - the progress bar at the bottom, and all the log messages above it with no interaction between the two.
### Objective
See related [discussion](https://github.com/beetbox/beets/discussions/5471)
#### Goals
- Add a progress bar to the bottom of the terminal for most long-running operations, particularly imports and built-in plugins.
- Provide `beets.ui.*` helper functions to make it easy for plugin developers to adopt the same progress bar, and to provide a central place for modifying behavior in the future.
- Reach out to plugin authors to invite them to adopt the progress bar in their plugins.
#### Non-goals
- Reinventing any wheels - we just want to use an off-the-shelf progress bar library, not to develop a new one ourselves.
- World peace
- Free trade
- Enlightenment
#### Anti-goals
- Global thermonuclear war
### Example screenshot

Contributor guide
Research direction
Start with the related discussion and compare TQDM with Enlighten, paying attention to terminal output alongside log messages. Map the long-running import and built-in plugin operations, then define the beets.ui helper API and adoption scope. Done means most targeted operations show a bottom-of-terminal progress bar without disrupting log output, with plugin authors able to use the helpers.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- cli
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100