Releases: UnknownSuperficialNight/RhythmiRust
Version Release; 0.3.0
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_HOMEor$HOME/.config/RhythmiRust_config - Windows:
{FOLDERID_LocalAppData}/RhythmiRust_configorC:\Users\<YourUsername>\AppData\Local\RhythmiRust_config - Default: Next to the
.exein folderRhythmiRust_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, andBitratecolumns to store song properties - Implement
from_databasefunction inSongPropertiesto fetchSampleRate,ChannelCount,Bitrate, andLengthin a single query - Update the duplicate detector to use
from_databasewith 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-demandfor 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
Brotlicompression and decompression for fingerprints, reducing their size by 75% on average - Add
cached_fingerprintcolumn to hold the compressed fingerprint - Add a helper function
bytes_to_human_readable_binaryto 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 etcwere saved - Handle
Blobdata 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 Detectoris 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 Editorprocessed message from3to10seconds
Add Deduplicate UI and settings
- Add De-duplicate UI
- Implement
5setting profiles ranging fromVery-FasttoThoroughto 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 propertieswhen deciding which song to keep
Init implement audio fingerprinting and simplify some audio backend code
- Remove
dupedetectas a separate crate and move it to the main program - Clean-up
FFmpegSourceit now apon creation summons a child FFmpeg process rather than hooking into one summoned outside theSource - Implement fallback to
FFmpegdecoding 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
Shiftto change theShuffle and add alltoAdd all songsthis 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
Denoinstallation system-wide to ensure proper setup
Migrate from glow to wgpu and add Backend Info to the About page
- Remove
glowand instead usewgpuenabling support for more backends (vulkan, gles, dx12) and improving performance, particularly in complex scenes - Introduce a
Backend Infodropdown on theAboutpage to allow users to view the current renderer and backend in use
Add inline edit of values and columns in the Favourites menu
Middle-Clickon aValueor aColumnin theFavouritesmenu to edit itMiddle-Clickon the edit bar in the favourites to close itFavouritesdefault column is nowgeneric- Improve
update_table_schemafunction to allow for advanced options like inserting a row by default apon table creation or not - Add generic database functions
sqlite_set_column_valueandsqlite_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_errorsto store errors caught during processing of embedding metadata - Add UI for showing any errors caught while embedding
- Add
Clear Allbutton to clear/ignore all errors
Add WordExact and Sanitise terms for GLOB
- Add
WordExactthis combines WORD search with EXACT search (Example:'"Case-sensitive-term"') - Sanitise
GLOBto map unsupported characters'*' | '[' | ']'to'?'to not ignore these characters still matching characters before and after said invalid character - Remove
COLLATE NOCASEas does not apply toLIKEoperators - Add better search debug support displaying
Parametersalongside theQueryitself - Add
parse_into_match_typeto 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_typethis allows the correct sanitisation to happen per term
Add modification_date, epoch parser and maintainability cleanup
- Add
modification_dateto be cached and compared viaRegeneratorto automatically detect file changes with no user intervention (this includes any file modifications being detected) modification_dateis updated automatically apon every edit- Standardise
DESIRED_COLUMNS,DESIRED_COLUMNS_LENGTH,INSERT_DIR_DATA_BASE_QUERY,ENABLED_COLUMNS,DISABLED_COLUMNSandDESIRED_METADATA_COLUMNS_INTto all be generated based onDesiredColumnenum - Use
DesiredColumnas 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
strummacros to help add nonstandard implementations to enums like count and iteration over enums - Dynamically construct all
SQLqueries that useDesiredColumndynamically to ensure type safety across all insertions and database operations and type safety at compile time - Add
parse_date_to_epochto support multiple standard date formats and convert them to epoch when searching themodification_datecolumn - Move some static
SQLstatements to a constant to be reused and improve maintainability - Standardise
PROTECTED_TABLESandPROTECTED_TABLES_PERMANENT_RMto be generated based on aSqliteProtectedTablesenum at compile time - Add column range checking for the
Ratingfield inMetadata Editor - Add
dd/mm/yyyyepoch to date parsing inMetadata Editorto showmodification_datein a human-readable format. - Update bulk updates for
Metadata Editorto constructfull_pathsonce 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 Statsand dump the raw structure to disk - Import the raw stats structure into a constant at compile time
- Add
Git Statsdropdown in the about page - Add
Total Project StatsandCommiter/Userdropdowns in theGit Stats - Display various stats on the total codebase and per-user statistics
Add toggleable columns to the Metadata Editor
- Add
Columnspopup to allow toggling of columns in theMetadata Editor - Default to common columns in the
Metadata Editormaking uncommon ones opt-in - Add individual column resets for the
Columnmenu
Add 16+ rating option
- If the song has a higher rating than the standard
0to15range then highlight the16+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...
Version Release; 0.2.0
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_HOMEor$HOME/.config/RhythmiRust_config - Windows:
{FOLDERID_LocalAppData}/RhythmiRust_configorC:\Users\<YourUsername>\AppData\Local\RhythmiRust_config - Default: Next to the
.exein folderRhythmiRust_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_rateandchannel_countwhen 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 kHznow forced48 kHzon 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+Shiftis pressed, allowing for more efficient selection - Used
eq_ignore_ascii_casefor 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
FolderandSongsearch 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
7from5
Added Commandline Arguments and download-headless
- Added a commandline parser to handle commandline arguments
- Added
download-headlessor-dargument 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+ArrowKeysto 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
DiscordRpcClientto remember last RPC parameters - Add
update_timing_onlymethod that reuses stored state to avoid code duplication - Add
TimeUpdatevariant toRpcUpdateTypeenum for timing-only updates - Modify
custom_rpcto accept update_stored_state flag controlling state persistence - Update execute_once to handle
TimeUpdatevariant 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 Ratingis 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_ratingfailing 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
thiserrorzero-cost abstraction crate
Implement fallback for audio stream creation
- The audio stream will attempt to match the song
sample_rateandchannel_countbut 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
16MBto256MBallocation 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_tablesand 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 Editorrefreshes 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_watcherwas not killing the previous thread when the user changed targeted directoriesfile_watcherwas not waiting for the previous thread to die thus causing 2 threads to spawn and undefined behaviour
Windows subsystem crate updated
windows-sysupdated and broke down some features into seperate feature flags thus i need to importWin32_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
15second 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_ratingwere 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 Ratingbutton 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
gitignorerule to prevent commiting the release builds - Add
Compile.shscript for automated compilation, uploading to VirusTotal, and changelog/readme generation
Clippy fixes
📎 Other
Add error handling if a ta...
Version Release; 0.1.8
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
Continuousmode
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.0from0.0001to 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
watchercannot
get system recommendations or access to the underlying file system - Remove
Resulttype returned from thestart_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
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_artandalbum_art, where:override_album_arttakes priority over all other album art, including embedded imagesalbum_artis 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
ORIGINALYEARtag
Implement Speed Control for music playback
- Add
speed_boolin 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 returningN/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_artistnow 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 Checkeris
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
OutputStreamBuilderto get stream_handle and make the
sink - Use the new
DecoderBuilderto manually build a decoder with hints
for faster playback initialization and withseekable - All sources were assumed seekable now
with_seekableorDecoder::try_fromis needed to
enable seeking
Allow passing a TaggedFile to avoid redundant file reads
- Enables the use of an already parsed
TaggedFileto 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
&stris passed, which involves reading and parsing the file before retrieving a metadata field
Version Release; 0.1.6
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
SCacheis 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-2thus 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
ctxto metadata editor button for state management - Unload wiki when entering
metadata editoranddebugfor 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/writingfrom all editable columns country|release_type|tags|user_ratings|user_notesnow allread/writetheir 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
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 ifRhythmiRustis 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_watcherfunction 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_searchfunction to ensure proper functionality and compatibility with legacy search terms - Improved
db_searchto match legacy search functionality and extend it - Added
regenerate_search_dboption 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_boolto 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
loftycrate to project dependencies and updated Cargo.lock - Created new
ffmpegmodule inmusic_playerto 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
StringExtensionstrait to hold custom methods for Strings - Implemented
uppercase_first_letterfor theStringtype inStringExtensions - Updated user profile downloader to uppercase the first character of the
Playlistname
Updated downloader to support playlist download from user profiles on YouTube and SoundCloud
- Refactored
download_and_cachefunction to handle user profile URLs (YouTube, Soundcloud) - Implemented logic to create tables and insert data based on URL type
- Added
download_support_functionsmodule 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_rateandchannelsfrom 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_pathcreation 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 ROWIDso 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_uimechanism 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_datafrom aserde_json::to_stringat runtime to aconstor static JSON data to reduce runtime overhead. - Updated dynamic font loading to use
fonts: &mut FontDefinitionsinstead of passingFontDefinitionsdirectly. - Refactored font structure:
- Removed the
implblock and introduced a newDynamicFontsMainstructure with#[derive(Deserialize, Serialize, Debug)]. - Added a
Defaultimplementation forDynamicFontsMain.
- Removed the
- 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_serializationinstead 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:
- Config (core settings)
- Memory (layout/persistence)
- Keybindings (input)
- Colours (visual)
- Image (feature-specific)
- DiscordRPC (external)
- About (info)
Update dependencies and implement breaking changes
- Update all dependencies
-...
Version Release; 0.1.1
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
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
- Configurable status display format
- 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
- Redesigned page viewing system
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
- Volume adjustment with Arrow Up/Down
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
- Implemented connection pooling optimizations
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
- Implemented smart fallback system for invalid configurations
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
- Fixed force update mechanism
- 🎯 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
- Separated structs into logical modules:
Version Release 0.0.48 (First Public Release)
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