Skip to content

Pixel devices

About

On Google Pixel devices, a so-called factory image must be flashed when installing AXP.OS for the first time. This is needed only on the very first installation, between MRUs or when you need to recover from a bad flash.

This is also why a factory image will not be generated regularly and so are likely older than the latest OTA zip. Don’t worry simply do an OTA afterwards and you are on the latest version.

Requirements

  1. download the latest AXP.OS factory(!) image for your device (see FACTORY zip column for your device)
  2. a PC to push the AXP.OS factory image via fastboot (OTA and adb sideload via recovery are supported once installed)
  3. an unlocked bootloader (e.g. described here)

Flashing instructions

⚠️
Do not skip flashing the OS twice as mentioned in the following guide. Otherwise you risk a hard-brick!
⚠️

IMPORTANT NOTICE for the following devices:

  • Pixel 6 (6, 6 Pro, 6a | raven, oriole, bluejay)
  • Pixel 8 (8, 8 Pro, 8a | shiba, husky, akita)

If your firmware is on May 2025 or later you can NOT flash AXP.OS - A13 builds! This is due to a rollback implementation by Google which will lead to a hard-brick on these devices! If you are not sure, request support before flashing! Details

  1. extract the downloaded AXP.OS factory zip
  2. open a terminal / command window in that extracted directory
  3. reboot to the bootloader (not fastbootd), note down the current BOOT SLOT name (a|b)
    (you can also get it via fastboot getvar current-slot)
  4. flash AXP.OS - this also includes the AXP.OS signing key so you can lock your device - if supported
    • when on Windows, type: flash-all.bat
    • when on Linux, type: ./flash-all.sh
  5. during the process you will see the SLOT which gets flashed, here an excerpt where it flashes slot >b< (e.g. boot_b):
Sending 'boot_b' (65536 KB)                        OKAY [  1.675s]
Writing 'boot_b'
...
Sending 'dtbo_b' (16384 KB)                        OKAY [  0.423s]
Writing 'dtbo_b'                                   OKAY [  0.028s]
... (and much more)
  1. once completed successfully reboot to the bootloader (aka fastboot) again!
    (request support if you see errors during flashing and do NOT reboot or poweroff!)
  2. the BOOT SLOT must be changed to the updated one of step 5 as follows:
    • if it has NOT changed already, switch the slot manually via:
      fastboot --set-active=>UNPATCHED-SLOT< so to stick with the example above (where we flashed >b<):
      fastboot --set-active=a (replace >a< according to your device)
      ⚠️ DO NOT REBOOT or POWER-OFF NOW, otherwise you might brick your device! ⚠️
    • check the screen on your phone (you can also get it via fastboot getvar current-slot), it should show the new boot slot name immediately
      (request support if you have any issues and do NOT reboot or poweroff in that case!)
  3. repeat step 4 and ensure it flashes the OTHER slot now (to stick with the example above: it should flash slot >a< now)
  4. if this also went fine: boot into recovery
  5. perform a factory reset
  6. reboot into AXP.OS. If it takes more than 10 minutes to boot then something is wrong. Do not let it sit for more than 10 minutes!

Update AXP.OS

See Updating AXP.OS

Final note

⚠️
AXP.OS comes with its own recovery so if you flash a custom recovery it gets overwritten on next update. If you own a device which does not have a dedicated recovery partition (like most modern devices) flashing a custom recovery like TWRP will also remove Magisk on AXP.OS - Pro and the ability to re-lock the bootloader.
Last updated on