{"id":37069260,"url":"https://github.com/ilollek/ctkvisualizer","last_synced_at":"2026-01-14T08:00:52.001Z","repository":{"id":259174563,"uuid":"876567380","full_name":"iLollek/CTkVisualizer","owner":"iLollek","description":"A customtkinter widget for playing and visualizing Audio.","archived":false,"fork":false,"pushed_at":"2024-10-30T07:33:07.000Z","size":42,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-18T04:01:46.654Z","etag":null,"topics":["audio-visualization","customtkinter","python","visualizer"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iLollek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":["https://paypal.me/ilollek"]}},"created_at":"2024-10-22T07:31:55.000Z","updated_at":"2025-06-06T22:33:44.000Z","dependencies_parsed_at":"2024-10-23T08:29:20.608Z","dependency_job_id":"61368e48-a9f2-4a46-b1c0-930da1a26cb9","html_url":"https://github.com/iLollek/CTkVisualizer","commit_stats":null,"previous_names":["ilollek/ctkvisualizer"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/iLollek/CTkVisualizer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iLollek%2FCTkVisualizer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iLollek%2FCTkVisualizer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iLollek%2FCTkVisualizer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iLollek%2FCTkVisualizer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iLollek","download_url":"https://codeload.github.com/iLollek/CTkVisualizer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iLollek%2FCTkVisualizer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28413527,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T05:26:33.345Z","status":"ssl_error","status_checked_at":"2026-01-14T05:21:57.251Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio-visualization","customtkinter","python","visualizer"],"created_at":"2026-01-14T08:00:35.863Z","updated_at":"2026-01-14T08:00:51.831Z","avatar_url":"https://github.com/iLollek.png","language":"Python","readme":"# CTkVisualizer\r\n\r\n---\r\n\r\n**A Visualizer that actually represents the Audio that's playing.**\r\n\r\n![alt text](image.png)\r\n\r\n*Inspired from [Akascape's TkVisualizer](https://github.com/Akascape/TkVisualizer/)*\r\n\r\n**Install it by running:**\r\n``pip install CTkVisualizer``\r\n(Verify that you're atleast running with Version 1.0.3)\r\n\r\n---\r\n\r\n## Disclaimer\r\n\r\n- This Widget is absolutely unfriendly to Integrate since it doesn't just Visualize Audio (what you might expect), it also plays it using ``pygame.mixer``. Unfortunately, this makes it do more than what a Widget is supposed to do. Usually you'd want to handle the Audio Playing seperately, and not in some GUI Widget. I wasn't able to implement it any other way. I tried my best to compensate for it by providing Audio Control Methods with the Widget natively, like ``pause()``, ``resume()`` and ``set_volume()``\r\n\r\n- This Widget has serious Problems with **vertical Resizing!** Horizontal Resizing works like a Charm, the Bars get thicker, but vertically, the Bars will get \"chopped off\"\r\n\r\n- This Widget has been tested with WAVE files (.wav) and MPEG3 Files (.mp3), both worked fine.\r\n\r\n---\r\n\r\n## Quick Overview\r\n*This Overview just helps you get started quickly.*\r\n\r\n- **`play_new_song(self, path_to_WAVE_file: str, finish_callback=None)`**\r\n    - Loads and plays a new audio file while stopping any currently playing song.\r\n    - **Parameters**:\r\n        - `path_to_WAVE_file`: The path to the new audio file.\r\n        - `finish_callback`: A callback to execute when the song finishes loading (default is None).\r\n    - [!] You would most likely want to run this Threaded for performance reasons!\r\n\r\n- **`pause(self)`**\r\n    - Pauses the currently playing audio.\r\n\r\n- **`play(self)`**\r\n    - Resumes playback of the paused audio.\r\n\r\n- **`resume(self)`**\r\n    - Resumes playback of the audio if it was paused.\r\n\r\n- **`is_playing(self)`**\r\n    - Checks if audio is currently playing.\r\n    - **Returns**: True if audio is playing, False otherwise.\r\n\r\n- **`change_color(self, color)`**\r\n    - Changes the color of all audio bars.\r\n    - **Parameters**:\r\n        - `color`: The new RGB color for the audio bars.\r\n\r\n- **`get_music_filename(self)`**\r\n    - Gets the base filename of the currently loaded music file.\r\n    - **Returns**: The base filename of the music file without extension, or None if no file is loaded.\r\n\r\n- **`set_volume(self, volume: float)`**\r\n    - Sets the volume for the currently playing audio.\r\n    - **Parameters**:\r\n        - `volume`: A float value representing the volume level, where 0.0 is muted and 1.0 is the maximum volume.\r\n    - **Raises**: ValueError if the volume is not between 0.0 and 1.0.\r\n\r\n---\r\n\r\n### Quick Overview - Quickstart\r\n\r\n```\r\nimport customtkinter as ctk\r\nfrom CTkVisualizer import AudioVisualizer\r\n\r\n# Create the main application window\r\nroot = ctk.CTk()\r\nroot.title(\"Audio Visualizer\")\r\n\r\n# Initialize the audio visualizer\r\nvisualizer = AudioVisualizer(root, \"path/to/your/audio/file.wav\")\r\nvisualizer.pack(expand=True, fill=\"both\")\r\n\r\n# Run the application\r\nroot.mainloop()\r\n```\r\n\r\n---\r\n\r\n### Quick Overview - Try the Demo!\r\n\r\nIf you want a quick and practical overview of how it works, you can look at ``AudioMusicVisualizerDemo.py`` - There I also added some Buttons to change the Color of the Bars or Play/Pause the Song.\r\n\r\n---\r\n\r\nIf you have any suggestions or if you happen to find any Bugs, please report them by [opening an Issue](https://github.com/iLollek/CTkVisualizer/issues/new)\r\n\r\nIf you like this Project, feel free to help me out by leaving a Star or Sponsoring me! ⭐\r\n\r\nLastly, if you made anything cool with this Project, please tell me! I'd love to see it. Just open an Issue about it or tell me via Discord: @ilollek\r\n\r\n---","funding_links":["https://paypal.me/ilollek"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Filollek%2Fctkvisualizer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Filollek%2Fctkvisualizer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Filollek%2Fctkvisualizer/lists"}