# Android IR Blaster: turning a phone into a programmable infrared remote

> IR Blaster is a Flutter application for Android that turns the phone into a configurable infrared remote, using the built-in IR emitter, a USB IR dongle or an audio-to-IR LED adapter as the transmit path. It imports signal databases in Flipper Zero, IRPLUS and LIRC formats, browses GitHub repositories for compatible files, and includes a Signal Tester that brute-forces protocol and code combinations to find unknown codes.

**iodn/android-ir-blaster** — Create custom infrared (IR) remotes using hex codes, raw signals, or import Flipper Zero, LIRC, and IRPLUS files

- Repository: https://github.com/iodn/android-ir-blaster
- Website: https://play.google.com/store/apps/details?id=org.nslabs.ir_blaster
- Stars: 598 · Forks: 59
- Language: Dart
- License: GPL-3.0
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/iodn-android-ir-blaster

## A remote that does not need an IR emitter in the phone

IR Blaster is an Android application for creating, managing and transmitting infrared signals through multiple output methods, including a device's built-in IR emitter, supported USB IR dongles, and audio-to-IR LED adapters.

That list is the reason the app exists. Most modern phones have no infrared emitter at all, which used to mean that a phone simply could not be a remote. The three transmit paths solve that in three different ways, and the app is deliberately hardware-agnostic about which one you use.

The audience is a mixture of three groups. People with an old phone or a regional device that still has an emitter. People who own a cheap USB infrared dongle and want the phone to be the interface. And people who have an audio-to-IR LED adapter, the kind that drives an LED from the phone's audio output.

The app is published on Google Play and on F-Droid under the package identifier org.nslabs.ir_blaster, and the README points to a releases section for the latest APK as well. The requirement is Android 11 or later, which is a real constraint for anyone with an older device.

The implementation is in Dart with Flutter, and the repository layout shows a full cross-platform Flutter project with android/, ios/, linux/, macos/, windows/ and web/ directories even though the product is Android only, plus lib/ for the code, test/, assets/, fastlane/ for the store metadata, tools/ and a l10n.yaml for localisation.

The licence is GPL-3.0, which is the usual choice for an app of this kind and worth noting if you plan to modify it.

## Three transmit paths, and only one needs hardware in the phone

The overview section lists the paths, and the detail matters because the transmitter choice changes what the app can do.

The internal path uses ConsumerIrManager, the Android system service for a built-in IR emitter. It is the simplest case, available only on devices that have the hardware.

The USB path uses a USB IR dongle, with discovery, permission handling and bulk transfers. The requirements section names the supported hardware by identifier, and the requirement is specific:

```bash
   - Built-in IR blaster (Internal)
   - Supported USB IR dongle (VID `0x10C4` or `0x045E`, PID `0x8468`)
```

So a dongle with one of those two vendor identifiers and that product identifier is what the app knows how to drive. The tip in the overview says that at least one transmit path must be available, and that a built-in IR blaster is not required if you use a USB dongle or an audio adapter.

The audio path covers audio-to-IR LED adapters, and the README distinguishes two variants: a mono one-LED adapter, and a stereo anti-phase two-LED adapter. The stereo variant exists because driving an LED from a mono signal means the adapter has to switch the polarity itself, whereas a two-LED adapter driven with an anti-phase signal can use both halves of the output. That is a hardware detail the app has to model, and it does.

The transmitter is chosen under Settings, then IR hardware and learning, then IR Transmitter, with options for Internal, USB, Audio with one LED and Audio with two LEDs. The user-facing card shows live capability updates and drives the USB permission request flow, so the app tells you what it can do with the hardware you have connected right now.

## Auto Switch, and the Signal Tester that brute-forces unknown codes

Two features stand out from the rest of the list, because they address the two things that are actually tedious about infrared.

Auto Switch is an optional mode that uses the USB dongle when a supported one is attached and otherwise falls back to the internal emitter. The README notes it is disabled if Audio is selected, which makes sense, since an audio adapter and a dongle are physically different outputs and switching between them mid-session would not be useful.

The Signal Tester is the more interesting one. The feature list calls it Signal Tester, with the alternatives IR Finder and Infrared Bruteforcer, and describes it as systematically trying protocol and code variations to discover working signals. The user-facing section says it was promoted as an IR bruteforcer to help discover unknown codes.

That is a genuinely different approach from the rest of the app. The rest of it is a library of known encodings, and the Signal Tester is a search over the encoding space: for a device whose remote you do not have, you can sweep combinations of protocol and code and find the one your device accepts. The protocol support is described as rich, with a raw-signal mode for precise mark and space patterns, and the two are complementary, because a protocol encoder is right when you know the protocol and the raw mode is right when you do not.

It is also the feature most likely to be slow and most likely to be the reason someone keeps the app, since the alternative to brute forcing is spending an evening with a hardware remote and a universal learning device.

## Imports are the real value: Flipper, IRPLUS, LIRC and a GitHub Store

The import and export section is where the app earns its place, because the formats are the ones other projects already publish.

Flipper Zero .ir files are supported, as are IRPLUS .irplus and XML files, which the feature list marks as beta, and LIRC .conf, .cfg and .lirc files, also marked as beta. JSON backups are supported for import, and remotes can be exported to Downloads.

The GitHub Store is the feature that goes one step further. The README describes it as a store for browsing compatible IR files directly from GitHub repositories, and the usage instructions spell out the flow: open Settings, then Tools and shortcuts, then GitHub Store, enter a GitHub repository or folder URL, load the repository when you want to browse it, open a supported file to preview how it will be parsed, and then import it into a new remote or add the compatible buttons to an existing remote.

Two details are worth noting. The preview step, where you see how a file will be parsed before importing it, exists because the import formats are heterogeneous and a mis-parse is otherwise invisible until the button fails to do anything. And importing into an existing remote rather than only creating a new one is what makes the library grow over time rather than fragment into dozens of one-button remotes.

The maintenance actions in the same settings area complete the set: restoring the built-in demo remote, and deleting all remotes.

The beta labels on the IRPLUS and LIRC importers are the honest caveat. They work, and they are the most convenient path for anyone with an existing LIRC database, but the app is not yet claiming they are finished.

## Learning Mode captures a physical remote through a USB dongle

Learning Mode is the fourth way to get codes into the app, and it is the one that does not require a database at all.

It is reached from Settings, then IR hardware and learning, then Learning Mode, and it requires a supported USB learning dongle. The flow it offers is to capture a button from a physical remote, preview the learned signal, replay it, and then save it into a new or existing remote.

The replay step is the part that makes it useful rather than merely possible. A captured signal can be tested immediately against the real device before it is committed to a remote, which distinguishes a good capture from a bad one without leaving the app. The preview adds a second check, showing the signal shape before it is transmitted, which is how you notice a capture that started a few milliseconds late.

This is also the path with the sharpest hardware requirement. Learning needs a dongle that can both receive and replay, which is a narrower set than the transmit-only dongles the app supports, and the supported vendor and product identifiers are the same ones listed in the requirements.

The limitation is that the feature is bounded by what a learning dongle can do. A cheap dongle that can only transmit will appear in the app and work for sending, but Learning Mode will not light up for it, and the README's wording is careful to say supported USB learning dongles rather than supported USB dongles.

## A Flutter codebase with fastlane, localisation and a multi-platform shell

The repository tells you how the project is put together, and it is a conventional Flutter application with a few things worth noting.

The root has the standard Flutter directories, android/, ios/, linux/, macos/, windows/ and web/, alongside lib/ for the application code, test/ for the tests, assets/ for images and fonts, and a fastlane/ directory that holds the store metadata, since the badge image in the README is pulled from fastlane/metadata/android/en-US/images/icon.png. The presence of a full iOS, desktop and web shell for an Android-only product is the usual Flutter story: the project was created with all platforms enabled and only the Android one is filled in.

There is also a tools/ directory, a .gitmodules file, a .flutter-plugins file, analysis_options.yaml for the Dart analyser, l10n.yaml for the localisation setup, and a report-source.md file that the README does not explain.

The release line is quick and regular. v3.4.3 on 2026-09-27, v3.4.5 on 2026-09-28 and v3.4.6 on 2026-10-15, with the last push to the repository on 2026-10-15. The version numbers in the release names carry a build counter, 3.4.6+49 for example, which is the pattern for a Flutter app distributed as an APK where the build number matters for the store listing.

The app is distributed both through the stores and as a plain APK from the releases section, and the installation instructions say to enable installation from unknown sources if needed. That is the standard sideloading route, and it is worth remembering that the F-Droid build is the one that is built from the source you can read.

## Conclusion

IR Blaster suits Android users whose phone has no infrared emitter and who want one app that can drive a television, a projector or a home automation controller, and it suits the Flipper Zero and LIRC communities because it reads the file formats those projects already publish. It does not suit you if you have no way to emit infrared at all, since at least one transmit path is a hard requirement, and it does not suit a workflow that depends on the beta import formats, since IRPLUS and LIRC import are still marked as beta. Check three things before you install it: that you have one of the three supported transmit paths, in particular a supported USB dongle with the vendor and product identifiers listed in the README if you plan to use learning mode, that the remote format you need is one of the supported imports rather than a hand-transcribed code list, and that the GPL-3.0 licence is acceptable for how you intend to use it. The newest release is v3.4.6 from 2026-10-15 and the last push to the repository was on the same day.

## FAQ

### What hardware does Android IR Blaster need?

At least one transmit path: a built-in IR emitter used through ConsumerIrManager, a supported USB IR dongle with vendor identifier 0x10C4 or 0x045E and product identifier 0x8468, or an audio-to-IR LED adapter in mono one-LED or stereo anti-phase two-LED mode. Android 11 or later is required.

### Which file formats can IR Blaster import?

Flipper Zero .ir files, IRPLUS .irplus and XML files, and LIRC .conf, .cfg and .lirc files, the last two marked as beta, plus JSON backups of the app's own remotes. The GitHub Store can browse repositories and import compatible files directly.

### What is the Signal Tester in IR Blaster?

It is the app's brute force mode, also described as IR Finder or Infrared Bruteforcer, which systematically tries protocol and code variations to discover a working signal for a device whose remote you do not have.

### How does Learning Mode work?

It needs a supported USB learning dongle. You capture a button from a physical remote, preview the learned signal, replay it to check it against the real device, and then save it into a new or an existing remote.

### Where can I get Android IR Blaster?

It is on Google Play and on F-Droid under the package identifier org.nslabs.ir_blaster, and the README also points to the releases section for the latest APK. The licence is GPL-3.0 and the app requires Android 11 or later.

## Sources

- [iodn/android-ir-blaster on GitHub](https://github.com/iodn/android-ir-blaster)
- [License: GPL-3.0](https://github.com/iodn/android-ir-blaster/blob/master/LICENSE)
- [Project website](https://play.google.com/store/apps/details?id=org.nslabs.ir_blaster)
- [README](https://github.com/iodn/android-ir-blaster/blob/master/README.md)
- [Releases](https://github.com/iodn/android-ir-blaster/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/iodn-android-ir-blaster
