Skip to main content

ida-themr 🎨

A pure Python IDA Pro theme toolkit that helps make theming IDA Pro easier. Transform your reversing environment with ease! 🚀

CI Status

Overview 🌟

ida-themr is a powerful toolkit designed to build maintainable IDA Pro color schemes.

Beyond theme conversion, ida-themr also simplifies CSS theme files by resolving variable references and functions, making themes easier to maintain and debug. There is a dearth of information regarding how to make themes etc and I am hoping to consolidate it here for others to benefit! 🛠️

Screenshots

Here are some pictures demonstrating some of IDA theming toolkit's functionality:

Widget Inspector

Chrome DevTools like element inspector written completely in Python without any external dependencies: Widget Inspector

QT Style Switcher

Allows you to save the Qt style based on your operating system (i.e. Fusion, windowsvista, windows):

Qt Style Switcher

Also a Dark Mode toggler that will go through and set os-dark-theme="true" on every property to toggle Dark Mode. Allows you to save the settings and toggle Dark Mode when IDA starts up.

Stylesheet Editor + QSS Processor

A very rudimentary way to fiddle with the generated stylesheet from IDA Pro and a way to edit the QSS stylesheet w/ some basic helper functions for maintainable themes:

Stylesheet Editor + Processor

Features

  • Theme Conversion: Convert individual VS Code themes to IDA Pro effortlessly. 🎭
  • Batch Processing: Convert all installed VS Code extension themes in one go. 📦
  • Intelligent Color Mapping: Maps colors between VS Code and IDA Pro using theme keys and nearest-color matching with HSL adjustments. 🌈
  • Theme Semantics Preservation: Maintains the visual intent of the original theme during conversion. 🖼️
  • Variable Resolution: Replaces ${variable} references with their defined values in CSS files. 🔄
  • Function Simplification: Converts complex functions like @lighten() to base colors for clarity. 🧹
  • Error Logging: Provides warnings for undefined variables or malformed function calls. ⚠️
  • Custom Output: Generates new theme files in a specified output directory for easy integration. 📁
  • Well-Tested: Comprehensive unit tests ensure reliability and accuracy in color conversion and CSS processing. ✅

Installation 📥

The easiest way to install ida-themr is through IDA's built-in plugin manager:

# From IDA Pro's HCLI
ida-hcli plugin install ida-themr

Or download from GitHub releases and install manually:

ida-hcli plugin install path/to/ida-themr-X.X.X.zip

Via pip

# Install from PyPI
pip install ida-themr

# Or install from source
pip install -e .

Manual Installation

Get started with ida-themr manually in just a few steps! 🚀

  1. Clone the Repository:

    git clone https://github.com/mahmoudimus/ida-themr.git
    cd ida-themr
    
  2. Copy to IDA Pro plugins directory:

    Copy the src/ directory contents to your IDA plugins directory:

    • Linux/macOS: ~/.idapro/plugins/
    • Windows: %APPDATA%\Hex-Rays\IDA Pro\plugins\
  3. No Additional Dependencies Needed: ida-themr is a pure Python tool with no external dependencies beyond the standard library. You're ready to go! 👍

Usage 🖥️

Two ways to us it:

Cli + IDA Plugin.

Copy the folders in src and put them in your idaapi.get_user_idadir() directory.

Cli

Included a simple algorithm to port vscode themes to IDA Pro based on a reference IDA Pro template by parsing VS Code theme files (JSONC format), mapping colors to an existing IDA Pro theme, and generating compatible CSS files for IDA Pro.

How It Works 🛠️

  • Extracting colors from both source (VS Code) and target (IDA Pro) themes.
  • Building mappings to associate colors with theme elements.
  • Using Euclidean distance in RGB space to find the closest color matches when direct matches aren't available.
  • Applying a three-way adjustment in HSL space to fine-tune colors to maintain relative contrast and brightness. We compare the saturation and lightness of the source and destination colors, then adjust the remapped color's saturation and lightness by a fraction of the difference to maintain relative contrast and brightness.
  • Replacing colors in a template CSS file for IDA Pro with the remapped colors.
  • Generating the final theme files.

Supports

  1. Color Parsing: Supports CSS hex formats (#RGB, #RGBA, #RRGGBB, #RRGGBBAA) and converts them to normalized RGB/RGBA values. 🎨
  2. Theme Mapping: Uses theme keys to match colors directly or falls back to nearest-color matching with Euclidean distance and HSL adjustments. 📏
  3. CSS Processing: Resolves variables and simplifies functions in CSS, ensuring clean and maintainable output. 🧑‍💻
  4. Output Generation: Creates new theme directories with remapped CSS files ready for IDA Pro. 📤

IDA supports some SASS directives

  • @def
  • @lighten
  • @darken
  • @importtheme
  • @ifdef/@ifndef -> optional @else -> @endif

Convert a Single Theme 🎯

To convert a specific VS Code theme to IDA Pro:

python3 src/ida_themr.py /path/to/vscode/theme.json /path/to/output/directory

Batch Convert All Installed Themes 🌍

To convert all themes from your VS Code extensions directory:

python3 src/ida_themr.py "*" /path/to/output/directory

Note: If the VS Code extensions directory isn't automatically detected, set the --ext-root flag or the VSCODE_DATA environment variable to point to your VS Code data directory. 🔍

python3 src/ida_themr.py "*" /path/to/output/directory --ext-root /path/to/vscode/extensions

Applying the Theme to IDA Pro 🖌️

  1. Locate the generated theme folder in your output directory (named after the theme). 📁
  2. Copy the theme.css file from the folder to your IDA Pro themes directory (usually found in IDA's installation directory under themes/). 📋
  3. Restart IDA Pro, and select the new theme from the options menu under View > Themes. 🎉

Examples 📸

Before Conversion 📝

Here's a sample CSS snippet with variables and functions from a VS Code theme:

@def color-primary #ff5733;
@def color-background @lighten(#ff5733, 20);

.button {
  color: ${color-primary};
  background-color: ${color-background};
}

After Conversion 🎨

After processing with ida-themr, the CSS is simplified and colors are remapped for IDA Pro:

.button {
  color: #ff5733;
  background-color: #ff5733; /* simplified */
}

Testing 🧪

ida-themr is thoroughly tested to ensure reliability. The test suite covers color conversion, JSONC parsing, HSL adjustments, variable expansion, and more. To run the tests:

python3 tests.py

You'll see detailed output confirming the functionality of each component. ✅

Contributing 🤝

We welcome contributions to ida-themr! Whether it's bug fixes, new features, or documentation improvements, your help is appreciated. Here's how to contribute:

  1. Fork the Repository and clone it locally. 🍴
  2. Make Your Changes in a new branch. 🌿
  3. Run Tests to ensure everything works (python3 tests.py). 🧪
  4. Submit a Pull Request with a clear description of your changes. 📬

Please follow the coding style and include tests for new functionality. Let's make ida-themr even better together! 💪

License 📜

This project is licensed under the MIT License - see the LICENSE file for details. 📄

Contact 📧

Have questions, suggestions, or need support? Open an issue on GitHub or reach out to mahmoudimus. I'm happy to help! 😊

Acknowledgments 🙏

@SmugNugg for the idea about resolving inlined css functions. @can1357 for his IdaThemer from which this is shamelessly ported and enhanced.

Happy theming with ida-themr! Let's make IDA Pro as colorful as your imagination! 🎨🚀

Metadata

Release files for ida-themr 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ida-themr 0.1.0
File Size Uploaded
ida_themr-0.1.0.tar.gz 6.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ida-themr 0.1.0
File Interpreter ABI Platform
ida_themr-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 12.2 kB

Release files / ida_themr-0.1.0.tar.gz

Download URL ida_themr-0.1.0.tar.gz
Size 6.1 kB
Tags Source
SHA-256 checksum
How to use checksums
7653c09e3b16e9a303b5298898339050873ce79441eb8e76f75a3351786193a8
BLAKE2b-256 checksum
How to use checksums
958f3b6be78e7eb011ef87cb149fb7bfa737e94d10c832126b231de6d898488e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 24, 2025.

Transparency log

Release files / ida_themr-0.1.0-py3-none-any.whl

Download URL ida_themr-0.1.0-py3-none-any.whl
Size 6.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d95752058ddd06a3769c4a310b59390286f3f05a04426d6d230c8291dab4dc72
BLAKE2b-256 checksum
How to use checksums
e6ba719d678e79aa1a1bd6f25cac38f97b25f438c71fc981ad33b319d668302f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 24, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page