June 17, 2025
I fixed the no music label location to be better now that the music doesnt take up the whole window, i fixed artist name being in the wrong place in metadata viewer, i fixed playlist shuffling(which i never tested, only with directory tabs), i improved file manager navigation by allow to go back to main menu. Now playlist selected is kept after selecting a playlist when adding music, fix text was not truncated when updating artist and title meaning the volume bar could go over a the tool icons.
I fixed crashing if a click happened before rendering, fixed crashing if inline css didnt have text children, fixed css loading issues with weird urls that include parameters, fixed font size issues with font sizes that are rem and fixed text merging on Windows cause space width is 0. I made clicking on links change search bar text, made it so https:// is added if no scheme is found in the address bar, added tab support by having separate renderers and http clients for each tab, made link clicking open new tabs. I alos added better default headers, fixed style elements showing as text, fixed crash if there are no nodes but needs_render is True, and fixed view-source scheme not working by converting from parsed html cache to simple html caching. So much stuff i havent made a devlog about but i had to fix to get the first ship done, and then now i finally have tab support which was easy to implement but its a great feature!
Fix SSL not working by using certifi to find them, I added css caching which was pretty easy. I adapted to LineLayout and Textlayout instead of BlockLayout placing texts. I added link support, but no tab support currently. I added a resolve_url function which was needed to resolve the link urls, and css urls. The program now caches name to color values and space widths for fonts. And i fixed a bug crashing if font doesnt exist that is on the webpage.
fix crashing if the directory of a tab is empty and you tried to search, this was literally happening because of 4 characters and me trying to use self. on a local variable. I fixed next lyrics label taking up space and making the UI unusable sometimes due to spacing, and i added debugging for fpcalc and ffmpeg missing, and fixed the ffmpeg missing displaying wrong popup when Windows download was done.
Fixed numerous bugs leading to crashes which i didnt notice because i had Discord installed which should be optional.
Fixed EXE crashing which was due to a too new version of a library.
I fixed everything. I just had to multiply the ascent and descent of the font's more and now the background is adjusted to be great as well and it looks so nice! I am really happy i figured it out. Btw, the browser's default CSS will be editable in assets/css/browser.css if you dont want to highlight pre elements or add more css.
Something is very off currently but I worked on CSS styling that automatically layouts HTTP client that gathers the remote CSS and also parses inline CSS. I also worked on better layouting because of the CSS display value. I have added the background color rects to finish the layout tutorial, but currently they are very off. I have worked on faster speeds due to less labels.
Fix search crashing if the directory is empty.
Make fpcalc missing page show up on startup instead of when viewing metadata, add metadata to file automatically with the downloader, fix lyrics caching, add more modules to credits, fix SSL not being found and downloads crashing on executables with certifi
I worked on simplifying the glsl code to be more templateable and only have a single fractal_iteration function for each different fractal which returns the updated z. I did that, to conserve space and also to introduce perturbation theory or whatever it is called(i am dumb in math). Perturbation theory would allow me to estimate the iterations for a pixel, meaning basically infinite zoom, which was the idea of the reviewer(thanks!). So basically i have to compute a point on the CPU so an estimate can be created for each point on the GPU. Currently, it doesnt seem to work and the screen is black for each fractal, so i have to work on it tomorrow.
Fix scrolling, Github action, and requirements.txt
Fix game crashing when no weapons were set.
Implemented proper layouting by the tutorial. I made resizing work, i switched to pyglet for the renderer for speed, made emojis work, fixed an issue with caching not working and the project is now on Github!
I implemented my own scrolling and better positioning. I fixed the text being too close or too far from eachother. I implemented implicit tags by the tutorial. I started to work on http caching. Also, it turns out that i have to figure something out for text layouting because having thousands of labels for each word is way too slow. You can see that in the video. Hopefully the tutorial will cover line conversion which i can port to Arcade.
I have no idea how i have 46 minutes, maybe it got removed from the last devlog. I only i fixed the artist and lyrics label staying as a set value after no music is playing since then.
I have a search bar, scrollable renderer, file opening, source viewing, html parsing ,i can know tags for styling, i have HTTPS done, redirects done, but text placing has problems for some reason.. I will try to follow the tutorial but some stuff is hard to port from Tkinter to Arcade.
A browser from scratch in Python and the arcade module which uses OpenGL. I followed the tutorial from browser.engineering and ported it from Tkinter to Arcade/pyglet. To try it, enter https://browser.engineering/styles.html or https://example.com and most sites dont work because there is no way anyone is writing a CSS and Javascript engine from scratch. Some Javascript will be supported, but not much. The URL i linked is what works the best and shows off the most about the browser.
Remove FFmpeg Linux download which wouldnt work and add messageboxes to indicate different methods. Add a yes/no messagebox for yt-dlp install. Add acoustid music recognition which will identify songs based on audio fingerprint for better metadata. Now only MP3 is supported because i never really tested anything else and its the easiest. I split online_metadata to multiple files for easier navigation. Now missing metadata is added to files automatically, and i added a synchronized lyrics pane, shown in the video, that shows the current and upcoming lyrics.
Finish global search, add example tracks for albums and artists, urls for artists. FIx an issue where enter characters where shown in global search bar.
Fix a very big issue where the lyrics were wrong if the metadata was cached. I didnt notice this in the video, my bad.
Fix a fatal issue where i forgot to update requirements.txt, so built EXEs didnt work(I use UV, so i forgot to update it, and Github Actions uses it)
Connect metadata viewer and the global search, make it available through an icon, make online metadata gathering and cover art gathering much faster, make back button in metadata viewer only go back to music data instead of exiting, add a mouse hover effect for music. Still no commits, i want to add some more metadata.
Work on a global metadata search function for music, artists, and albums. No commits yet. I have a lot of work to do still.
Finish from-scratch UI controller support. Most stuff works except inputs, file managers, and sliders. Now the game can be played fully using a controller.
Sorry for my really bad aim, i basically never use controllers and dont even know how others do it. I might add aim assist or something.
Working on UI Controller Support and making a from-scratch UI Focus System.
Finish UI Refresh, fix settings, fix album caching not working, add lyrics viewer and lyrics caching
Fix julia not working and rename a variable.
Work on a better UI Layout which is card based, remove multiple modes, make new tab have a dropdown to create either a playlist or directory tab
PS: No commits on the repo currently since i am not done, i just dont want to lose the time.
Use compute shader instead of numpy vectorization to significantly improve speed and remove numpy dependency
Add power ups, make the grid bigger.
Do not recreate tiles, just set colors and keep a different tile_grid variable to know which is empty and which is not, fix a pretty annoying bug which took a lot of time to figure out, make combos move-based, so you have 3 left before it is removed.
Add tile destroy animations
Add better currently played music controls
Add metadata viewer for albums, artists and music, add metadata caching, make music buttons smaller
Fix audio normalization not working, add online metadata helper that uses MusicBrainz, Cover Art Archive and LRCLIB to gather as much data as possible.
Going to work on showing the metadata it gets tomorrow.
Add file watching/automatic reload, remove manual reload, split utils into multiple files, add much more metadata such as last play time and play times
Add more metadata extraction and a view metadata button. Debug performance issues with Arcade and UI(not included on Github).
Working on finding free to use Lyrics APIs for Lyrics.
move some code around and remove bloat
adjust exit button to be start instead of b, move to settings dropdown instead of category buttons, add Buffalo Fractal, fix settings issue
Convert from card based view to list based view with thumbnails, fix loop icon
remove unused combo label, make the game over screen not hide the playing field, add shape collision highlight
Add 100% accuracy test and add controller support for the game only(not ui)
Add controller exiting with start button and think about other improvements
include numpy in CREDITS, add controller support
Add controller support, Fix audio normalization crash
Add controller support
Remove unnecesseray double UIAnchorLayout with controller support and setting of controller events on window
Add controller support for ui and add virtual cursor for controller support
fix display mode crash, make zoom rectangular instead of click based
fix normalizing audio removing thumbnail and metadata, fix music downloading not being listed a feature
Add shape highlight and put combos in score label
fix randomized grids, fix generation fps naming to generations per second. fix spacing
use numpy instead of bit manipulation and remove copying of cell grid to get atleast 15x speedup, change default cols and rows to 128x96 for more space.
Optimize game of life implementation to bitwise operations to achieve 450-500 fps for a glider gun, use int instead of math.ceil for positions and fix generation fps reset after file manager
Add file manager quitting with escape, rle and life 1.05 loading support and saving support for all formats(currently only rle in file manager)
Use Roboto instead of Protest Strike, fix display mode crash, add file loading
This is a Conway's Game Of life clone created using Python, Arcade, Pyglet and compute shaders. Features: - Really fast because computation happens on the GPU and data grid stays within GPU - .rle, Life 1.05, Life 1.06 loading support - .rle export support - Discord RPC - Basic Controller Support - GPLv3 License, so you can use my code in your open source project!
fix download text having whitespace, fix display mode None crashing, removed files and folders crashing, fix early exiting if a tab doesnt exist, and add normalizing audio alert
Add game modes: default as training, waves and a 1 minute test, adjust for better scoring
Finish enemy and weapon customization, removal, Disable debug stuff, remove bottom movement, add set speed/size
Fix display mode crash
Added option to customize enemy image path, and customize weapons.
Going to add weapon adding tomorrow.
Add file and directory selector(file_manager)
Use Roboto instead of Protest Strike, add Mandelbar, Multi Mandelbar, Phoenix and Lambda Fractal
Add deletion with right click, fix some stuff
(took too long because of a stupid bug)
add combos, use Roboto instead of Proton Strike, update for better constants, add break sound effect
Fix credits and settings dropdowns, add high score, fps counter
A very customizable aim trainer made in Ursina engine. (AI was used to create the settings menu, other stuff is by me.) Features: - You can edit/create any enemy with any speed, size, and image - You can edit/create any gun with any damage, attack speed and image - Training Game Mode: You can experiment with your aim here, no time limit or anything, and you can create infinite targets. - Waves Game Mode: Kill enemies in time, while getting as many points as you can. - 1 Minute Test Game Mode: See how many shots you can hit, how many enemies you can kill in just a minute.
A game where you have to place shapes in lines to get points! (AI was used for the shape creating mechanism and some ideas.)
A simple and fast music player in Arcade. (AI was only used for some ID3 tags and metadata) Note: FFmpeg is required due to both yt-dlp and to support most formats Features: - Music downloading with thumbnail and as best format using yt-dlp - Music playing including looping, pausing/resuming, shuffling and skipping to next track - Music metadata fixing from title - Audio normalization using pydub - Tab based music selection(directories) - Custom playlists - Fast search using just text, and instant best result playback using enter - Discord RPC - MusicBrainz metadata - MusicBrainz global search - AcoustID automatic music recognition - Lyrics from lrclib
Merge all iter fractal views into one file, remove unused imports
Abstract module to cli and lib to allow module usage and bump version v0.3.0
Add median time statistics, log levels, print successful and failed album titles, update README, bump version to v0.2.0
Fractal viewer in Python using compute shaders and the Arcade and Pyglet modules. (AI was used for some of the Fractal GLSL shaders, but some fractals were constructed from Wikipedia pseudocodes. The viewer is made by me.) Currently supports Julia, multi-Julia, Mandelbrot, Multibrot, Mandelbar, multi-Mandelbar, Buffalo Fractal, Phoenix Fractal, Lambda Fractal, Burning Ship, Newton Fractal and the Sierpinsky Carpet.
This was widely regarded as a great move by everyone.