hCRI Companion
hCRI.io Companion for Android, iPhone & iPad
Bluetooth spectrometer client

Your spectrometer, wired straight into hCRI.io.

hCRI Companion connects to your Hopoocolor HPCS, Torch Bearer or X-Rite ColorMunki spectrometer over Bluetooth, reads the full spectrum off the sensor, and uploads it to your hCRI.io account in one tap — no cable, no CSV export, no re-typing numbers off a tiny screen. It's on Google Play for Android phones and tablets, and open for testing on iPhone and iPad.

Android: on Google Play · iPhone and iPad: open for testers · Android 7.0+ · iOS / iPadOS 15.1+ · Bluetooth LE required
What it does

Everything the meter can tell you — read on your phone, filed to your account.

The app doesn't just relay raw numbers off the sensor. Every colorimetric value it shows is computed with the exact same math hCRI.io itself uses, so your phone and your account never disagree about what a scan means.

Live spectral power distribution

The full wavelength-by-wavelength curve, straight off the sensor, charted the moment a reading finishes — the same view you'd get plugged into a PC.

CIE 1931 chromaticity plot

x, y, CCT and Duv plotted against the real spectral locus, drawn at the true CIE aspect ratio everywhere — derived from the reading's spectrum, not the meter's own onboard registers, which can drift between firmware states.

Ra, R9, and the full R1–R15 set

Every CRI sample computed with hCRI.io's own ported CIE 13.3 algorithm — the same Ra/R9 your report page will show once the scan is uploaded — plotted as the same color-coded R1–R15 bar chart hCRI.io's own report page uses, right on the Spectrum tab.

Pick your own measurements

Choose which values show on the Main tab's result card, and in what order, from Settings — CCT, Ra, Rf, Rg, any of R1–R15, even CIE x/y, drag-reordered by holding the handle on each row. The rest stay a tap away without cluttering the card after every reading.

One-tap upload, from wherever you are

Connect your account once — generate a token right in the app with your hCRI.io username and password, or paste in one you've already made. From then on, a reading is one button away from becoming a report — the Upload button lives on both the Main tab and the Data tab, so you're never more than a tap from sending a scan.

Upload preview

See the exact wavelength/value pairs about to be sent before you send them — the same payload hCRI.io will recompute everything from.

Every reading, saved automatically

The History tab keeps your most recent readings (up to 100; unuploaded ones are protected). Rename a reading, re-upload it later, or delete it — renaming before upload sends it to hCRI.io under that same title. Tap View on any past reading to reopen its full measurement grid, spectrum, CIE plot, and R-values, exactly as they looked the moment it was taken. Flicker samples are saved too, in their own list, and can be added to a reading later.

Private cloud backup

With your API token saved, the app backs up your reading history and saved flickers to your own hCRI.io account after each change, so a reinstall or a new phone doesn't lose them. It is private to you — not a report, never shown publicly — and can be switched off in Settings.

Bulk upload, straight from History

Hold a reading in History to start selecting, check off any number of past readings and upload them to hCRI.io in one go — no need to open and send each one individually.

Export any reading as CSV

Share a single reading or your entire history as CSV straight from the Data or History tab — handy for a quick spreadsheet check without ever opening hCRI.io.

Try it without a meter

No meter connected? Tap Show a test reading to load the spectrum of a random public hCRI.io report and explore the stats and charts. It's clearly marked as sample data, never saved to History and never uploaded.

A TM-30 report, right in the app

Any reading — uploaded or not — opens a full IES TM-30-18 report on your phone or tablet (in its own window with an X on a tablet), ready to scroll or share as a PDF. Uploaded readings also get Copy and Report buttons for their hCRI.io page.

Know which LED it is

The app suggests the LED brand, model and CCT from the spectrum and your title, and you confirm it with one tap — or add it yourself. It goes up with the report and shows on the TM-30.

Reconnects itself, recovers from crashes

The app clears out stale Bluetooth connections on its own after a reload — no more power cycling the meter. If something still goes wrong, a crash lands on a "Try Again" screen instead of kicking you back to your home screen.

Built for a session at the light bench

A short haptic tick confirms a reading finished (a different pattern if it failed) without needing to look at the screen, and an optional setting keeps the screen awake for as long as the meter stays connected.

Continuous readings and flicker

On meters that support them, tap Live for a continuously updating spectrum, or Flicker to watch frequency and percent flicker as they happen — no extra gear, just the same connection. Flicker can be taken with a reading or on its own, and uploads to hCRI.io.

Torch Bearer and ColorMunki support

Reads the Torch Bearer spectrometer through a small open-source ESP32 bridge, showing the spectrum exactly as the meter reports it (matching the open-source tobes-ui software). Also reads the ColorMunki Photo/Design with its Argyll / X-Rite factory calibration, in high resolution (3.3 nm), and a low-light mode for dim sources. Needs the bridge — see the bridge setup guide.

Made for iPad and tablets

On an iPad or Android tablet the app opens up: every chart at once (spectrum, CIE, R1–R15 and, when a reading has one, flicker), your History alongside, and the Data tab in its own space. Landscape puts the big chart on the left with the others stacked beside it; portrait swaps to a roomy chart with History and Data underneath. Settings, the TM-30 report and any past reading open as windows you close with an X.

Drag a chart to make it big

On a tablet in landscape, grab the handle on any chart and drop it on the large one (or just tap the handle) to swap it in. The app remembers your choice for the main page; past readings you open from History always start in the standard order.

Compare readings side by side

Select two to six readings in History and tap Compare. Each gets its own card with its stats and a chart you can switch between SPD and Flicker, followed by an overlay of all of them — spectra scaled to their own peak, or flicker waves with Wave / Risk views and zoom — and a metrics table showing the difference from the first reading.

See it on a photo (iPad)

The same “See it on a photo” tool as hCRI.io, built into the iPad app: use a photo to see how the light you measured renders colour, in a large centred window with an X to close. On phones it's one swipe left from the TM-30 report.

Smoother device switching

Several meters in range? Scanning, connecting and switching between them has been refined a lot: the picker stays up to date, a meter that's momentarily busy is retried, and you can hop to another one without starting over.

Compatibility

Hopoocolor HPCS, Torch Bearer and ColorMunki

Each model's own BLE layout is handled on its own terms — the app reads the advertised device name and picks the right field map automatically.

Model HPCS-310 Model HPCS-310P Model HPCS-330 Model HPCS-330P Model HPCS330Pro Model Torch Bearer (via ESP32 bridge) Model ColorMunki Photo / Design (via ESP32 bridge)

The Torch Bearer and ColorMunki need the hCRI ESP32 bridge

These instruments have no Bluetooth of their own, so a small LilyGO T-Display S3 board running our open-source bridge firmware sits between the spectrometer and your phone. The ESP32 bridge setup guide lists the exact board to buy, how to connect it and how to install the firmware, step by step. It also works with the X-Rite ColorMunki Photo and Design. The Hopoocolor HPCS meters connect directly and need nothing extra.

Flicker readings in hCRI.io

Flicker taken with a reading uploads with it and appears in the report's flicker section; a stand-alone flicker sample can be uploaded from the Flicker tab with its own title and notes and shows up under Explore → Flicker on hCRI.io, where you can compare flicker readings side by side.

Privacy

Your readings stay yours

hCRI Companion doesn't collect, store, or transmit anything about you or your readings on its own -- there's no analytics, no tracking, no third-party server in the loop at all.

Nothing leaves your phone by default

A reading lives only on your device -- in its local History -- until you tap Upload. There's no background sync, no account required just to take a measurement, and no copy kept anywhere else.

One destination: your own hCRI.io account

Uploading sends the spectrum straight to the hCRI.io account you sign in with -- never to us, never to any other server. Your hCRI.io username and API token are stored only in your device's secure keychain, not in this app's own backend (it doesn't have one).

No analytics, no telemetry

No usage tracking, no crash reporting service, no advertising SDKs. The only network calls this app ever makes are the one you trigger with the Upload button.

How it works

From meter to report, in one sitting

Set the account connection up once. After that, every scan is a straight line to hCRI.io.

Connect your hCRI.io account

Open the app's Settings and tap Generate Token to sign in with your hCRI.io username and password and create a token right there, or paste in a token you've already created from Profile → API on the website. This only needs doing once.

Pair with your meter

On the Main tab, connect to your HPCS meter over Bluetooth, or use Scan for Nearby Meters if it isn't found automatically. If a reload ever leaves it stuck, the app clears the stale connection on its own.

Take a reading

Tap Take Reading. The spectrum, CCT, Duv, Ra and R9 appear as soon as the meter finishes its exposure, with a short buzz to confirm it landed.

Check the Spectrum tab

Swipe between the SPD curve, the CIE 1931 plot, and the R1–R15 bar chart to confirm the reading looks right before it goes anywhere.

Review, title, and upload

On the Data tab, open Upload Preview to see exactly what will be sent, optionally give the scan a title, then tap Upload to hCRI.io -- or upload straight from the Main tab if you'd rather not switch.

Come back to it anytime

Every reading is kept in History. Rename it, re-upload it later, share it (or your whole history) as a CSV, or delete it -- whenever you get to it. Tap View on any of them to reopen its full measurement grid, spectrum, CIE plot, and R-values.

Find it in your account

The scan appears in your hCRI.io reports moments later, with Ra, R9, Rf, Rg and the full spectrum recomputed server-side.

Get the app

Now on Google Play, and in testing on iPhone and iPad

Android users can install from Google Play. iPhone and iPad are in open testing through TestFlight — it takes a couple of minutes to get in.

Android

hCRI Companion is on Google Play for Android 7.0 and newer. Install it like any other app, allow Bluetooth when asked, and it updates through Google Play.

Get it on Google Play

iPhone and iPad

Email your details

Email fizzgig@hcri.io with your first name, last name and the email address of your App Store (Apple) account.

Get access

You'll be given access and receive an invitation to test the app through Apple's TestFlight.

Install from TestFlight

Accept the invitation and install hCRI Companion on your iPhone or iPad.

Email for iOS access

What you'll need

  • Android 7.0 or newer, or iPhone / iPad with iOS / iPadOS 15.1 or newer
  • Bluetooth Low Energy support
  • A Hopoocolor HPCS-series meter, or a Torch Bearer or ColorMunki Photo / Design with the hCRI ESP32 bridge
Need help? Read the full manual or grab the PDF. Questions or bugs: fizzgig@hcri.io.
Legal

Privacy Policy

Last updated: September 28, 2026

Overview

hCRI Companion ("the app") is an independent Bluetooth client for Hopoocolor HPCS-series spectrometers, the Torch Bearer and the ColorMunki (via the open-source ESP32 bridge), built to read spectral data and upload it to your own hCRI.io account. The app has no backend server of its own, and does not collect, sell, or share your data with any third party. There is no analytics SDK, no advertising SDK, and no crash-reporting service built into the app.

Data stored on your device

— Meter readings you take (spectral data, computed CCT/Ra/R9/etc., and any title you give a reading) are stored locally in the app's private storage until you delete them or uninstall the app.
— Your hCRI.io username and API token, if you sign in, are stored in your device's secure keychain (Android Keystore / iOS Keychain) — not in plain text, and not readable by other apps.
— The Bluetooth ID of the most recently connected meter is stored locally so the app can reconnect to it faster next time.

Data you choose to share

— Tapping "Upload to hCRI.io" sends that one reading's spectral data and title to your own hCRI.io account over an encrypted (HTTPS) connection.
— If you use the optional "Generate Token" button in Settings instead of pasting in an existing API token, your hCRI.io username/email and password are sent once, over the same encrypted connection, to sign in and create a new token. Your password is never stored by the app and never leaves that one request.
— "Share CSV" and "Share Debug Log" hand data to your phone's own share sheet so you can send it wherever you choose (email, messaging, etc.) — the app itself does not see or record where that goes.
— These, plus pairing with your meter over Bluetooth, are the only network/radio activity the app ever initiates, and only when you trigger them.

Permissions and why the app asks for them

— Bluetooth (scan / connect): required to find and read data from your spectrometer over Bluetooth Low Energy.
— Internet: required only to upload a reading to hCRI.io when you tap Upload.
— Vibrate: a short buzz confirming a reading finished — purely local, no data involved.

Data retention and deletion

Locally stored readings and credentials are removed automatically if you uninstall hCRI Companion. You can also delete individual readings from the app's History tab at any time (tap the trash icon on any reading), or clear your saved hCRI.io credentials from Settings — both take effect immediately, with nothing further to request.

A reading you've uploaded to your hCRI.io account is kept there until you remove it yourself: sign in at hcri.io, open your Reports, and tap the trash icon on any report to delete it — the same action as deleting a reading in the app, just on the server copy. Deleting your hCRI.io account removes every report stored under it.

Children's privacy

hCRI Companion is a measurement tool for lighting and photography enthusiasts and professionals. It is not directed at children, and we do not knowingly collect data from children.

Changes to this policy

If this policy changes, the updated version will be posted at this same page with a new "Last updated" date above.

Contact

Questions about this policy: fizzgig@hcri.io

Support hCRI

hCRI.io and hCRI Companion are free, ad-free and built by one person. If they save you time, you can buy me a coffee. Entirely optional, and nothing is locked behind it.

Buy me a coffee