Uploaded February 2021 | Updated September 2026, 7 hours ago
ID: 67127924
NONG Song: bit.ly/3gvtjow
Press read more for info on how I made the level!
Okay so I did this all in four hours (during online school but who cares), here's a quick rundown of how it all went:
Step 1 - Download the Bad Apple!! music video, then use FFmpeg to extract all the frames from it. The video is nerfed down to a resolution of 50x38 pixels, and 30 frames per second (6572 frames total). 50x38 is important because it equals 1900 pixels total, which is just enough for GD's limit of 999 group IDs and 999 color IDs. It also takes up just enough space in the ship gamemode.
Step 2 - Write a program to convert every frame to 0s and 1s, where 0=white and 1=black. Any pixel with a combined RGB value of more than 128*3 is considered white. Save every frame in a massive .json file (12 megabytes)
Step 3 - Write another program to create a 50x38 canvas in Geometry Dash using pixel blocks. The first 950 pixels are colored black and assigned groups 1-950, and the last 950 are assigned color channels 1-950 (are all black by default). The pixels with group IDs can be individually toggled off to reveal a white pixel behind it.
Step 4 - Create the 'base' GD level in the editor, while you're still able to open it without crashing. This basically means anything that I'm not using code for. The frame around the video, the background color, syncing with the audio, etc.
Step 5 - Calculate how fast the player moves at 4x speed by recording a video and going frame by frame. You travel at 3.125 frames/tile at 60fps, which means 0.64 tiles/frame at 30 fps. 1 tile is 30 editor units, which means that a player at 4x speed is travelling at 19.2 units per frame. This means that we will update the pixels every 19.2 units (a little bit over half a grid space, 0.64 to be exact)
Step 6 - Loop through every frame in the video and check for any pixels that change color. For each changed pixel, a color or toggle trigger (depending on which pixel) will be added to the level's code and flip the pixel from black to white or vice versa. Note that triggers are only added for pixels that CHANGE, because using 1900 triggers for every single frame is a recipe for disaster.
Step 7 - Upload to the GD servers! At first I thought the level was too big to upload but turns out it was just because I had exclamation marks in the level title. So I removed them.
mmm yeah that's about it, i had a lot of fun working on this. i'll probably update the level once or twice to fix sync or optimize it further, we'll see.
Original Bad Apple: youtu.be/FtutLA63Cp8
-------------------------------------------------------------------------------------------------
Side note: There is actually another person who made Bad Apple in GD!!
youtube.com/watch?v=DxO3S_phfL8
I was very aware of this video but wanted to try coding it myself. The main difference between our versions is that mine only uses legal values for group+color IDs (1-999) which means that the level is playable in 2.11 and also uploadable to the servers. However, this also means that my version has a much lower resolution.
-------------------------------------------------------------------------------------------------
Twitter: twitter.com/TheRealGDColon
Main Channel: youtube.com/gdcolon
ID: 67127924
NONG Song: bit.ly/3gvtjow
Press read more for info on how I made the level!
Okay so I did this all in four hours (during online school but who cares), here's a quick rundown of how it all went:
Step 1 - Download the Bad Apple!! music video, then use FFmpeg to extract all the frames from it. The video is nerfed down to a resolution of 50x38 pixels, and 30 frames per second (6572 frames total). 50x38 is important because it equals 1900 pixels total, which is just enough for GD's limit of 999 group IDs and 999 color IDs. It also takes up just enough space in the ship gamemode.
Step 2 - Write a program to convert every frame to 0s and 1s, where 0=white and 1=black. Any pixel with a combined RGB value of more than 128*3 is considered white. Save every frame in a massive .json file (12 megabytes)
Step 3 - Write another program to create a 50x38 canvas in Geometry Dash using pixel blocks. The first 950 pixels are colored black and assigned groups 1-950, and the last 950 are assigned color channels 1-950 (are all black by default). The pixels with group IDs can be individually toggled off to reveal a white pixel behind it.
Step 4 - Create the 'base' GD level in the editor, while you're still able to open it without crashing. This basically means anything that I'm not using code for. The frame around the video, the background color, syncing with the audio, etc.
Step 5 - Calculate how fast the player moves at 4x speed by recording a video and going frame by frame. You travel at 3.125 frames/tile at 60fps, which means 0.64 tiles/frame at 30 fps. 1 tile is 30 editor units, which means that a player at 4x speed is travelling at 19.2 units per frame. This means that we will update the pixels every 19.2 units (a little bit over half a grid space, 0.64 to be exact)
Step 6 - Loop through every frame in the video and check for any pixels that change color. For each changed pixel, a color or toggle trigger (depending on which pixel) will be added to the level's code and flip the pixel from black to white or vice versa. Note that triggers are only added for pixels that CHANGE, because using 1900 triggers for every single frame is a recipe for disaster.
Step 7 - Upload to the GD servers! At first I thought the level was too big to upload but turns out it was just because I had exclamation marks in the level title. So I removed them.
mmm yeah that's about it, i had a lot of fun working on this. i'll probably update the level once or twice to fix sync or optimize it further, we'll see.
Original Bad Apple: youtu.be/FtutLA63Cp8
-------------------------------------------------------------------------------------------------
Side note: There is actually another person who made Bad Apple in GD!!
youtube.com/watch?v=DxO3S_phfL8
I was very aware of this video but wanted to try coding it myself. The main difference between our versions is that mine only uses legal values for group+color IDs (1-999) which means that the level is playable in 2.11 and also uploadable to the servers. However, this also means that my version has a much lower resolution.
-------------------------------------------------------------------------------------------------
Twitter: twitter.com/TheRealGDColon
Main Channel: youtube.com/gdcolon


![VVVVVV Glitch- Free Super Gravitron Achievements [STEAM]
Sorry Terry.
plz dont kill me ;-;
Main Channel: https://bit.ly/GDColon VVVVVV Glitch- Free Super Gravitron Achievements [STEAM]](https://i.ytimg.com/vi/f5P7vSj8zUY/mqdefault.jpg)







