DisLoPik blog / 3ds / boot logos OS

Guide · 3DS · CFW required

Custom boot logos, start to finish

That half-second splash before a game launches is a compressed archive of textures and layout files sitting in the title itself. Here's how to pull it apart, replace the artwork, and put the CIA back together so it still installs.

Difficulty
Medium
Time
~45 min first try
Needs
Decrypted CIA

What the logo actually is

When a title launches, the 3DS plays a short splash — the plain "Nintendo 3DS" wordmark, "Licensed by Nintendo", "Distributed by Nintendo", or the iQue variant. Retail titles built with a newer SDK don't reference a stock image; they carry their own copy.

A CIA is a wrapper around one or more NCCH partitions. The executable one (the CXI) has several regions — ExHeader, ExeFS, RomFS, plain region, and a logo region. That last one is a single file, logo.bcma.lz: an LZ11-compressed darc archive holding the CTR layout format trio.

Container
darc
Compression
LZ11
Textures
.bclim
Layouts
.bclyt
Animations
.bclan

So "editing the boot logo" is really four operations: decompress, unpack the archive, swap a texture, then reverse all of it. Nothing here is cryptographically hard — the difficulty is entirely in getting the tool arguments right and not corrupting the container on the way back.

This only works on titles you've dumped from your own console or your own cartridges, and the rebuilt CIA is unsigned — it will only install on CFW. Don't redistribute modified retail titles.

Tools

3dstool

dnasdw's Swiss army knife. Extracts and rebuilds CIA and CXI containers, and handles LZ11 compression. Does most of the work here.

darctool

Same author, same argument style. Unpacks and repacks the darc archive that lives inside logo.bcma.lz.

Switch-Toolbox

Despite the name, it reads 3DS BCLIM/BCLYT files. This is where you export the texture to PNG and import your replacement.

GodMode9

On-console. Used to dump the title and, critically, to produce a decrypted CIA. Nothing below works on an encrypted one.

Put 3dstool.exe and darctool.exe in the same folder as your CIA and work from a command prompt there. Both are Windows binaries; on Linux they build from source or run under Wine.

Decrypt first

This is the step people skip, and it's why their extraction produces garbage. Retail NCCH content is encrypted with console-independent keys; 3dstool can't see inside until it's decrypted.

  1. Boot GodMode9

    Hold START while powering on, on a Luma3DS console.

  2. Find the title

    For an installed title, browse to [A:] SYSNAND SDtitle, or use the Title Manager. For a cartridge, open [G:] GAMECART.

  3. Build a decrypted CIA

    Press A on the content, choose NCCH image optionsBuild CIA from file. GodMode9 decrypts as it builds. Output lands in 0:/gm9/out/. If you already have an encrypted CIA on your SD card, CIA image optionsDecrypt file (inplace) does the same job.

  4. Keep a pristine copy

    Copy the decrypted CIA to your PC twice. One you edit, one you never touch. You will want it.

Back up first. Take a full NAND backup in GodMode9 before you start installing rebuilt titles. Boot logo edits are low-risk, but an unrecoverable console over a splash screen would be a bad trade.

Unpacking

Four commands, each peeling off one layer. Run them in order from the folder holding your CIA.

1 · CIA → contents
3dstool -xvtf cia game.cia ^
  --header ciaheader.bin --certs certs.bin ^
  --tik tik.bin --tmd tmd.bin --contents contents

You'll get files like contents.0000.00000000. The .0000 is the content index and the second number is the content ID — write yours down, because you need the exact filename again at rebuild time. Index 0000 is the CXI you want; higher indexes are DLC or manual partitions and can be left alone.

2 · CXI → regions
3dstool -xvtf cxi contents.0000.00000000 ^
  --header ncchheader.bin --exh exheader.bin ^
  --exefs exefs.bin --romfs romfs.bin ^
  --logo logo.bcma.lz --plain plain.bin

If logo.bcma.lz comes out empty or the tool reports no logo region, the title predates the separate-region format and uses one of the built-in logos instead. Skip to the makerom section — you can add a logo region that wasn't there, but it's a rebuild rather than an edit.

3 · Decompress LZ11
3dstool -uvf logo.bcma.lz --compress-type lz11 --compress-out logo.darc
4 · Unpack the archive
darctool -xvf logo.darc --darc-dir logo

You now have a logo/ folder with the real contents. Everything from here is just image editing until you reverse the chain.

What's inside

Layout varies between titles, but the shape is consistent — three folders matching the three file types:

logo/ ├── blyt/ layout: element positions, sizes, hierarchy │ └── logo.bclyt ├── timg/ textures: the actual artwork │ └── logo.bclim └── anim/ animation: fades and timing curves └── logo_in.bclan

The timg folder is where 95% of edits happen. A BCLYT is a scene graph — panes, picture elements and their transforms — and a BCLAN drives properties on those panes over time. The texture is the only piece you can change without understanding the other two.

Filenames differ per title. Open the folder and look rather than assuming; some logos ship several BCLIMs for different screens or colour variants.

Editing textures

Open the .bclim in Switch-Toolbox. Right-click the texture node → Export to get a PNG, edit it, then right-click → Replace and save the file. Three rules decide whether it works:

  • Keep the exact dimensions. The BCLYT references the texture by size. Change the resolution and your art will stretch, tile, or vanish. Note the size before you export.
  • Keep the same pixel format. Switch-Toolbox shows it in the properties panel — commonly RGBA5551, LA4, L8, or ETC1A4. Re-encoding to something else can change the data size and break the container. When the replace dialog asks, pick the original format.
  • Respect the alpha channel. Most logo textures are drawn on transparency, not black. Flattening onto a black background gives you a visible rectangle over the layout's background colour.

A few format quirks worth knowing: L8 and LA4 are greyscale, so a colourful replacement will come back monochrome — if you need colour you have to change the format and accept a size change, which means rebuilding rather than patching. ETC1A4 is block-compressed and lossy; hard edges and thin text pick up artefacts, so design for it rather than fighting it.

Save a copy of the original BCLIM. Switch-Toolbox writes in place, and there's no undo once you've saved over it.

Layout & animation

Optional, and the place where things break. Editing the BCLYT lets you move or resize the picture pane; editing the BCLAN changes how long the splash holds and how it fades. Switch-Toolbox can display both, but its write support for CTR-era layouts is less reliable than its texture handling.

Practical advice: get your texture edit working and installed first, confirm it displays, and only then touch layout files — one file at a time, testing between each. If a layout edit produces a black screen on launch, restore that single file from your untouched copy and rebuild.

For the common goal of "make it appear instantly," you don't need the layout at all. A fully transparent texture of the original dimensions gives you a blank splash, which reads as a faster boot.

Rebuilding

Exactly the reverse, with the same filenames you extracted to. Switch between the two chains if you want to compare them side by side.

Build back up
darctool -cvf logo.darc --darc-dir logo
3dstool -zvf logo.darc --compress-type lz11 --compress-out logo.bcma.lz
3dstool -cvtf cxi contents.0000.00000000 --header ncchheader.bin --exh exheader.bin --exefs exefs.bin --romfs romfs.bin --logo logo.bcma.lz --plain plain.bin
3dstool -cvtf cia custom.cia --header ciaheader.bin --certs certs.bin --tik tik.bin --tmd tmd.bin --contents 0:contents.0000.00000000

Two details that catch people out. The CXI rebuild overwrites the contents file in place, so if you need to retry from scratch you re-extract from your pristine CIA rather than reusing the folder. And the CIA rebuild wants the index:filename form — 0:contents.0000.00000000, not just the filename. If the title had extra contents, list them all: --contents 0:contents.0000.… 1:contents.0001.…

3dstool recalculates the region hashes as it rebuilds, so you don't patch anything by hand. What it can't do is re-sign the result — which is fine, because signature patches are what CFW is for.

Install & test

  1. Uninstall the original

    Same title ID means the install will either fail or overwrite. Remove the existing copy in FBI first, and note that save data is separate — it survives, but dump it with JKSM anyway if the game matters to you.

  2. Install with FBI

    Copy custom.cia to your SD card, open FBI → SD, select it, install. Luma3DS applies signature patches by default, so an unsigned CIA installs without complaint.

  3. Launch it

    The splash plays before the game does. If you see your artwork, you're done. If you see a black screen and then the game, the texture imported but the layout can't find it — check dimensions and format.

Iterate on something small. Rebuilding a 1 GB title to check a 30 KB texture wastes minutes every cycle — test your process on a tiny eShop title first, then apply it to the game you actually care about.

For your own homebrew

If you're building the CIA yourself, none of the above is necessary — you supply the logo at build time. Prepare logo.bcma.lz the same way (author a darc, compress it as LZ11), then hand it to makerom:

makerom
makerom -f cia -o app.cia -rsf app.rsf -target t ^
  -elf app.elf -icon icon.icn -banner banner.bnr ^
  -logo logo.bcma.lz

The easiest way to author one from nothing is to borrow the structure: unpack a logo you already have, replace the texture, and repack. Getting a fresh darc with valid BCLYT and BCLAN files from scratch is far more work than reusing an existing skeleton.

This is also the fix for titles with no logo region — you can't edit what isn't there, but you can build a new CIA that has one.

Automate it

Once you've done this twice you'll want it in a batch file. Drop these next to your tools, edit the two variables at the top, and the round trip becomes two double-clicks.

unpack.bat
@echo off
set CIA=game.cia
set CONTENT=contents.0000.00000000

3dstool -xvtf cia "%CIA%" --header ciaheader.bin --certs certs.bin --tik tik.bin --tmd tmd.bin --contents contents
3dstool -xvtf cxi %CONTENT% --header ncchheader.bin --exh exheader.bin --exefs exefs.bin --romfs romfs.bin --logo logo.bcma.lz --plain plain.bin
3dstool -uvf logo.bcma.lz --compress-type lz11 --compress-out logo.darc
darctool -xvf logo.darc --darc-dir logo

echo.
echo Edit the files in .\logo\ then run repack.bat
pause
repack.bat
@echo off
set OUT=custom.cia
set CONTENT=contents.0000.00000000

darctool -cvf logo.darc --darc-dir logo
3dstool -zvf logo.darc --compress-type lz11 --compress-out logo.bcma.lz
3dstool -cvtf cxi %CONTENT% --header ncchheader.bin --exh exheader.bin --exefs exefs.bin --romfs romfs.bin --logo logo.bcma.lz --plain plain.bin
3dstool -cvtf cia "%OUT%" --header ciaheader.bin --certs certs.bin --tik tik.bin --tmd tmd.bin --contents 0:%CONTENT%

echo.
echo Built %OUT%
pause

Change CONTENT to whatever content ID your extraction produced — it's different for every title.

Troubleshooting

Extraction produces empty or nonsense files

The CIA is still encrypted. Go back to GodMode9 and build a decrypted copy — there's no PC-side shortcut around this.

3dstool says the logo region is missing

The title uses one of the four built-in logos rather than carrying its own. You can add a region with makerom, but you can't extract one that doesn't exist.

Rebuilt CIA won't install

Check three things: signature patches are enabled in Luma3DS config, the original title was uninstalled first, and you passed the content with the 0: index prefix. A missing prefix produces a CIA that looks valid and fails on install.

Black screen where the logo should be

Almost always a texture mismatch — different dimensions or a different pixel format than the original. Restore that BCLIM from your backup, re-export, and check the properties panel before replacing.

The image is there but the colours are wrong

Format conversion. Greyscale formats like L8 and LA4 can't hold colour, and RGBA5551 has a single bit of alpha — semi-transparent pixels snap to fully opaque or fully invisible.

The game boots but crashes shortly after

Unrelated to the logo — you probably rebuilt the CXI with a stale region file. Start over from the pristine CIA rather than debugging the folder you've been working in.

Switch-Toolbox won't open the BCLIM

Make sure you unpacked the darc rather than pointing it at logo.darc or the compressed .lz. Toolbox reads the individual files, not the container.

Where to go next

The same unpack-edit-repack loop applies to more than logos. Banners (banner.bnr) use CGFX models and CWAV audio, so you can change the animated icon and its jingle on the HOME menu. RomFS edits open up textures, text and models inside the game itself. It's the same four tools and the same discipline: keep a pristine copy, change one thing, test.

Worth saying once more, because it's the mistake that costs the most time: never rebuild from the folder you've been editing in. Re-extract from an untouched CIA every time you start a new attempt.