Skip to content

Repository files navigation

RCT Toolkit

A tool for getting Black Ops II emblems onto your own account on PS5.

Three ways to get one: pick from the emblems that ship with the app, import an emblem file from elsewhere, or copy one off another player. Whichever you use, it loads into your own in-game emblem editor and you save it there. From that point it's yours, the same as anything else you made in the editor.

Built for personal use, on your own PS5 and your own home network.

How it works

Black Ops II fetches emblem data over plain HTTP from Treyarch's old Demonware servers. This tool runs a small proxy on your PC, and you point your PS5's network settings at it. Only that one emblem-storage endpoint is touched:

  • In capture mode, the proxy saves a copy of whatever emblem data your console downloads.
  • In show mode, it replaces the emblem data your console downloads with the emblem you've selected.

Everything else, including PSN sign-in and matchmaking, passes through the proxy untouched. HTTPS traffic is tunneled through as-is and is never decrypted.

The actual steps

Using a bundled emblem

  1. In the control panel, click an emblem in the Presets or Community tab.
  2. Turn on show mode.
  3. Open your own emblem editor on the PS5. It loads in place of whatever you'd normally see there.
  4. Save it, same as you would with anything you made yourself.

Copying another player's emblem

  1. Turn on capture mode.
  2. On your PS5, open the profile or channel of the player whose emblem you want. Their emblem gets saved automatically.
  3. Click the captured emblem to select it.
  4. Turn on show mode, open your own emblem editor, save.

Two things worth knowing before you try this:

  • The game only checks for a new emblem once per session. After you open the editor the first time, it caches what it loaded and won't ask again, even if you pick a different emblem afterward. To load a different one, restart the game, or switch to Zombies and back to Multiplayer, before opening the editor again.
  • A captured emblem won't work if it uses a shape you haven't unlocked on your own account. Black Ops II checks that itself, and there's nothing the proxy can do about it. The bundled emblems are not affected — see below.

See docs/USAGE.md for the full walkthrough and docs/INSTALL.md for setup.

The emblem library

The control panel's library card has three tabs.

Presets — 14 emblems, in four categories:

CategoryEmblems
SkullsSkull, Jolly Roger, Reaper
MilitaryCrosshair, Combat Shield, Hazard, Chevrons
SymbolsBiohazard, Peace, Yin Yang, Smiley
AbstractSunburst, Prism, Orbit

Community — 12 more, in the style Black Ops II emblems were actually known for:

CategoryEmblems
BeastsDragon Eye, Wolf Crest, Phoenix
CrestsTribal Mask, Vanguard, Seal
IconsEight Ball, Spade, Cherry Bomb
SignalsRadiation, North Star, Bolt

These are originals rather than recreations of specific famous emblems. The designs that get named as the most-copied BO2 emblems — Rinnegan, Pikachu, Pickle Rick, team logos — all belong to somebody, and there's a difference between drawing one on your own console and shipping it in a repo. So the community set goes after the look of the era instead of copying particular marks.

They always work. Every bundled emblem is built only from the emblem editor's basic shapes (the tools and type categories — circles, squares, triangles, capsules, stars, letters and digits), which are available on every account from the start. A preset can't fail the unlock check the way a capture can. The build script enforces this and refuses to emit an emblem that references a rank, weapon or challenge shape.

Imported — emblem files you added yourself, which is where anything from outside goes.

Importing emblem files

Worth being straight about why this exists: there is no downloadable library of BO2 emblems anywhere. The format is documented (CallOfDutyEmblemSpecs), and sites like bo2emblem.online host template galleries, but those are images and build guides — that site says outright its project files can't be imported into the game. The community shared emblems as layer-by-layer video tutorials, never as data. So the import tab is how real community emblems get in: you supply the file, from wherever you find it.

Drop files on the Imported tab, or click "choose files". It accepts:

  • a raw 1408-byte .bin
  • a captured .bin (a whole HTTP response, headers and all)
  • Plutonium's .emblem files, from %localappdata%\Plutonium\storage\t6\players

You don't say which. The importer searches the file for the emblem rather than assuming an offset — it scores candidate positions on whether the bytes there actually behave like emblem layers (shape ids in range, colours within 0–1, sane scales, unused layers only at the end). That's deliberate: the .emblem header layout isn't documented anywhere, so guessing would be fragile. Extra headers and trailing padding are both fine, and a file that isn't an emblem is rejected with a message rather than half-imported.

Only the 1408 bytes it finds are stored, never the original file — so an import becomes the same kind of object as a preset, and no unrecognised container ever reaches the console. Imports live in an imported/ folder next to the app; rename one by clicking its name, remove it with the × in its corner.

If you touch the sniffer's thresholds, re-run its checks:

python tools/check_sniff.py

Adding your own bundled emblems

The presets and community sets are generated, not hand-edited binaries. tools/build_presets.py holds them as readable layer lists:

{
"id": "biohazard", "name": "Biohazard", "category": "symbols",
"layers": [
L(FULL_CIRCLE, "#111519", 0, 0, 0.98),
L(RING, "#C8FF3D", 0, 0, 0.96),
L(FULL_CIRCLE, "#C8FF3D", 0, 0, 0.78),
L(BIOHAZARD, "#0B0E12", 0, 0, 0.66),
],
},

L(shape, colour, x, y, w, h, rot) — position is an offset from the centre as a fraction of the emblem (+y is down), and w/h are the shape's visible size, also as a fraction. Later layers draw in front.

Add an entry to PRESETS or COMMUNITY, then:

python tools/build_presets.py --render

That writes the .bin files and manifests, and drops PNG previews in build/<collection>_previews/ so you can look at what you made before trusting it. Restart the app to pick them up.

Two things the script handles that are easy to get wrong by hand: the game stores scale as a power of two rather than a plain multiplier, and the reference shape images are padded by very different amounts inside their source files (the capsule's bar is 26% of its image; the shield is 70%; the half-circle's flat edge sits at its image's centre, not its edge). w/h describe the ink you actually see, and the padding is measured off the source art and divided out.

Running it

pip install -r requirements.txt
python run.py

Your browser opens to the control panel on its own. On Windows you can also just double-click start.bat.

To build a standalone Windows exe, double-click build_exe.bat — it produces dist\RCTToolkit.exe with everything bundled in. There's no prebuilt download; this is a personal build.

Requirements

  • Windows, macOS, or Linux with Python 3.9 or newer, plus Pillow (installed automatically from requirements.txt)
  • A PS5 and a PC on the same network, or the PC's own mobile hotspot with the PS5 connected to it

Project layout

rct/
config.py ports and file paths
state.py current mode: off, capture, or show
storage.py captured emblems on disk, and their labels
library.py the three emblem collections: preset, community, imported
broadcast.py which emblem is currently selected
proxy.py the proxy server
shapes/
render.py the emblem renderer and format notes
shape_id_map.py the calibrated shape data
sniff.py finds the emblem inside an imported file
web/ the control panel: API plus static frontend
presets/ the bundled preset emblems (.bin + manifest)
community/ the bundled community emblems
tools/
build_presets.py authors both bundled collections
check_sniff.py regression checks for the importer
run.py starts everything

Details on the emblem file format and how it was worked out are in the module docstrings, mainly rct/shapes/render.py.

The control panel

The interface is themed after Black Ops II's HUD — clipped corners, thin amber rules, condensed uppercase labels — without the 2012 skeuomorphic chrome. Colour is used as a signal rather than decoration: amber means active or needs attention, green means confirmed selection, everything else is neutral.

It's plain CSS and plain JavaScript against a stdlib HTTP server. No build step, no framework, no npm — you can edit rct/web/static/style.css and just reload.

Selection is shared across every source: picking a preset, a community emblem, an import or a capture clears whichever was selected before, because only one emblem can be armed at a time. Cards are keyboard-operable (Tab to reach, Enter or Space to select) and every interactive element has a visible focus ring.

License

MIT, see LICENSE. RCT Toolkit is a modified build of BO2 Emblem Toolkit by alexkotr1, who holds the original copyright and wrote the proxy, the emblem renderer and the shape calibration this is built on. The licence notice stays as-is; if you redistribute this, that credit has to come with it.

A note on scope

This only intercepts Black Ops II's own emblem-storage requests. Everything else passes through unmodified, including PSN authentication, which stays encrypted the whole time. Emblem data isn't private information, it's the same thing you already see displayed on other players in-game. This project isn't affiliated with Activision, Treyarch, or Sony.

The images in reference_shapes/ are Black Ops II's own emblem-editor shapes, and remain the property of Activision and Treyarch. They're included because the toolkit needs them to draw a preview of an emblem before you send it to the console — the game itself renders from its own copies, not these. They're here for that, and nothing else.

About

Get Black Ops II emblems onto your own PS5 account. A tiny local proxy feeds a preset, an imported file, or a captured emblem into your in-game editor - you save it, it's yours.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages