Customizing the Chrome OS boot animation

Somehow I prefer the look of the Chrome logo in black and white, so I thought I'd see if I could change the boot animation to one which was more aesthetically pleasing (for me).

It turns out that this is very simple and easy to do. Developer mode needs to be on, of course, and rootfs verification switched off.

The boot animation comprises 17 images, which can be found in PNG format in /usr/share/chromeos-assets/images_200_percent and /usr/share/chromeos-assets/images_100_percent,named boot_splash_frame1.png thru boot_splash_frame17.png.

The file at /etc/init/boot-splash.conf can be checked in order to see which set of images is being used (if in doubt, change one set and reboot to see if it sticks).

The images can then simply be copied out, edited, and replaced. Extra images can also be added, named boot_splash_frame18.png, boot_splash_frame19.png, and so on, extending the animation. It fades to the desktop after the usual period of time, more-or less, though. I copied frame 17 to frame 18, frame 16 to 19, 15, to 20, and so on, so the animation starts to reverse after it would usually finish.

In addition, the display frame interval can easily be changed in order to speedup or slowdown the animation. Look for --frame-interval in  /etc/init/boot-splash.conf (the first instance - the frecon command, is the relevant one on my device).

By default, the frame interval is set to 25.

Change it to 50 or 75 for a slightly slower animation. It is also possible to change the animation background screen colour hex code here as well (although sadly not the initial white boot screen, which is coded into the firmware & requires removal of the write-protect screw to modify). 

As an example, here's what I did:

mkdir ~/Downloads/Edited
mkdir ~/Downloads/Backup
cd /usr/share/chromeos-assets/images_100_percent
cp * ~/Downloads/Edited
cp * ~/Downloads/Backup

Opened boot splash files in image editor, made changes. The built-in image viewer in Chrome OS is rather limited so I downloaded the free app  'Image Editor' from the Play Store. Saved edited files to Downloads/Edited. Copied files back to /usr/share/chromeos-assets/images_100_percent

sudo cp ~/Downloads/Edited/boot_splash* /usr/share/chromeos-assets/images_100_percent

vi /etc/init/boot-splash.conf 


(changed frame interval from 25 to 50)

sudo reboot

Here's a GIF of what it looks like (if it shows up in a box, that's just due to it being a GIF):




Could be improved, but it's not too bad, for a first attempt, I think.

The edited PNGs forming the above can be downloaded here

43 comments:

  1. I've got a problem with this. I Made my own animation and renamed everything appropriately. Then I went to replace the normal animation, and it wasn't there. I've got ubuntu and chromeOS installed on this machine, and I'm in Ubuntu looking through the files. I go to Computer/usr/share/, but there's not folder with the boot images. Any help? I've got an acer CB5-571.

    ReplyDelete
    Replies
    1. What I really need to do is just find the animation directory.

      Delete
    2. You mention Ubuntu - are you sure you're looking in the Chrome OS /usr/share/ directory? Can you see /usr/share/chromeos-assets/ at all, for example?

      If not, then I would suggest attempting to navigate to the directory in the CrOS terminal instead.

      Delete
    3. No, I don't see ~/usr/share/chromeos-assets. I'm more or less a script kiddie, so I've got pretty much no idea how to navigate there through the CrOS terminal. Is there a specific command?

      Delete
    4. Yeah, so if you open crosh in Chrome OS with Ctrl+Alt+T then type shell to get into the full terminal, then do

      ls /usr/share/chromeos-assets/

      this should show the contents of the chromeos-assets directory. If you want to navigate there you just do "cd" instead of "ls". But you don't need to do this, you can just copy the two relevant image directories to the Downloads folder with (all one line)

      cp -a -r /usr/share/chromeos-assets/images_* ~/Downloads

      This should copy the two directories images_100_percent/ and images_200_percent/ to Downloads.

      Then you can view the images in the Chrome OS Files app (or Android apps, or Ubuntu if you're running it via crouton), replace the images named boot_splash* with your own, and then, back in the terminal, copy the directories back over to their original location, e.g. (all one line)

      sudo cp -a -r /home/chronos/user/Downloads/images_* /usr/share/chromeos-assets/

      Delete
    5. The first part worked well; I got the folder into my Downloads and I replaced the files. However, when I run the second command, I get the following message:

      cp: cannot create regular file '/usr/share/chromeos-assets/images_100_percent/boot_splash_frame1.png': Read-only file system.

      This repeats for every frame.

      Delete
    6. Screenshot: https://ibb.co/f2bwAb

      Delete
    7. You'll need to have rootfs verification switched off in order to modify system files. I mentioned it in the post but only briefly. Assuming you haven't already done this, you should be able to switch off rootfs verification for your current partition by entering the following command (in the Chrome OS terminal) then rebooting.

      sudo /usr/share/vboot/bin/make_dev_ssd.sh --remove_rootfs_verification --partitions $(( $(rootdev -s | sed -r 's/.*(.)$/\1/') - 1))

      The command above should be all one line - it might look weird in this comment box, but if you highlight it and copy, it should paste into the terminal as one line.

      I should also mention that it usually resets back to read-only when Chrome OS updates itself, and in addition, any customizations to system files (such as changing the boot splash, or adding scripts that run at startup, or rooting Android) usually also get lost when the OS updates. In theory there's a way around this, but it's not really ideal/practicable currently. One way to mitigate it is to stay on the beta or stable release channel, as OS updates are delivered a lot less frequently on these channels.

      Delete
    8. The commands worked, sort of. Every time I copied the files from my downloads to the assets folder, it added the original files back without deleting mine, or at least it seems that way when I copied it out.

      Delete
    9. Strange. To check, you could do ls -l on both folders, and compare the file sizes and modification times, e.g. something like

      ls -l /usr/share/chromeos-assets/images_100_percent/boot*

      then

      ls -l /home/chronos/user/Downloads/images_100_percent/boot*

      Delete
    10. Okay. It seems my suspicions were accurate. It seems to be adding the original frame back in.

      Delete
    11. Okay. I fixed that problem; It was just a simple naming error. But (of course) there's more. Now there's no boot animation. The screen just stays black for the duration that the animation should play. Then it flickers and goes to the login screen. Maybe I'm missing something with my animation?

      Delete
    12. Are your custom files the same dimensions as the originals (e.g. 274x86 for 100 percent, 512x172 for 200 percent)? Are they the same file type (.png)?

      Delete
    13. Did you guys get it working yet?
      Because I'm making one for a system at are school but it has chromium OS.

      Delete
  2. This comment has been removed by the author.

    ReplyDelete
  3. I keep getting Read-only file system when I use sudo cp ~/Downloads/Edited/boot_splash* /usr/share/chromeos-assets/images_100_percent and I tried using sudo su it also did that

    ReplyDelete
    Replies
    1. I had the same problem. The author said this to me, and it worked.


      You'll need to have rootfs verification switched off in order to modify system files. I mentioned it in the post but only briefly. Assuming you haven't already done this, you should be able to switch off rootfs verification for your current partition by entering the following command (in the Chrome OS terminal) then rebooting.

      sudo /usr/share/vboot/bin/make_dev_ssd.sh --remove_rootfs_verification --partitions $(( $(rootdev -s | sed -r 's/.*(.)$/\1/') - 1))

      The command above should be all one line - it might look weird in this comment box, but if you highlight it and copy, it should paste into the terminal as one line.

      I should also mention that it usually resets back to read-only when Chrome OS updates itself, and in addition, any customizations to system files (such as changing the boot splash, or adding scripts that run at startup, or rooting Android) usually also get lost when the OS updates. In theory there's a way around this, but it's not really ideal/practicable currently. One way to mitigate it is to stay on the beta or stable release channel, as OS updates are delivered a lot less frequently on these channels.

      Delete
    2. Owen is 'Right', you need to :
      shell
      cd /usr/share/vboot/bin/;sudo ./make_dev_ssd.sh
      This will tell you what to type for the next command. Remember the number after partitions
      cd /usr/share/vboot/bin/;sudo ./make_dev_ssd.sh --remove_rootfs_verification --partitions N (where N is the number given by the previous command)
      reboot

      you need to do that, every time the system is update.

      Delete
  4. This comment has been removed by the author.

    ReplyDelete
  5. I tried what you said, but I get a blank screen while starting up. Maybe it didn't copy back properly?... I don't know.

    ReplyDelete
    Replies
    1. chown must be root:root
      and chmod 644
      for that or those images

      Delete
    2. how can i make those root?

      Delete
  6. This comment has been removed by the author.

    ReplyDelete
  7. You can also copy any image (in .png format & renamed boot_splash_frame01.png), in /usr/share/chromeos-assets/images_100_percent
    ... and remove other boot_splash_frame*.png images
    there will be a static image at startup instead. in addition if you choose, the same background image, there will be a continuous rendering.

    ReplyDelete
  8. Need help, cant edit the frame intervals!

    ReplyDelete
    Replies
    1. Never mind, ran it with sudo.

      Delete
    2. How though? Even using sudo and disabling rootfs, I can't seem to edit the files for changing frame intervals.

      Delete
  9. Hi, great info.

    But I'm stock, I'm running a CloudReady ChromiumOS and when I run [sudo ./make_dev_ssd.sh] prints there's no Kernel boot information. Anyway I run [sudo ./make_dev_ssd.sh --remove_rootfs_verification --partitions N] with numbers from 0 to 10 but all prints the same no kernel boot information.

    Any idea? 'cause my main root problem is the same "Read-only file system" warning when I tried to copy my images into the folders.

    Thanks in advanced!
    -@JCdelValle

    ReplyDelete
  10. Hi, great info.

    But I'm stock, I'm running a CloudReady ChromiumOS and when I run [sudo ./make_dev_ssd.sh] prints there's no Kernel boot information. Anyway I run [sudo ./make_dev_ssd.sh --remove_rootfs_verification --partitions N] with numbers from 0 to 10 but all prints the same no kernel boot information.

    Any idea? 'cause my main root problem is the same "Read-only file system" warning when I tried to copy my images into the folders.

    Thanks in advanced!
    -@JCdelValle

    ReplyDelete
    Replies
    1. On Cloudready, I think you should be able to just remount / as readwrite directly in the shell, i.e.

      sudo mount -o remount,rw /

      Delete
  11. Here is a recreation of the original colored chrome os boot animation

    https://www.dropbox.com/s/7xt3mvc8h9qzqtq/boot_splash_recreation.zip

    ��

    ReplyDelete
    Replies
    1. Another one


      https://www.dropbox.com/s/gzd9z0kjkqia7xm/boot_splash_anim.zip

      taken from Sean Dexter's dribbble shot which I'm in love with https://dribbble.com/shots/2276182-Swirly-dots-to-Chrome

      Delete
  12. anyway to do it if settings and chrosh are blocked?
    probably not bu thanks anyway

    ReplyDelete
  13. Hey, i get this error:'cp:
    error writing '/usr/share/chromeos-assets/boot_splash_frame13.png': No space left on device'

    what do is do? i have allready powerwashed and it isn't actualy full

    ReplyDelete
  14. Great article with excellent idea!Thank you for such a valuable article. I really appreciate for this great information.. Books for people of all ages

    ReplyDelete
  15. hey, i really need help finding and changing the frame interval i cant find the file or figure out how to edit it. please help me

    ReplyDelete
  16. When I type in vi /etc/init/boot-splash.conf to change the frame interval it says: # Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
    # Use of this source code is governed by a BSD-style license that can be
    # found in the LICENSE file.

    description "Displays an animation while the system is booting"
    author "chromium-os-dev@chromium.org"

    # boot-splash depends on udev-trigger-early because frecon does need
    # graphics device to be ready to display splash screen and tty (ptmx)
    # device to create terminals, it also uses input devices (though they
    # can also be hotplugged).

    start on stopped udev-trigger-early

    # If no assets are available to show, assume "embedded".
    # If a specific embedded device needs different parameters, see:
    # http://upstart.ubuntu.com/cookbook/#separating-variables-from-the-job
    env ASSETLESS_ARGS="--enable-osc --enable-vts --pre-create-vts"

    script
    # Set the backlight to 40% of its maximum level.
    BACKLIGHT_DIR=/sys/class/backlight
    if [ -d ${BACKLIGHT_DIR} ] &&
    [ -n "$(find ${BACKLIGHT_DIR} -maxdepth 0 ! -empty)" ]; then
    backlight_tool --set_brightness_percent=40.0 || true
    fi

    ASSETS=/usr/share/chromeos-assets
    ASSETS_200=${ASSETS}/images_200_percent
    ASSETS_100=${ASSETS}/images_100_percent

    # Use differently-sized images depending on the framebuffer width.
    if [ -e "${ASSETS_200}/boot_splash_frame01.png" ]; then
    "/etc/init/boot-splash.conf" [readonly] 56 lines, 1970 characters

    Idk how to edit it or what to edit in here, thanks!

    ReplyDelete
  17. hello i know this is old i need help with it if you have a video that would be nice but i dont know how to do it?

    ReplyDelete
  18. I did the whole procedure, but the image was static in a middle frame, that is, he didn’t even do the initial animation to get there and freeze it. I use Chromium os for raspberry Pi 3

    ReplyDelete
  19. I'm resizing that png and now it's fit with my CloudReady

    ReplyDelete