Skip to content

Releases: UnknownSuperficialNight/RhythmiRust

Version Release; 0.3.0

29 Jan 02:44

Choose a tag to compare

Warning

RhythmiRust does not support going back to previous versions there may be breaking changes and backwards compatibility is not guaranteed

Caution

If you are updating from version 0.2.0, please execute the migrate_config inside the config directory to upgrade the database.
Configs are located at:

  • Linux: $XDG_CONFIG_HOME or $HOME/.config/RhythmiRust_config
  • Windows: {FOLDERID_LocalAppData}/RhythmiRust_config or C:\Users\<YourUsername>\AppData\Local\RhythmiRust_config
  • Default: Next to the .exe in folder RhythmiRust_config.

🎵 RhythmiRust Updates - 0.3.0 (2026-01-29 10:35)

Commit Statistics

  • 87 commit(s) contributed to the release.
  • 120 day(s) passed between the first and last commit.
  • 84 commit(s) parsed as conventional.
  • 0 linked issue(s) detected in commits.
  • 120 day(s) passed between releases.
Changelog

🚀 Features

Add SampleRate, ChannelCount, and Bitrate columns and integrate them into the duplicate detector

  • Add SampleRate, ChannelCount, and Bitrate columns to store song properties
  • Implement from_database function in SongProperties to fetch SampleRate, ChannelCount, Bitrate, and Length in a single query
  • Update the duplicate detector to use from_database with a fallback to probing the file and reading its headers
  • Enable metadata extraction to accept a parsed file, avoiding redundant file reads

Add cache-on-demand to the duplicate detector

  • Add cache-on-demand for fingerprints, allowing computed fingerprints to be computed once then cached in the search database and re-used, cutting down compute time and all future compute time
  • Use Brotli compression and decompression for fingerprints, reducing their size by 75% on average
  • Add cached_fingerprint column to hold the compressed fingerprint
  • Add a helper function bytes_to_human_readable_binary to convert bytes to more useful sizes
  • Add deletion tracking so when the duplicate detector removes duplicates in CLI, it will print how many gib/bytes etc were saved
  • Handle Blob data type in the metadata editor to display information about the blob

Add progress tracking and enhance display bar functionality

  • Add progress tracking for spotify
  • Improve progress bar by incorporating text inside the bar itself for easy readability
  • Display exact numbers (processed/total) and percentage alongside the text in the progress for more verbosity

Duplicate Detector can now run without blocking the regeneration

  • Since the Duplicate Detector is not changing anything while processing we dont need to block the regeneration/song imports thus we allow both to happen at the same time
  • Remove debug print statements
  • Fix some documentation spelling
  • Increase the Metadata Editor processed message from 3 to 10 seconds

Add Deduplicate UI and settings

  • Add De-duplicate UI
  • Implement 5 setting profiles ranging from Very-Fast to Thorough to the Duplicate detector
  • Add De-duplicate start button to start deduplication without the entire download process
  • Improve the tracking of the download process and deduplication process
  • Enable bitrate to be factored in what song to keep in the duplicate detector

Improve dupedetector and redesign similarity algorithms

  • Replaced the existing hashing algorithm with a new, improved algorithm to enhance accuracy and reduce collision rates
  • Optimised overall processing for better performance on large datasets
  • Audio fingerprinting uses song properties to assist with weighting
  • Check for corrupted properties before processing
  • Refactored: n-gram ranges to allow greater control and support word (token) n-grams for long filenames
  • Queue tasks to threads for even load distribution, preventing idle threads while others finish
  • Removed length-adjusted threshold and numeric penalties from matched strings; audio fingerprinting will catch string false positives
  • Factor in song properties when deciding which song to keep

Init implement audio fingerprinting and simplify some audio backend code

  • Remove dupedetect as a separate crate and move it to the main program
  • Clean-up FFmpegSource it now apon creation summons a child FFmpeg process rather than hooking into one summoned outside the Source
  • Implement fallback to FFmpeg decoding for file audio formats that fail to natively decode for the audio fingerprinter

Add tooltips to all 3 sliders in the Music Player

Add warning to the Advanced Settings -> Cache

Add Add all songs as an alternative to Shuffle and add all

  • Hold Shift to change the Shuffle and add all to Add all songs this will add all the songs sequentially, bypassing the shuffle

Add external Deno JavaScript runtime required for YouTube

  • Integrate Deno, a secure runtime for JavaScript, into the commands to fully support downloading with YouTube
  • Include detection of Deno installation system-wide to ensure proper setup

Migrate from glow to wgpu and add Backend Info to the About page

  • Remove glow and instead use wgpu enabling support for more backends (vulkan, gles, dx12) and improving performance, particularly in complex scenes
  • Introduce a Backend Info dropdown on the About page to allow users to view the current renderer and backend in use

Add inline edit of values and columns in the Favourites menu

  • Middle-Click on a Value or a Column in the Favourites menu to edit it
  • Middle-Click on the edit bar in the favourites to close it
  • Favourites default column is now generic
  • Improve update_table_schema function to allow for advanced options like inserting a row by default apon table creation or not
  • Add generic database functions sqlite_set_column_value and sqlite_rename_column
  • Add a generic notification function to print errors in CLI and GUI

Add Metadata Errors List to show any songs that are corrupted

  • Add pending_removal_action_errors to store errors caught during processing of embedding metadata
  • Add UI for showing any errors caught while embedding
  • Add Clear All button to clear/ignore all errors

Add WordExact and Sanitise terms for GLOB

  • Add WordExact this combines WORD search with EXACT search (Example: '"Case-sensitive-term"')
  • Sanitise GLOB to map unsupported characters '*' | '[' | ']' to '?' to not ignore these characters still matching characters before and after said invalid character
  • Remove COLLATE NOCASE as does not apply to LIKE operators
  • Add better search debug support displaying Parameters alongside the Query itself
  • Add parse_into_match_type to remove duplicated code
  • Remove sanitising escape characters before parsing expressions (this caused malformed strings when using other operators)
  • Move sanitising escape characters to parse_into_match_type this allows the correct sanitisation to happen per term

Add modification_date, epoch parser and maintainability cleanup

  • Add modification_date to be cached and compared via Regenerator to automatically detect file changes with no user intervention (this includes any file modifications being detected)
  • modification_date is updated automatically apon every edit
  • Standardise DESIRED_COLUMNS, DESIRED_COLUMNS_LENGTH, INSERT_DIR_DATA_BASE_QUERY, ENABLED_COLUMNS, DISABLED_COLUMNS and DESIRED_METADATA_COLUMNS_INT to all be generated based on DesiredColumn enum
  • Use DesiredColumn as one source of truth for all metadata and search related code (this includes everything being generated from it during compile time to help maintainability)
  • Use strum macros to help add nonstandard implementations to enums like count and iteration over enums
  • Dynamically construct all SQL queries that use DesiredColumn dynamically to ensure type safety across all insertions and database operations and type safety at compile time
  • Add parse_date_to_epoch to support multiple standard date formats and convert them to epoch when searching the modification_date column
  • Move some static SQL statements to a constant to be reused and improve maintainability
  • Standardise PROTECTED_TABLES and PROTECTED_TABLES_PERMANENT_RM to be generated based on a SqliteProtectedTables enum at compile time
  • Add column range checking for the Rating field in Metadata Editor
  • Add dd/mm/yyyy epoch to date parsing in Metadata Editor to show modification_date in a human-readable format.
  • Update bulk updates for Metadata Editor to construct full_paths once per song rather than twice

Add compile time generated Git Stats and display them in the About page

  • Add a build script to generate Git Stats and dump the raw structure to disk
  • Import the raw stats structure into a constant at compile time
  • Add Git Stats dropdown in the about page
  • Add Total Project Stats and Commiter/User dropdowns in the Git Stats
  • Display various stats on the total codebase and per-user statistics

Add toggleable columns to the Metadata Editor

  • Add Columns popup to allow toggling of columns in the Metadata Editor
  • Default to common columns in the Metadata Editor making uncommon ones opt-in
  • Add individual column resets for the Column menu

Add 16+ rating option

  • If the song has a higher rating than the standard 0 to 15 range then highlight the 16+ text to indicate a higher rating

Notifications now take the saved theme shadow colours into consideration

  • Notifications colours will be loaded apon program startup
  • Notifications colours will be updated with shadow colours when the use s...
Read more

Version Release; 0.2.0

01 Oct 07:06
3710a48

Choose a tag to compare

Warning

RhythmiRust does not support going back to previous versions there may be breaking changes and backwards compatibility is not guaranteed

Caution

If you are updating from version 0.1.8, please execute the migrate_config inside the config directory to upgrade the database.
Configs are located at:

  • Linux: $XDG_CONFIG_HOME or $HOME/.config/RhythmiRust_config
  • Windows: {FOLDERID_LocalAppData}/RhythmiRust_config or C:\Users\<YourUsername>\AppData\Local\RhythmiRust_config
  • Default: Next to the .exe in folder RhythmiRust_config.

🎵 RhythmiRust Updates - 0.2.0 (2025-10-01 04:14)

Commit Statistics

  • 58 commit(s) contributed to the release.
  • 78 day(s) passed between the first and last commit.
  • 58 commit(s) parsed as conventional.
  • 0 linked issue(s) detected in commits.
  • 78 day(s) passed between releases.
Changelog

🚀 Features

Add download repo link to the about section

Create new audio stream per song for bit-perfect playback

  • Implement dynamic sample_rate and channel_count when building streams, allowing playback of any sample rate or channel count (e.g., 6 channels, not just stereo)
  • Optimise seek performance for the fallback Opus decoder
  • Redesign music player backend: now creates a new stream for each song, ensuring the stream matches the song's properties (previously, a single stream was reused at 44.1kHz stereo)

Default to using 48 kHz sample rate

  • Default it was using 44.1 kHz now forced 48 kHz on stream creation

Add Ctrl+Shift functionality for cell selection in Metadata Editor

  • Implemented logic to select matching cells based on the starting cell when Ctrl+Shift is pressed, allowing for more efficient selection
  • Used eq_ignore_ascii_case for case-insensitive comparison of cell values
  • Optimized by locking selected_cells once before the loop to reduce overhead

Add !! syntax support for Column Searches

  • Support queries like (language:!!) to find rows where the language column is NULL
  • Searching for any non-null value is done with (language:)

Add Enter to search to the Metadata Search bars

Set edit bar value when selecting a single cell in the Metadata Editor

  • Selecting one cell now updates the edit bar to that cell's value
  • If multiple cells are selected, the edit bar resets
  • This improvement makes it easier to add to a pre-existing value without needing to retype the entire text

Implement search fields for Folder and Song, and add shortcut for quick song access in metadata

  • Added Folder and Song search fields to filter metadata effectively
  • Enabled right-click functionality on the rating button for quick access to the song in the Metadata Editor

Increased the maximum volume AGC can go to

  • AGC (Automatic Gain Control) can now go to a max amplitude of 7 from 5

Added Commandline Arguments and download-headless

  • Added a commandline parser to handle commandline arguments
  • Added download-headless or -d argument to execute the downloader directly without GUI (Good for scripts)

Add tracking for seekbar state

  • Seekbar will now be remembered and remain in the same state apon next restart

Cleaned up the UI to be more consistent

  • Now buttons try to fill the available width to make everything look tidier

Add controls for speed via keyboard

  • Added Ctrl+ArrowKeys to control speed via the keyboard

Discord RPC status_display_type to show the current playing song

  • Show the current playing song on server lists instead of the
    application name

Implement Discord RPC progress bar

  • Add state storage fields to DiscordRpcClient to remember last RPC parameters
  • Add update_timing_only method that reuses stored state to avoid code duplication
  • Add TimeUpdate variant to RpcUpdateType enum for timing-only updates
  • Modify custom_rpc to accept update_stored_state flag controlling state persistence
  • Update execute_once to handle TimeUpdate variant and process timing updates
  • Enable Discord progress bar updates when users seek to different song positions
  • Remove the old timer based method

Add on_hover tooltip for the Rating Popup

While Song Rating is processing colour it in yellow

  • While Song Rating is writing the rating to database and embedding into the song colour the button in yellow until processing is finished

Implement a user_rating option in the Music UI

  • Added logic to the Music Player UI to allow users to set a rating for a son
  • Stored the current song rating in a UI data structure
  • When a user clicks on a rating button, the rating is updated in the UI and a background thread is spawned to update the database and metadata
  • Displayed a popup menu when a user clicks over the rating button to allow them to choose a rating
  • Added logic to prevent the user from setting the rating while its setting a previous one

Add 7 more IMAGE_EFFECTS

  • Add (SoftDiagonalGlitch, CrystalShatter, PlasmaEnergy, FractalTessellation, LiquidMetalFlow, GeometricTunnelsGlitched3D, WaveInterference)

🐛 Bug Fixes

Propagate errors for failing set user_rating in the metadata

  • GUI notification for user_rating failing using the rating button
  • Propagate errors up from the metadata backend to let the UI handle the notification
  • Skip songs if they fail to (open,parse,load)
  • Rename notification for search cache generation
  • Import thiserror zero-cost abstraction crate

Implement fallback for audio stream creation

  • The audio stream will attempt to match the song sample_rate and channel_count but if your system is old and does not support either then it will fallback to whatever your system supports
  • Add debug for audio stream config

Increase the allocation limit for metadata to 256MB

  • Before it was not applying this increase from the default 16MB to 256MB allocation increase on each thread thus causing errors importing large music files

Metadata Search was locking up apon a search that had multiple matches

  • It was killing the metadata thread when finding multiple results and no exact or case-insensitive matches
  • Now it handles ambiguous matches without killing the thread

Implement case-sensitivity matching on Metadata Search and resolve panic apon available_tables acquisition

  • Background thread was acquiring the available_tables and causing a potential panic
  • Match quick search terms in order of (case-sensitive) -> (case-insensitive) -> (len == 1)

Execute a search upon refresh after saving in the Metadata Editor

  • The Metadata Editor refreshes the tables after saving, but it was not applying the search. This change triggers the search again to ensure the displayed results are updated

file_watcher was not killing the previous thread

  • file_watcher was not killing the previous thread when the user changed targeted directories
  • file_watcher was not waiting for the previous thread to die thus causing 2 threads to spawn and undefined behaviour

Windows subsystem crate updated

  • windows-sys updated and broke down some features into seperate feature flags thus i need to import Win32_System_Threading

Update Discord RPC to reflect playback speed

  • Adjusted the update logic to account for song playback speed
  • Ensures Discord RPC remains accurate, preventing drift from the actual playback speed
  • Triggers an update every 2 seconds only if the playback speed differs from the default (1.00)

Prevent Discord RPC from overwriting queued song title updates

  • Implemented a check to disable the seekbar updates in Discord RPC when a song title update is queued
  • This ensures the song title is updated before allowing any seekbar edits

Spelling mistake and remove currently playing suffix

  • Fix spelling mistake on GUI duplicate_finder_and_batch_remove
  • Remove (Currently Playing) suffix
  • Add 15 second timeout to database transactions for downloader incase the user skips a song

Rework metadata regeneration to not panic and handle smoothly

  • Remove all edits to a table if it just got queued for regeneration (No point queueing edits when there is nothing to edit as its regenerating)
  • Disable the central UI to prevent editing tables that are queued for regeneration
  • Logic is purely event based for efficiency

Rename default download argument values to fit the new standard

Preserve special columns in escape_special_characters

  • Previously, special characters in column names like user_rating were escaped, breaking search. Now these columns remain unchanged to keep them queryable

Offset 'Song Rating' button to not overlap with the scrollbar

  • Scrollbar was slightly overlapping the Song Rating button causing it to be slightly harder to click

soft_diagonal_glitch was not accounting for the entire image

  • Changed diagonal_range from -(height - 1)..=(width - 1) to -(width - 1)..=(height - 1)
  • Ensures all diagonals are processed, including those covering the top-right corner
  • Fixes issue where top-right part of the image was previously unaffected

Add better error handling to tagged_file instead of a panicking

Give Backend Panel its own unique ID and clean up the UI

🔧 Maintenance

Add compile script to fully automate release compilation

  • Add a gitignore rule to prevent commiting the release builds
  • Add Compile.sh script for automated compilation, uploading to VirusTotal, and changelog/readme generation

Clippy fixes

📎 Other

Add error handling if a ta...

Read more

Version Release; 0.1.8

23 Sep 04:25
fa65aad

Choose a tag to compare

Warning

RhythmiRust does not support going back to previous versions there may be breaking changes and backwards compatibility is not guaranteed

Changelog

🎵 RhythmiRust Updates - 0.1.8 (2025-07-15 03:20)

🚀 Features

Add backend_debug menu with fps

  • Added a new debug menu to show fps and toggle Continuous mode

Implement window toggle state tracking

  • Windows should now open to the last state they were in apon restart
  • Add writing last window states apon program exit

Add a button to delete the Wiki

  • Add the options to delete the wiki through the advanced settings ui in
    the dependencies section

Implement Spacer for the wiki

Improve scache regeneration and file watching

  • Add mid-execution stop capability to regenerate_scache and file_watcher
  • Allows users to change target search directory while scache is being generated and seamlessly switch to new directory
  • Improve memory usage by decoupling notify thread from main struct

🐛 Bug Fixes

Prevent file watcher from blocking GUI rendering on startup

  • The file watcher was initialised on the main thread, delaying GUI
    updates during directory indexing specifically on application startup.
    This resulted in a slow startup experience under heavy I/O conditions.
    Initialised watcher on a background thread.

Update release_time for automatic_gain_control

  • AGC release_time is now step to 0.0 from 0.0001 to ensure the gain
    can always lower itself when needed

Potential panic when rendering selected_table_data

  • Potential panic when rendering selected_table_data as the len and
    data itself could be out of sync for one frame on the ui thread

📎 Other

Add explicit error handling for the watcher

  • Add error handling and print error statements if the watcher cannot
    get system recommendations or access to the underlying file system
  • Remove Result type returned from the start_directory_watcher
    function

♻️ Refactor

Comment out redundant debug lines

⚡ Performance

Use internal image extraction for standalone album art

  • Now use internal image extraction for album_art directories or files
  • This allows a image import speed increase of 90.16%
  • Reduction = (2100 ms - 206.7 ms) / 2100 ms * 100 = 90.16% speed increase for 3000x3000 image

Version Release; 0.1.7

23 Sep 04:24
fa65aad

Choose a tag to compare

Warning

RhythmiRust does not support going back to previous versions there may be breaking changes and backwards compatibility is not guaranteed

Changelog

🎵 RhythmiRust Updates - 0.1.7 (2025-06-08 06:18)

🚀 Features

Add trimming to wiki renderer for improved text formatting

  • Previously, the wiki required careful formatting around buttons and highlighted text to avoid double padding due to the buttons' padding
  • Now, trimming allows for consistent formatting, ensuring that both options work correctly without extra spaces

Move the active button to the right of the dropdown

  • This makes it easier to enable and disable keys without opening the
    dropdown

Enable regeneration of selected tables in the metadata editor

  • Users can now right-click on a directory or table to add it to the regeneration queue
  • The regeneration task will be processed later, allowing for a full refresh of all values in the database for the selected tables

Add album_artist and artists columns

  • Added album_artist and artists columns to metadata storage, allowing for more granular search and filtering capabilities
  • Implemented duplicate removal comparisons to ensure unique data in each column (album_artist, artists, artist), improving search efficiency and data analysis
  • Updated metadata editor to allow writing to new columns, enabling users to edit and manage album_artist and artists information

Implement override_album_art

  • Implemented two types of album art: override_album_art and album_art, where:
    • override_album_art takes priority over all other album art, including embedded images
    • album_art is used only when no embedded image is present, allowing for a balance between user preference and original metadata

Parse year from metadata with a backup of ORIGINALYEAR

  • If the standard year keys are not present in the metadata then look for a
    ORIGINALYEAR tag

Implement Speed Control for music playback

  • Add speed_bool in the database to manage speed control UI visibility
  • Implement slider for adjusting playback speed
  • Enable dynamic setting of playback speed

🐛 Bug Fixes

Mismatched lifetime syntax warning

Update the frame when the user loads a new table

  • Before to see updates the user would need to move their cursor to
    update the screen

Ignore error when no table is selected

  • Prevent application crash when "Save Changes" is pressed with no table selected

Enhance error handling for metadata extraction

  • Update the error handling logic to avoid panicking
  • Print the error message to stdout and continue the execution

Print error when adding a font region that is empty

Paused state not showing properly when stopping music

  • When the user pauses a song then hits the stop button to clear all
    songs the pause state now returns to the unpaused state

Ensure add menu closes when editing the font menu via right click

Resolve a issue with using direct URLs

  • Using direct urls like https://www.youtube.com/watch?v=xxxxxxxxxxx
    would not get the url instead returning N/A

Refactor audio extraction functions to handle errors gracefully and avoid redundant code

Optimize downloader scrollarea (2 less redundant variables)

Fix the scroll_to_top not working for the favourites ui

Add tooltip to the downloaders precedence order

Clearing UI memory no longer resets the Hidden windows feature

🔧 Maintenance

Upgrade version to 0.1.7

Updating lock file

Clippy fixes

  • Added more clippy lints

Update all deps

Clippy suggestions and check length on album_artist

  • album_artist now check the length to ensure it does not set to null if there are more than 1 person in the column

Update all dependencies

Update dependencies

📎 Other

Add unique constraint to directory table and increment file processing counter

  • Add UNIQUE constraint on (name, ext) in directory table to make deduplication less strict
  • Increment files_processed counter starting from 1 for accurate
    tracking

♻️ Refactor

Improve the Web Codec Checker to now have a loading spinner

  • Before this there was no indication that the Web Codec Checker is
    running

Reorganize the entire downloader ui to be easier to work with

Move metadata table data refresh to background thread

  • Moved metadata table data imports to a background thread
  • Prevents blocking the render thread for better/smoother performance

Organise the settings ui code

  • The code is now split into a structure

Remove redundant debug downloader statements

Add support for adding more fonts and UI tweaks

  • Quality of life upgrades regarding font UI interaction
  • Add support to add more fonts regions
  • Add support to remove font regions

Use escape characters instead of hashtag

  • Use escape characters to minimize potential
  • Rename variables and refactor the download args to make more sense
  • Increase the minimum size of the music window to not be able to go out
    of bounds

⚡ Performance

Migrate from pcm_s16le to pcm_f32le

  • Temporarily use the music library main branch to get the newest
    changes
  • Use the new OutputStreamBuilder to get stream_handle and make the
    sink
  • Use the new DecoderBuilder to manually build a decoder with hints
    for faster playback initialization and with seekable
  • All sources were assumed seekable now with_seekable or Decoder::try_from is needed to
    enable seeking

Allow passing a TaggedFile to avoid redundant file reads

  • Enables the use of an already parsed TaggedFile to retrieve metadata fields without reading and parsing the entire song file again
  • Optimizes bulk retrieval of individual metadata fields, reducing the number of file reads from three to one
  • Maintains previous behavior when a &str is passed, which involves reading and parsing the file before retrieving a metadata field

Version Release; 0.1.6

23 Sep 04:13
4921ded

Choose a tag to compare

Warning

RhythmiRust does not support going back to previous versions there may be breaking changes and backwards compatibility is not guaranteed

🎵 RhythmiRust Updates - 0.1.6 (2025-05-07 15:25)

🚀 Features

Add song play count tracking to database

  • Create database module for storing play statistics and integrate
    tracking when songs are played
  • Increase the allocation limit for imported music metadata
  • Make sure the name column in SCache is unique to ensure the correct
    state at all times

Add 'played' column to Search database

Implement using the original image size if no size is specified

Implement automatic deletion of outdated wiki

  • Ensure that the wiki is deleted when its version does not match that of the main program, prompting users to download an appropriate wiki version whether upgrading or downgrading

Add toggle in Image Settings to save generated background images

  • Adds a toggle to enable saving generated background images to disk
    (save location: Config directory) This feature allows users who prefer a certain effect to save it as a standalone image

Add the Contributing section to the about page

🐛 Bug Fixes

Prevent underflow on the seek value

  • If the time was 3 seconds and the user pressed the arrow keys to go
    back it would set the value to -2 thus the underflow would incorrectly wrap around to the max_value finishing
    the song

Unload wiki in all circumstances where it is not being rendered

  • Pass ctx to metadata editor button for state management
  • Unload wiki when entering metadata editor and debug for proper rendering control

🔧 Maintenance

Update version number to 0.1.6

  • Update program version number
  • Add missed imports for windows

Update all deps

Add Cross.toml to compile with a older glibc for linux

📎 Other

Update deps and add static flag to xz2 for linux

♻️ Refactor

Move wiki instance into WikiMain and add downloading state

  • Wiki is now accessed directly instead of its parent struct
  • WikiMain now has a downloading_wiki value to track if a download is
    occurring

Improve the metadata editor, readers, writers

  • Implement read/writing from all editable columns
  • country|release_type|tags|user_ratings|user_notes now all read/write their values as metadata entries to the file itself
  • Remove the ability to edit the length column
  • Implement parsing as integers rather than parsing all fields as strings

⚡ Performance

Implement native image extraction from audio files

  • Implement native image extraction from metadata
  • Resize image maintaining aspect ratio using the native image extraction
  • Fallback to the previous ffmpeg based extraction if a image fails to be extracted natively

Allow multiple of the same image to be loaded in the wiki while keeping size constraints in mind

  • Adds the ability to add multiple instances of the same image with different sizes on one wiki page.
  • Reduces memory usage by storing only one copy of the image and resizing it as needed, preventing the use of three copies of the same image in memory.
  • Optimizes image resizing by performing it during the rendering phase rather than during texture loading.

Version Release; 0.1.5

23 Sep 04:03
fa65aad

Choose a tag to compare

Warning

RhythmiRust does not support going back to previous versions there may be breaking changes and backwards compatibility is not guaranteed

🎵 RhythmiRust Updates - 0.1.5 (2025-04-19 04:20)

🚀 Features

Show the notifications while on the wiki page

Added wiki downloader

  • Improved linux dep extractor
  • Added function to download the wiki from github if its missing
  • Added is_valid_disk function to wiki to check if the wiki still exists
  • Added download button to download the wiki if its missing

Add reset_time parameter to Discord RPC updates and handle it in relevant functions

Add the ability to toggle selected UI off and on based on program focus

  • Added option in the settings to select windows to toggle on or off
    based on if RhythmiRust is focused or not

Add ui to metadata_editor to show tables and show data

  • Clean windowvisibility bools to a cleaner option
  • Add table querying to metadata_editor_ui
  • Add table column viewing to metadata_editor_ui
  • Add selection/removal from metadata_editor_ui
  • Add multiple selection in metadata ui via Shift + left click
  • Better rendering for top_pannel

Add file watcher debounce mechanism

  • Introduce a 15-second debounce period to ensure updates are triggered only after a period of inactivity

Add notifications to the GUI and disable manually starting regeneration button while active

  • Disable manual start of regeneration while active
  • Add checks to prevent restarting a regeneration function if it's
    already running
  • Introduce UI notifications
  • Prevent the regeneration function from being executed while it is
    already running
  • Prevent users from manually starting the regenerator if it's running
    already

Add notify dependency and update search performance logging

Add support for notify_file_watcher and improve db_search functionality

  • Introduced notify_file_watcher function to trigger database generation upon file additions/removals/renames in the target directory. It watches the directory for events and triggers the database generation when files are added, removed, or renamed
  • Fixed issues in db_search function to ensure proper functionality and compatibility with legacy search terms
  • Improved db_search to match legacy search functionality and extend it
  • Added regenerate_search_db option in the settings UI for manual database regeneration; primarily triggered by the file watcher
  • Ensured compatibility with both legacy searcher and database searcher when using prune history

Implement SQLite-based search with case-sensitive options

  • Added database search functionality
  • Implemented case-sensitive search for quoted terms using COLLATE BINARY
  • Support for empty search to return all songs
  • Added syntax for field-specific searches with comparison operators
  • Support for time format parsing (e.g., 3m20s, 2h30m)
  • Implemented multi-shuffle functionality for combining search results
  • Added threaded search to prevent UI blocking
  • Support for fallback to legacy file system search when needed

Added toggle for legacy_search and fixed import error pushed in (f4f898d437b99b2a9aa11ba0bd7d0fa6316101ad)

  • Added a new configuration option use_legacy_search_bool to control the search method
  • Refactored scache generation into its own file
  • Fixed import error push accidentally in f4f898d437b99b2a9aa11ba0bd7d0fa6316101ad

Add Lofty crate for audio metadata extraction

  • Added lofty crate to project dependencies and updated Cargo.lock
  • Created new ffmpeg module in music_player to handle audio extraction
  • Implemented metadata extraction (duration, sample rate, channel count) using Lofty
  • Updated database functions to utilize Lofty-extracted metadata
  • Added ffmpeg-based fallback for all applicable Lofty extraction functions

Setup groundwork/database for redesigned search engine

  • Refactor database connections and table creation for download and search caches
  • Update connection and table names accordingly

Add StringExtensions trait and implementation for uppercase first letter

  • Implemented the StringExtensions trait to hold custom methods for Strings
  • Implemented uppercase_first_letter for the String type in StringExtensions
  • Updated user profile downloader to uppercase the first character of the Playlist name

Updated downloader to support playlist download from user profiles on YouTube and SoundCloud

  • Refactored download_and_cache function to handle user profile URLs (YouTube, Soundcloud)
  • Implemented logic to create tables and insert data based on URL type
  • Added download_support_functions module to hold database and support
    function for the downloader
  • Updated project version to 0.1.3

Improve audio decoding and buffer management logic and support all channel configurations

  • Extract and use sample_rate and channels from the source/iterator to ensure correct playback calculations and quality.
  • Rewrite buffer refill logic using a Just-In-Time (JIT) approach, ensuring efficient buffer space utilization before refilling.
  • Add detailed comments in the source code for better understanding of the algorithm and its optimizations.
  • Move temp buffer allocation outside of the loop to the source struct, ensuring it's only allocated once and reused appropriately.

Reimplement fallback audio decoding, resolve UI inconsistencies, and add dark mode support

  • Audio Decoding: Completely rewrote the fallback audio decoding mechanism to dynamically use ffmpeg for unsupported audio formats. This approach uses ffmpeg to decode and stream raw audio directly into the program, using a buffer to manage playback. When the buffer fills up, the stream pauses until more data is available
  • UI Consistency Fixes: Fixed an issue in the downloader UI where codec options were incorrectly displayed in the executable dropdown menu
  • Dark Mode Support: Implemented forced dark mode for the GUI, overriding system preferences to ensure consistency across different devices
  • Runtime Optimizations: Removed overhead of ffmpeg_path creation instead store the value in the global config and reference it

Implement dynamic step size with linear decrease curve for volume slider

  • Volume slider should now get more precise the lower it goes

Add Misc column to dynamic fonts in settings

Use ROWID to maintain item order

  • Updated query to include ORDER BY ROWID so items in the favorites menu appear in the order they were added.

Improve UI updates and optimize database interactions

  • Favourites menu now queries the database only once and stores values in a Vec, reducing redundant queries.
  • Added update_ui mechanism to refresh the UI by reading data from the database when necessary (e.g., switching columns, adding/removing values).
  • Ensured proper handling when the currently viewed column is deleted by automatically selecting another column and updating the UI accordingly.

Added the ability to right-click to copy URL to clipboard

  • Right-click allows users to copy the URL to the clipboard for convenience.

Optimize font handling and improve dynamic font management

  • Changed font_data from a serde_json::to_string at runtime to a const or static JSON data to reduce runtime overhead.
  • Updated dynamic font loading to use fonts: &mut FontDefinitions instead of passing FontDefinitions directly.
  • Refactored font structure:
    • Removed the impl block and introduced a new DynamicFontsMain structure with #[derive(Deserialize, Serialize, Debug)].
    • Added a Default implementation for DynamicFontsMain.
  • Added a check to ensure dynamic fonts are enabled before attempting to import them.
  • Restructured toggles for each language:
    • Added a right-click dropdown edit menu to modify individual fonts and region names.
    • Added right-click on the opened dropdown to close it.
    • Included a save button to apply changes.
  • Introduced a global variable for needs_serialization instead of using a temporary variable in the update loop.

These changes improve performance, simplify font management, and add the user interface for font editing.

Add dynamically loaded system fonts with per-alphabet enablement in settings

  - Add runtime support for dynamically loading fonts
  - Implement user customization based on language
  - Refactor menu button implementations to reduce code duplication and improve maintainability

Add directory support to album art search and simplify image loading

  • Add directory support for album_art allowing multiple images for the same folder
  • Simplify image loading logic by consolidating into shared function reducing redundancy

Improve YT args editor UI and add cache controls

  • Redesign YouTube args editor from dropdown to labeled buttons
  • Convert button labels to display arg descriptions
  • Replace RGB values with color constants
  • Add Clear Cache button for downloader reset
  • Add hover tooltips to buttons

Add Memory section and window reset functionality

  • Add Memory section to settings menu
  • Add window reset functionality to Memory section
  • Add ResetUI variant to AppState enum for handling reset process
  • Reorganize WindowVisibilitySettings enum in logical order
  • Reorder settings buttons to match enum order
  • Define window size as Vec2 constant

Settings menu order:

  1. Config (core settings)
  2. Memory (layout/persistence)
  3. Keybindings (input)
  4. Colours (visual)
  5. Image (feature-specific)
  6. DiscordRPC (external)
  7. About (info)

Update dependencies and implement breaking changes

  • Update all dependencies
    -...
Read more

Version Release; 0.1.1

23 Sep 03:59
fa65aad

Choose a tag to compare

Warning

RhythmiRust does not support going back to previous versions there may be breaking changes and backwards compatibility is not guaranteed

🎵 Music Player Updates - v0.1.1 (23/01/2024)

Discord Integration Fixes

  • 🔧 Discord RPC Improvements
    • Fixed program crash when Discord is not installed
    • Added graceful error handling for Discord connections
    • Application continues to run normally when Discord is unavailable

Technical Optimisations

  • 🚀 General Improvements
    • Various code quality enhancements
    • Minor performance optimisations

Version Release; 0.1.0

23 Sep 03:58
fa65aad

Choose a tag to compare

Warning

RhythmiRust does not support going back to previous versions there may be breaking changes and backwards compatibility is not guaranteed

🎵 Music Player Updates - v0.1.0 (07/02/2025)

Discord Integration

  • Discord Rich Presence added
    • Display current playing track in Discord status
    • Automatic updates on song changes and playback states
      • Configurable status display format
        • Added customisable delimiters for song detail splitting
        • Option to hide pause/idle status messages
        • Privacy option to hide current song information
    • Toggle feature in settings
    • Improved Windows performance with optimised reconnection handling
      • RPC connection now only attempts reconnection when actually disconnected
      • Moved to dedicated thread for improved performance
      • Enhanced RPC update handling
        • Implemented consistent 5s update interval
        • Prevented potential rate limiting from rapid state changes
        • Renamed Discord invite to "Get RhythmiRust"

Favourites System Overhaul

  • 🔄 UI/UX Improvements
    • Redesigned page viewing system
      • Switched to single-page view for optimised memory usage
      • Implemented efficient page navigation controls
      • Reduced memory footprint by loading one page at a time
    • Streamlined entry management
      • Added direct "Add New Entry to Current Page" option
      • Simplified navigation with compact top panel design
      • Eliminated need for page scrolling when adding entries
      • Refactored top panel UI to be more sleek and clean
    • Enhanced user workflow
      • More intuitive category management
      • Faster entry addition process
      • Improved overall navigation experience

Album Art Improvements

  • 🎨 Image Handling Enhancements
    • New randomiser option added to Image Padding Mode
    • Customisable randomiser effect pool
      • Users can enable/disable specific effects
    • Multi-threaded texture computation
      • Texture processing moved to separate thread
      • Eliminates UI freezing during album art loading
      • Smoother performance through asynchronous texture handling
    • Fixed soft_horizontal_glitch boundary issues
    • Improved memory efficiency in image rendering process

Settings Refinements

  • ⚙️ Interface Streamlining
    • Combined "Retain Images" and "Auto-Hide art on Music Stop" settings
    • Reorganised image-related settings for better accessibility
    • About section Header is now shaded
    • Args editor UI overhaul

Playback Controls Enhancement

  • ⌨️ New Keyboard Controls
    • Volume adjustment with Arrow Up/Down
      • 5% increments (0-200% range)
    • Track navigation
      • Page Up to skip to next song
    • Seeking controls
      • Left Arrow: -5 seconds
      • Right Arrow: +5 seconds

Platform-Specific Fixes

  • 🖥️ Windows Compatibility
    • Fixed downloader functionality for Windows systems
    • Resolved Spotify integration issues on Windows
    • Improved overall Windows performance

Database Optimizations

  • 🚀 SQLite Performance Enhancements
    • Implemented connection pooling optimizations
      • Improved connection reuse and management
      • Reduced redundant connection creation
      • More efficient connection lifecycle handling
    • Added SQLite PRAGMA optimizations
      • Enabled WAL mode for better concurrency
      • Configured 20MB cache size
      • Set memory-based temp store
      • Limited journal size to 1MB
      • Enabled memory-mapped I/O (16MB)
    • Memory usage improvements
      • Reduced binary size with const error messages
      • Optimized string allocation in error handling
      • Better memory management for database operations

Configuration System Improvements

  • 🛠️ Enhanced Error Recovery
    • Implemented smart fallback system for invalid configurations
      • System now uses existing struct defaults as source of truth
      • Automatically recovers and repairs invalid JSON configurations
      • Affects: accepted codecs, randomizer effects, Discord RPC, and ambient mode settings
    • Optimized database writes with direct serialization
    • More robust handling of configuration errors

Update System Improvements

  • 🔄 yt-dlp Updater
    • Fixed force update mechanism
      • Updates now apply immediately during runtime
      • No longer requires programme restart
      • More seamless update experience
  • 🎯 Update Screen Enhancement
    • Added humorous "Did you know?" messages during downloads
    • Added shading to the Headers

Technical Optimisations

  • 🚀 Performance
    • Optimised memory management for image handling and fonts
    • Improved temporary variable cleanup during image processing
    • Enhanced HTTP request handling and responses
    • Implemented proper window state persistence
      • Settings and window positions now correctly saved
      • Configurations stored alongside other app data
    • Implemented temporary Spotify API authentication workaround
      • Using alternative authentication method until full API approval
      • Maintains full functionality during transition period
    • Refactored page state tracking from Strings to enums for improved performance
    • Improved database connection management
    • Major codebase restructuring for improved organization
      • Separated structs into logical modules:
        • UI components
        • Application logic
        • Configuration
        • RPC/Network handling
        • Music player
        • Download management
      • Improved code maintainability and navigation
      • Better separation of concerns
      • More scalable architecture for future features

Version Release 0.0.48 (First Public Release)

23 Sep 03:56
fa65aad

Choose a tag to compare

This is the first public release of RhythmiRust I would highly recommend not installing this version get the latest

Warning

RhythmiRust does not support going back to previous versions there may be breaking changes and backwards compatibility is not guaranteed