A terminal-based movie showtime viewer for Kinoheld using the Textual library.
- Displays current movie showtimes fetched from Kinoheld API
- Multiple theater support: configure and view showtimes for multiple theaters simultaneously
- Theater search: search for theaters by city name to find cinema IDs
- Flexible grouping: toggle between grouping by theater or by movie
- Clean, scrollable interface organized by theater/movie and date
- Shows movie titles, durations, and all available showtimes
- Detailed movie information (description, cast, director, genres, ratings)
- Displays special flags (e.g., OMdU for original with subtitles)
- Configurable theaters and filters (global and per-theater)
- Keyboard shortcuts for easy navigation
- Focus navigation between movies
- Modal detail view for each movie
This project uses uv for dependency management. The dependencies will
be automatically installed when you run the application.
uv tool install .Run the application:
uv run kinoheldq- Quit the applications- Toggle sort (by showtimes or release date)g- Toggle grouping (by theater or by movie)f- Search for theaters by cityTab/Shift+Tab- Navigate between moviesEnteror Click - View movie detailsEscape- Close detail modal- Arrow keys / Page Up/Page Down - Scroll through showtimes
Press f to search for theaters by city name. This opens a search modal
where you can enter a city name (e.g., "Tübingen", "Berlin"). The app
will query the Kinoheld database and display matching theaters with
their cinema IDs, addresses, and other details.
To add a found theater to your configuration:
- Note the Cinema ID from the search results
- Edit your config file at
~/.config/kinostar/config.toml - Add a new
[[theaters]]section with the cinema ID and a name
The app uses a configuration file located at
~/.config/kinostar/config.toml (or
$XDG_CONFIG_HOME/kinostar/config.toml).
On first run, a default configuration file will be created automatically. You can edit this file to add multiple theaters.
# Global filter: regex pattern to exclude movies by title (applied to all theaters)
# global_filter = "(?i)(sneak|preview)"
# Theater configurations
[[theaters]]
name = "Kino Museum"
cinema_id = 3625
default = true
# Optional: filter specific to this theater
# filter = "(?i)opera"
# Add more theaters
[[theaters]]
name = "Arsenal Kino"
cinema_id = 1234
# filter = "(?i)some_pattern"global_filter: (Optional) Regex pattern to exclude movies from all theaterstheaters: Array of theater configurationsname: Display name for the theatercinema_id: Kinoheld cinema ID (find this in the Kinoheld URL)default: (Optional) Mark as default theater (currently unused, all theaters are displayed)filter: (Optional) Regex pattern to exclude movies from this specific theater
The application:
- Fetches showtime data from the Kinoheld API for all configured theaters
- Organizes shows by theater and date
- Groups showtimes by movie
- Displays everything in a clean, scrollable interface with flexible
grouping:
- Group by Theater (default): Shows theater sections, with movies listed under each theater
- Group by Movie: Shows movies grouped together, with each theater's showtimes displayed separately as "Movie Name [Theater Name]"
Showtimes are fetched from:
