For my 3D printer, I compiled and flashed a custom build of Marlin. One of the changes I made was this custom bootscreen that shows up every time the printer starts
Sidenote: If you add a custom bootscreen to Marlin, normally the Marlin bootscreen shows as well. If you want to only show you custom bootscren you need to do the following things (For Marlin v2.1.2.2): Define both SHOW_BOOTSCREEN and SHOW_CUSTOM_BOOTSCREEN (Marlin/Configuration.h, Line 80):
// Show the Marlin bootscreen on startup. ** ENABLE FOR PRODUCTION ** #define SHOW_BOOTSCREEN // Show the bitmap in Marlin/_Bootscreen.h on startup. #define SHOW_CUSTOM_BOOTSCREEN
Then, in the file Marlin/src/lcd/dogm/marlinui_DOGM.cpp, Line 247, you have to change the function:
void MarlinUI::show_bootscreen() {   TERN_(SHOW_CUSTOM_BOOTSCREEN, show_custom_bootscreen());   show_marlin_bootscreen(); }
to:
void MarlinUI::show_bootscreen() {   //TERN_(SHOW_CUSTOM_BOOTSCREEN, show_custom_bootscreen());   show_custom_bootscreen();   //show_marlin_bootscreen(); }
(you can leave out the comments) Now, only the custom bootscreen will show up. But, at least for me, it seems to display way too long (~5 seconds). To fix this, I changed both the BOOTSCREEN_TIMEOUT and the CUSTOM_BOOTSCREEN_TIMEOUT
#define BOOTSCREEN_TIMEOUT 250 // (ms) Total Duration to display the boot screen(s) (File: Marlin/Configuration_adv.h, Line 1442)
#define CUSTOM_BOOTSCREEN_TIMEOUT 250 File: Marlin/src/lcd/dogm/marlinui_DOGM.cpp, Line 172)
(Despite what the comment in BOOTSCREEN_TIMEOUT says, from testing it seems that these two timeouts add up. Also, I haven't tried to set one of the Timeouts to 0, as I thought that that might break some stuff.)