hCRI.io Companion Manual

hCRI Companion β€” User Manual

Covers app version 1.28 Β· Last updated October 15, 2026 Β· Source on GitHub β†—

01 Overview

hCRI Companion is an independent app for Android and iPhone that connects to a Hopoocolor HPCS-series spectrometer (or a Torch Bearer, via the ESP32 bridge) over Bluetooth Low Energy, reads the full spectrum off the sensor, computes the same colorimetric values hCRI.io itself computes, and uploads a reading to your hCRI.io account in one tap β€” no cable, no CSV export, no re-typing numbers off the meter's own tiny screen.

Every CCT, Duv, Ra, Rf, Rg, and R1–R15 value shown in the app is computed with the exact same algorithm hCRI.io's report page uses, so a reading never disagrees with itself between your phone and your account.

Supported meters

HPCS-310 HPCS-310P HPCS-330 HPCS-330P HPCS330Pro Torch Bearer (via ESP32 bridge)

The app detects which model you're connected to from its advertised Bluetooth name and reads its data with that model's own field layout automatically β€” nothing to configure. The full, up-to-date list (including which models are independently verified against a real captured reading) is always on the app's own Settings β†’ About tab.

The Torch Bearer and ColorMunki need the ESP32 bridge

The Torch Bearer and the X-Rite ColorMunki Photo / Design have no Bluetooth of their own. A LilyGO T-Display S3 (or S3 Pro) board running the open-source hCRI bridge firmware connects to them by USB and talks to the app over Bluetooth. The ESP32 bridge setup guide covers which board to buy, how to connect it and how to install the firmware. Hopoocolor HPCS meters connect directly and need no bridge. See Using a Torch Bearer.

What's new in the latest update (Android 2026.10.22.3, iOS 1.28)

  • Share card. A new card icon at the right end of the chart dots on Main (and a Card button on each History row, next to TM-30) makes the same one-page summary card as hCRI.io: Rf and Rg, CCT, Duv, Ra, R9, the spectrum, the color vector graphic (drawn like the TM-30 report’s) and the local fidelity bars, using the numbers the app shows for the reading, in light or dark to match the app. Save image keeps it (Android: Pictures › hCRI; iPhone: choose Save Image in the share sheet) and Copy image puts it on the clipboard so you can paste it into a message. Long-press the icon for its tooltip.
  • iOS: update notice. The iPhone app now tells you when a newer production version is available in TestFlight. A banner appears at the top, Settings β†’ Update has a Check for updates button, and either one opens TestFlight so you can install it.
  • History is more reliable. Readings and saved flickers are now stored one at a time instead of as a single large block, so a long History can no longer become unreadable or stop new readings from saving (the “Not saved to History” message). Your existing History is moved over automatically the first time you open the app.

Android 2026.10.18.1

  • Back up your readings to hCRI.io. With your API token saved, the app now backs up your reading history and saved flickers to your own hCRI.io account after each change, so reinstalling the app or changing phones no longer loses them. Backed-up data is private to you: it is not a report and nobody else can see it. Readings taken before you sign in are sent once you do. Deleting a reading in the app removes it from the backup too. On a fresh install with your token already saved, the app offers to restore, and Settings β†’ Backup has a Restore readings from backup button. There is a switch to turn backup off.
  • Flicker samples are kept. A New sample on the Flicker page is now saved when it ends, so leaving the page no longer loses it. History has a new Flicker list (switch at the top: Readings / Flicker) where you can rename, view, upload or delete saved samples. A badge shows whether a flicker is In report, In reading or Uploaded to hCRI.io.
  • Add a saved flicker to a reading. A reading in History that has no flicker gets a lightning-bolt button that lists the saved flickers not yet attached to a reading. Pick one and it is copied into the reading (and sent to the report if the reading was already uploaded).
  • Flicker page fix. The “Ready” message no longer covers the flicker controls when there is no spectrum reading.

Android 2026.10.17.1

  • Calmer start screen. Only one spinner now shows while connecting, in the middle of the empty chart. The status line above it is just text, and the chart no longer shows a spinner while measuring or calibrating. The Last reading link is now View last reading with an eye icon, so the title is never cut off.

Android 2026.10.16.4

  • The Switch meter list shows what is plugged into each bridge. With the latest bridge firmware, a bridge says whether a Torch Bearer or a ColorMunki is attached, so the list reads hCRI Bridge Β· Torch Bearer or hCRI Bridge Β· ColorMunki before you connect. A bridge with nothing plugged in is left out of the list. If the only bridge in range has nothing plugged in, the app says so instead of reporting that no meter was found. Bridges on older firmware are still listed as before.

Android 2026.10.16.3

  • Two meters, you choose. When you open the app fresh and two meters are switched on, it now offers the Switch meter list instead of quietly reconnecting to the last one. Coming back to the app after leaving it still reconnects to the meter you were using.

Android 2026.10.16.2

  • Clearer meter names. Hopoocolor meters show just the model (for example HPCS-330P) on Main and in the Switch meter list, without the serial number. A bridge is always listed as hCRI Bridge, followed by what is plugged into it when known (hCRI Bridge Β· ColorMunki), so it reads the same whether or not it is the connected one.

Android 2026.10.16.1

  • Meter data as the makers intend. The Torch Bearer and the ColorMunki now show the spectrum exactly as the meter reports it, with no correction fitted by us. The Torch Bearer spectrum matches what the open-source tobes-ui software shows (we checked an incandescent and an LED side by side: CCT within 1 K, same Ra and R9), and the ColorMunki uses the Argyll / X-Rite factory calibration. Expect CCT, Duv and CRI to differ a little from an HPCS, especially on the Torch Bearer at high CCT. Shared CSVs say SpectralCorrection,none (raw). Needs the latest bridge firmware; older firmware still applies its old correction and says so.
  • Main button caption. The text under the main button stays one fixed height, so the chart no longer stretches when you take a reading.

Android 2026.10.15.2

  • ColorMunki: high resolution. With the latest bridge firmware the ColorMunki reports its spectrum in 3.3 nm bands instead of 10 nm, so narrow peaks (blue LED, phosphor) come out sharper and closer to the HPCS. It is used automatically in normal light; in very dim light the bridge falls back to the steadier 10 nm spectrum. The Logs tab notes high resolution, and a shared CSV's Instrument line says 3.3 nm high resolution or 10 nm.
  • A message instead of a blank chart. Before the first reading the Main chart tells you what to do next: connect, calibrate, turn the dial, or take a reading, and shows progress while connecting, calibrating or measuring. The measurement tiles show a dash until there is a reading, and a View last reading link opens the most recent one from History.

Android 2026.10.15.1

  • Tap again to cancel a reading. While a reading or a ColorMunki calibration runs, the main button reads Measuring… Tap to cancel (or Calibrating…); tapping it stops it and nothing is saved. With the latest bridge firmware the ColorMunki stops at its next step.
  • ColorMunki: closer to the HPCS. The latest bridge firmware applies a correction fitted against an HPCS, which halved the CCT error on lamps it was not fitted on (about 40 K to 20 K), and shared CSVs say SpectralCorrection,applied. Dim light is handled better: up to 4.5 s per integration, several integrations averaged, and the sensor's high-gain mode in near darkness, so dim readings take longer (about 10–15 s) but are steadier.
  • The ColorMunki dial stays current. When you come back to the app it reads the dial again, and a calibration started with the ColorMunki's own button shows Calibrating….
  • The Logs tab says Bridge instead of Torch Bearer for the bridge connection, notes when the ColorMunki calibration set up high gain, and records the ColorMunki's raw sensor data with each reading (for developing its high-resolution mode).

Android 2026.10.14.5

  • Selecting in History works like other apps. Hold a reading's title (or any part of the row that isn't a button) to start selecting, with that reading already checked and a firm haptic. A Select all checkbox appears at the top, and the X cancels. Unchecking the last reading ends selecting. The old Select button is gone.
  • TM-30 and the photo tool are one screen. Swipe left on the TM-30 report, or tap Photo at the top right, to see the light on a photo; swipe right below the photo, or tap TM-30 at the top left, to go back. The X closes it and returns you to Home or History. The bottom bar holds Save image and Share PDF.
  • A cleaner look. History has round selection marks, plain titles and soft Copy / Report / TM-30 buttons. Icons across the app are one consistent line style (no more emoji), and every X to close looks the same.
  • Android, light mode: switches that are off are now clearly visible in Settings.
  • Fix: uploading a second reading no longer overwrites the first. Taking a new reading and uploading it right after uploading the previous one replaced the earlier report on hCRI.io. Each new reading now gets its own report; uploading the same reading again still updates its report.
  • Settings β†’ Bridge. The Torch Bearer section is now called Bridge and holds Flip screen, which works for both a Torch Bearer and a ColorMunki. The spectrum-correction switch is gone: newer bridge firmware applies the correction itself (older firmware still gets it from the app), so readings always match the HPCS.
  • Colour spectrum on the bridge's own screen. The T-Display S3 draws the spectrum in wavelength colours, and with the correction built in it shows corrected CCT, Duv, Ra and R9 without the app. Needs the latest bridge firmware.
  • ColorMunki Photo / Design support through the ESP32 bridge: ambient readings of the full spectrum, with CCT, Duv, CRI and lux. Calibrate with the dial in the calibration position, then measure in ambient. See Using a Torch Bearer.
  • Calibration limit (Settings β†’ ColorMunki): the app asks for a fresh calibration after a set number of hours (default 1, 0 turns it off), because the sensor's dark reference drifts.
  • Settings reorganised into sections, with each explanation behind a ? button next to the setting.
  • The bridge is now called hCRI Bridge. Newer bridge firmware advertises as hCRI Bridge instead of Torch Bearer, and its screen says HCRI BRIDGE until an instrument is plugged in. Once connected, the app shows the instrument, Torch Bearer or ColorMunki. Older firmware still works. The no-instrument message is now generic.
  • Galaxy Z Fold8 and other 4:3 unfolded foldables get the same charts-left, History-and-Data-right layout as the nearly square Fold Ultra, in both orientations.
  • TM-30 report: Save image makes a PNG of the whole report page, and the three action buttons (On a photo, Save image, Share PDF) are now icons with captions. On iPhone the PDF now fills the whole page instead of leaving blank margins.
  • Reading names stay in sync: renaming a reading on Main updates it in History straight away, and renaming it in History updates Main.
  • The meter list and header show ColorMunki or Torch Bearer to match the instrument on the bridge, and calibration problems now say "Calibration failed".

What's new in 1.28

  • iPad and tablet layouts. On a tablet every chart is shown at once: the spectrum, CIE, R1–R15 and (when the reading has one) flicker. In landscape the big chart sits on the left with the others beside it and History, Data and Settings are a tap away; in portrait the charts sit on top (swipe between them) with History bottom-left and Data bottom-right. There is no tab bar on a tablet: Settings is the cog next to the ?.
  • Drag a chart to make it big (landscape tablets): hold the handle on a chart and drop it on the large one, or tap the handle. The choice is remembered for the Main page. Readings opened from History always start in the standard order.
  • Windows with an X. On a tablet Settings, the TM-30 report, a reading opened from History, Compare and the photo tool open as windows over a dimmed page, closed with the X. Settings uses two or three columns, with About as the third column in landscape.
  • Compare shows each reading as its own card with its stats and a switch between its SPD and Flicker chart, then an overlay of all of them (SPD, or flicker with Wave / Risk views and zoom) and the metrics table. Cards run three across in landscape, two in portrait, one on a phone.
  • See it on a photo (iPad). A new button next to TM-30 opens the hCRI.io photo tool in a large centred window.
  • The CIE chart keeps its true shape wherever it is shown, as on hCRI.io. Tablets also show flicker for any reading that has it.

What's new in 1.27

  • Auto-connect to meter can be turned off. Settings β†’ Auto-connect to meter (on by default). When it is off the app only connects when you tap Connect to Meter, not when it opens or when you switch back to it.
  • No connection attempts while Bluetooth is off. The app now checks Bluetooth first. If it is off, or (iPhone) the app has not been allowed to use it, nothing is attempted when you open or return to the app and the Main status line says Bluetooth is off or Bluetooth access is off. Tapping Connect to Meter explains the problem, with an Open Settings button.
  • Friendlier network messages. Uploads and other hCRI.io requests give up after a short time with a clear "can't reach hCRI.io" or "took too long" message. When History is full, readings you have not uploaded are kept and the oldest uploaded ones are dropped first; the app tells you if a reading or its LED details could not be saved.
  • Accessibility and small fixes. Screen reader labels on switches and tabs, the update notice fades out cleanly and names the right store, the keyboard no longer covers fields on scrolling screens, and incomplete Settings fields now say "Missing information".

What's new in 1.26

  • LED suggestions can be turned off. Settings β†’ LED suggestions (on by default). When it is off the app stops asking hCRI.io to suggest an LED and hides the suggestion cards on Main and in History; you can still add LED details yourself with the πŸ’‘ button. Switching it back on brings the suggestions back.
  • A new update notice. When a newer version is available, a small grey Update available capsule slides down from the top of the screen and hovers there with a blue Update button and a Γ— to hide it until the next launch. It replaces the full-width blue bar.

What's new in 1.25

  • Generate API Token now works on the first tap with the keyboard open (it used to take a second tap, the first only closed the keyboard), and the password box has an eye button to show or hide what you type. The password is always hidden when the window opens; hold the eye to see its label. The same first-tap fix applies to Save and Forget Credentials in Settings.
  • Main follows LED changes made in History: if you edit the current reading's LEDs from History, the LED button, the Data tab and the TM-30 report on Main show the new LEDs when you come back.

What's new in 1.24

  • More than one LED per light. Many lights have two or more different LEDs (for example a 1800K Nichia plus a red Luminus). The LED window now holds a list: each LED has its own brand, model and CCT, kept together, with + Add another LED. Finished LEDs collapse into a Brand / LED / CCT list with an Edit button, and the new LED opens and scrolls into view. You can remove any LED, or all of them, and Save. All LEDs go up to the hCRI.io report and appear on the TM-30 report. See LED details.
  • Uploading a reading again updates its report instead of creating a duplicate: the report keeps its link, visibility, notes and LEDs, and gets the new title and spectrum.
  • Long-press labels: hold any icon-only button (History row icons, the battery, flicker chart controls, the ? and Γ— buttons, page dots) to see what it is.
  • Connecting no longer blocks the app. The main button reads Tap to cancel while connecting, the status shows the current step (scanning, connecting, setting up), and History, Settings and Logs stay usable.
  • Password managers and passkey autofill now work on the username, password and token fields in Settings (iCloud Keychain / Passwords, Google Password Manager, 1Password, Bitwarden and others).
  • iPhone haptics: button taps are now a light tap and a finished reading or upload uses the system success / error feedback (iOS can't shorten the old vibration, which felt like a long buzz).
  • Test readings include flicker when the public report has a flicker reading: the Flicker page and button appear (view only) and show the report's first flicker capture.
  • History now shows ✎ Edit beside a reading's LED line so it's clear you can tap it to change the LEDs.

What's new in 1.23

  • Layout fixes: the πŸ’‘ Add LED button no longer overlaps the reading title on Main, History rows have more room between the CCT/Ra values and the icons, and the Generate API Token window stays above the keyboard on iPhone and Android.
  • On iPhone the app is named hCRI under its home-screen icon (the full name did not fit).

What's new in 1.22

  • The LED details window now stays above the keyboard on Android, so the last field and the Save button are no longer covered.

What's new in 1.21

  • LED details: the app suggests the LED (brand, model and CCT) from the shape of the spectrum and the reading's title, and asks you to confirm it. You can also add or edit the LED yourself with πŸ’‘ Add LED details on Main, in History, and on the Data tab. Confirmed LED details go up to the hCRI.io report and appear on the TM-30 report.
  • The TM-30 PDF now matches the Color Rendition Report you get from hCRI.io.

What's new in 1.20

  • In-app TM-30 report: after any reading (including a test reading) a TM-30 button opens the full IES TM-30-18 Color Rendition Report on your phone β€” scroll through it, or tap Share PDF at the bottom to send it as a PDF. It is calculated in the app, so it works offline and for readings that were never uploaded. The TM-30 button in History now opens this report too.
  • Fixed the drag and drop in Settings β†’ Main Screen Measurements (rows no longer jump around), and Reset to Default now moves the rows back.

What's new in 1.19

  • More reliable update checks: the app re-checks Google Play each time you return to it, and Settings β†’ Update shows what Play reported (the newest and installed version codes), which is also written to the Logs tab.

What's new in 1.18

  • Layout fix for the Galaxy Z Fold 8 Ultra: the bottom tab labels (Home, History, Settings) and the action-bar labels above them are no longer cut off at the bottom of the screen.

What's new in 1.17

  • Updates now come from Google Play. The app checks Play for a newer version when it opens, and the banner (and Settings β†’ Update) has a button that opens the app's Play Store page, where you install the update. The old in-app update screen is gone.

What's new in 1.16

  • Flicker readings now upload to hCRI.io: with a reading (attached to its report) or on their own, with a title and notes.
  • A redesigned Flicker tab: New sample, Add to reading / Redo for reading, one shared Stop, a ? help button and the flicker settings gear in the top-right of the chart.
  • The bottom Flicker button only opens the Flicker tab; Flicker is hidden while Live is running.
  • History and Data actions are now icons with captions (cloud = upload to hCRI.io, tray = share, eye = view, trash = delete); readings that include flicker show a small waveform icon.
  • On the T-Display-S3 Pro, the bridge firmware shows battery percentage and can power a Torch Bearer from its own battery.

What's new in 1.15

  • Torch Bearer support, with a built-in spectral correction.
  • Continuous (Live) readings and Flicker on meters that support them.
  • Device scanning, connecting and switching between meters refined a lot.
  • History: Share selected readings, a restyled top bar, and a title editor whose Save works on the first tap.
  • Shared CSV files now end with a short summary of the computed values.
  • Flicker readings can now be uploaded to hCRI.io (see 1.16 above).

02 Requirements

  • Android 7.0 (Nougat) or newer, or iOS 15.1 or newer on iPhone
  • Bluetooth Low Energy (BLE) support
  • A Hopoocolor HPCS-series meter, powered on and in range β€” or a Torch Bearer connected to the hCRI ESP32 bridge (see Using a Torch Bearer)
  • An hCRI.io account, if you want to upload readings (not required just to take and view them)

03 Installing the app

hCRI Companion is on Google Play for Android. iPhone and iPad are in open testing through TestFlight: email fizzgig@hcri.io from the Companion page and you'll be added as a tester.

  1. AndroidOpen the hCRI Companion page on Google Play and install it like any other app. If you were sent an APK instead, open the downloaded file and allow installs from your browser or Files app when Android asks.
  2. iPhoneiPhone builds are being prepared for TestFlight. Once you're added as a tester, install Apple's free TestFlight app, accept the invitation and install hCRI Companion from there.
  3. Open the appOpen hCRI Companion and allow Bluetooth when asked. It needs Bluetooth to find your meter.

Updating later

If you installed from Google Play, the app checks Play for a newer version each time it opens. When one is available, a small grey Update available capsule slides down from the top of the screen and hovers there with an Update button (opens the Play Store page) and a Γ— to hide it until the next launch; Settings β†’ Update shows Open in Play Store; the update itself is installed from the Play Store page. If you installed the APK directly, there's no automatic check: re-download and install the APK the same way to get a newer build β€” it installs over the existing app and keeps your saved readings, account, and settings. On iPhone, a production TestFlight build shows the same Update available capsule, and Settings β†’ Update has a Check for updates button that opens TestFlight; TestFlight itself also tells you when a new build is ready.

04 Connecting your hCRI.io account

You only need to do this once. From the Settings tab, there are two ways to get a token into the app.

Option A: Generate a token in the app

  1. Tap the key button next to SaveOpens the Generate API Token dialog.
  2. Enter your hCRI.io username or email, and your passwordUsed once to sign in β€” your password is never stored on the device and never sent anywhere else. The password is hidden as you type; tap the eye at the right of the box to check it, and tap again to hide it.
  3. Review the token nameDefaults to "hCRI Companion Data Upload Token" β€” this is the name you'll see later if you list or revoke tokens from Profile β†’ API on the website. Change it if you'd like something more specific.
  4. Tap Generate & SaveThe app signs in, creates a brand-new token under that name, and saves it β€” same as entering one by hand (Option B, step 3 below).

Option B: Paste in an existing token

  1. Enter your hCRI.io usernameThe same username you sign in with at hcri.io.
  2. Enter your hCRI.io API tokenFind or generate this from Profile β†’ API on hcri.io. The field is masked while typing.
  3. Tap SaveThe token is stored in your device's secure keychain (Android Keystore or the iOS Keychain) β€” not in plain text, and not readable by any other app.

The username, password and token fields work with your phone's password manager and passkeys β€” iCloud Keychain / Passwords on iPhone, Google Password Manager on Android, or an app such as 1Password or Bitwarden β€” so you can fill them in with one tap instead of typing or pasting.

Either way, once saved, the fields switch to a locked, read-only view with a Forget Credentials button β€” a deliberate extra step before replacing a saved key, so a stray keystroke can't silently overwrite a working token.

Why generate instead of paste?

It skips a trip to the website β€” sign in once in the app and you're done. Each token you generate (in the app or on the website) is independent and can be revoked on its own from Profile β†’ API without affecting any other device or token.

05 Pairing with your meter

The app looks for your meter automatically when it opens. You can also go to the Main tab and tap Connect to Meter. The app scans for a few seconds and connects automatically if exactly one supported meter is in range.

If Bluetooth is turned off on your phone, a message tells you that Bluetooth is required to take readings, with an Open Settings button that jumps to your phone's Bluetooth settings and an OK button that simply closes it. This message appears when the app opens and when you tap Connect to Meter β€” not every time you switch back to the app. On iPhone, if you have not allowed hCRI Companion to use Bluetooth, a similar message (Bluetooth access is off) sends you to the app's settings. While Bluetooth is off or blocked the app does not try to connect on its own, and the Main status line says why.

Prefer to connect only when you choose to? Turn off Auto-connect to meter in Settings.

If more than one matching meter is found, a picker appears so you choose which one β€” look for its advertised name and signal strength. A small Switch meter button (two arrows) next to the status row lets you reopen that same list later without a fresh scan. Device switching has been refined a lot in 1.15: the list stays current while you look at it, a meter that is momentarily busy is retried automatically, and switching to another meter no longer needs a reset.

Connecting happens in the background, so the rest of the app stays usable while it works. The status line shows the current step (Scanning for meter…, Connecting to meter…, Setting up meter…), and the main button changes to Tap to cancel if you want to stop. History, Settings and Logs can be used the whole time.

No meter handy? See Try it without a meter.

Meter won't connect?

Tap Meter won't connect? Reset connection, underneath the Connect button. This clears a stale Bluetooth connection left over from a previous session β€” the most common reason a meter seems stuck, and something that used to require power-cycling the meter itself.

06 Using a Torch Bearer

The Torch Bearer (and the X-Rite ColorMunki Photo / Design) reaches the app through the hCRI ESP32 bridge, a small LilyGO ESP32-S3 board. You need:

  • a LilyGO T-Display-S3 (16 MB flash) or T-Display-S3 Pro ("Without Camera")
  • a USB-C OTG adapter with a USB-A socket for the instrument plus a USB-C socket for power
  • a power bank (optional on the Pro, which has its own battery)
  • the instrument, and this app on your phone

Where to buy the board, how to connect it and how to install the firmware are covered step by step in the ESP32 bridge setup guide. Once the bridge is flashed and powered, it is listed in the meter picker as hCRI Bridge (older firmware: Torch Bearer) and connects like any other meter; once connected, the header shows Torch Bearer or ColorMunki depending on what is plugged in.

ColorMunki

Turn the dial to calibration and tap Calibrate, then turn to ambient and measure. The app asks for a fresh calibration after the time set in Settings (default 1 hour), because the dark reference drifts. Lux is approximate.

With the latest bridge firmware a calibration takes about 6 seconds, because it also prepares the sensor's high-gain mode for near darkness. Normal readings take a second or two; in dim light the bridge integrates for up to 4.5 s and averages several integrations, so a reading can take 10–15 s. Tap the main button again to cancel. The spectrum is the ColorMunki's own (Argyll / X-Rite factory calibration), with no correction of ours. In normal light it uses the ColorMunki's high-resolution mode (3.3 nm bands, an effective resolution of about 4 nm instead of 11 nm); in very dim light it uses the standard 10 nm spectrum.

Good to know

  • The bridge allows one Bluetooth connection at a time and stops advertising while connected β€” close other Bluetooth tools (such as nRF Connect) if the app can't see it.
  • Its exposure adapts automatically. Hold the sensor about 25 cm from the lamp, ideally behind a diffuser; very close to a bright source it can saturate.
  • No spectral correction. The spectrum is shown as the Torch Bearer reports it, the same as the open-source tobes-ui software. It reads a few percent high in CCT next to an HPCS, more so at higher CCT (in our checks up to about 550 K at 6700 K). Older bridge firmware still applies a fitted correction. Every shared CSV records whether one was applied.
  • Lux and PAR are not calibrated yet β€” treat them as approximate (within about 15 percent of an HPCS).
  • The Torch Bearer takes single readings; Live and Flicker are not available on it.

07 Live readings & Flicker

On meters that support them, the action bar shows a Live button and a Flicker button. Live keeps measuring and updates the spectrum and values continuously until you tap Stop. Buttons for modes your meter doesn't support simply don't appear. While Live is running the Flicker button and the Flicker chart page are hidden; they return when you stop Live.

The Flicker tab

The Flicker button on the action bar only takes you to the Flicker tab (the fourth chart page on Main); it never starts anything. The tab shows the flicker frequency (Hz), percent flicker, flicker index, cycle time and duty, the captured waveform (or a risk chart, with the Wave / Risk switch) and a risk tip. The ? in a circle at the top right explains the options below, and the gear next to it sets the meter's flicker range and sample rate.

There are two kinds of flicker sample, each started with its own button under the chart:

  • New sample measures flicker on its own, continuously. It clears the current reading from Main β€” a reading that was saved stays in History, a live reading you had not saved is gone. When you tap Stop you can Share the sample or Upload flicker it to hCRI.io (see below). When it ends, a New sample is saved to the Flicker list in History (see The History tab), where you can attach it to a reading later.
  • Add to reading (shown as Redo for reading when the reading already has a sample) measures flicker for the reading you just took. The last frame when you tap Stop becomes that reading's flicker sample: it is saved with the reading, shown in History, and uploaded together with the reading. It therefore has no Share or Upload of its own.

While a sample runs, its button pulses and says Sampling…, the other button dims, and one red Stop sits between them. A counter shows how many updates have arrived and the elapsed time.

When each option is available

  • After a reading that has not been uploaded: both Add to reading / Redo for reading and New sample.
  • After the reading has been uploaded: only New sample, because an uploaded report can't change.
  • No reading on screen (or after a New sample): only New sample, with Share and Upload flicker once a sample exists.
  • Imported or test readings: only New sample.
  • Flicker that came with a reading never shows Share or Upload flicker, and the readings you open from History show their flicker without any controls.
  • A note under the buttons reminds you that New sample clears the current reading, and whether it is saved to History.

Auto-connect to meter

On by default. The app looks for your meter when it opens and when you switch back to it (and skips the attempt while Bluetooth is off or blocked). Turn it off to connect only when you tap Connect to Meter. See Pairing with your meter.

Capture flicker with each reading

Settings β†’ Capture flicker with each reading (off by default) takes a one-shot flicker snapshot automatically after every reading. It adds a few seconds per reading. Even when it is off you can add a sample to a reading yourself with Add to reading, before you upload it.

Uploading flicker to hCRI.io

  • With a reading: when you upload a reading that has a flicker sample, the report goes up first and the flicker is then attached to it automatically. It appears in the flicker section at the bottom of the report on hCRI.io.
  • On its own: after a New sample, Upload flicker (cloud icon) opens a small window for a title (up to two lines) and optional notes. Both are remembered and pre-filled next time. The flicker then appears under Explore β†’ Flicker on hCRI.io, where it can be viewed, compared with other flicker readings, and attached to a report.
  • The flicker upload is best-effort: if hCRI.io can't take it, the report upload is not affected, and the Logs tab says what happened.

Flicker readings are also included at the end of shared CSV files.

08 Taking a reading

Once connected, tap Take Reading. The meter takes its exposure, and a short haptic tick confirms the moment it lands (a different pattern if it fails; see Feedback (haptics) in Settings) β€” handy when you're not looking directly at the screen. The spectrum, CCT, Duv, Ra, and the rest of your chosen measurements appear immediately after.

Every completed reading is saved automatically to History β€” there's nothing extra to do to keep it.

09 The Main tab

Main is where you connect, take readings, and review the latest one. Its result card always shows the same layout β€” a grid of measurements, the three swipeable charts, and the action button directly underneath them β€” whether or not a reading has happened yet (before your first reading, everything just reads zero/blank, so nothing jumps around once real numbers appear).

A small ? button beside the Main / Data / Logs tabs opens a short overview of what the app does. Tapping the Home tab at the bottom of the screen always brings you back to Main, even from Data or Logs. On Android, the phone's bottom navigation bar is hidden to give the app more room; swipe up from the bottom edge to bring it back for a moment. While the keyboard is open the bar stays visible, so Back and Home remain reachable.

Icon labels

Buttons that show only an icon have a label: touch and hold one for about half a second and a small tooltip names it (a normal tap still does what it always did). This works on the History row icons, the battery indicator, the flicker chart controls (help, settings, pan and zoom), the ? help buttons, the close Γ— buttons and the page dots.

Try it without a meter

While no meter is connected, a Show a test reading button appears under Connect to Meter. It loads the spectrum from a random public report on hCRI.io, so you can explore the measurements and charts before you own a meter. Tap What's this? under the button for a short explanation.

A test reading is sample data, not yours: it is not saved to History, and Upload (on both Main and Data) is disabled while one is showing. Its title is read-only, and a note under the buttons names the report it came from. Connect a meter and take a real reading to replace it. The button disappears as soon as a meter is connected.

If that public report has a flicker reading on hCRI.io, the test reading also gets the Flicker page and a Flicker button, showing the first (oldest) flicker capture. It is view-only: sampling, sharing and uploading flicker need a meter and a reading of your own.

Measurement grid

Shows CCT, Ra (CRI), Duv, Lux, Rf, R9, and Rg by default. Which measurements appear here, and in what order, is fully customizable from Settings β€” including any individual R1–R15 sample and the raw CIE x/y coordinates.

Spectrum / Chrom / R-Values

Swipe (or tap the dots) between three views of the same reading:

  • Spectrum β€” the full wavelength-by-wavelength power distribution, colored by wavelength, plus a collapsible list of every raw nm/value pair.
  • Chrom β€” the CIE 1931 chromaticity diagram, with your reading's x/y point plotted against the real spectral locus and the Planckian (blackbody) curve.
  • R-Values β€” the full CRI R1–R15 breakdown as a color-coded bar chart, the same chart hCRI.io's own report page uses.

The TM-30 report

Once a reading is on screen β€” including a test reading β€” a TM-30 button appears at the right of the bottom bar (and on every History row). It opens the full IES TM-30-18 Color Rendition Report: Rf and Rg, CCT, Duv, Ra, R9 and chromaticity, the color vector graphic, the spectrum against its reference illuminant, local chroma shift, hue shift and fidelity for the 16 hue bins, and the fidelity of all 99 color samples. Scroll the page (pinch to zoom). Swipe left, or tap Photo at the top right, to see the light on a photo; swipe right below the photo, or tap TM-30 at the top left, to come back. The X closes the report and returns you to Home or History. Two buttons are docked at the bottom: Save image makes a PNG of the full report page (on iPhone choose Save Image in the share sheet to put it in Photos; on Android choose Photos or Files), and Share PDF creates a PDF of the same report and opens your share sheet. The report is calculated on your phone with the same math hCRI.io uses, so it needs no upload and no connection.

Uploading

Tap Upload to hCRI.io to send the current reading. A small green checkmark appears next to the button once it succeeds β€” there's no popup to dismiss on a routine upload. If an upload fails, an alert explains what happened; check the Logs tab for the server's own response if you need more detail.

Uploading a reading that was already uploaded updates that report rather than creating a second copy. The report keeps its ID and link, who can see it, its notes and its LEDs, and takes the new title and spectrum. If you deleted the report on hCRI.io, the next upload creates a new one. (A flicker reading attached on the first upload is left as it was.) A new reading always uploads as a new report of its own; it never replaces the one before it.

LED details

Tell hCRI.io which LED(s) a light uses so the report can be found and compared. Tap the Add LED button (a light bulb) beside the reading's title on Main (it reads LED or 2 LEDs with a tick once set), Edit on the Data tab, or the light-bulb line on a History row (it shows Edit once LEDs are set). The app may also suggest an LED from the shape of the spectrum (you can turn this off in Settings β†’ LED suggestions); tap Yes to accept it or Other to choose yourself.

  • Each LED has a brand, a model and a CCT. Start typing or tap a match from the hCRI.io lists; models seen with the brand you chose are listed first. Leave CCT blank for a deep-red LED.
  • For a light with more than one LED, tap + Add another LED. The new LED opens at the bottom and the window scrolls to it. LEDs you've finished collapse into a Brand / LED / CCT list at the top; tap Edit on a row to reopen it, Done to collapse it again, and Remove to delete it. Keeping each LED's brand, model and CCT together means two different LEDs are never mixed up.
  • To remove the LED details completely, press Remove on each LED and tap Save. The LEDs are cleared on the reading and on its hCRI.io report, and the app won't suggest one again for that reading.
  • Values that aren't in the lists yet are sent to hCRI.io for review rather than added straight away.
  • LED details are saved with the reading and sent to its hCRI.io report as soon as it has been uploaded. They also appear on the TM-30 report, one line per LED.

10 The Data tab

A closer look at the current reading, plus the controls for naming and sending it:

  • Upload Title β€” type a custom title, or leave it blank to use the auto-generated username + timestamp + device label.
  • LED β€” the brand, model and CCT of each LED in this reading's light (one block per LED), with Edit (or Add LED details) to set them. Available once the reading is saved to History. See LED details.
  • Upload Preview β€” the exact wavelength/value payload about to be sent, so you can eyeball the range and point count before it goes anywhere.
  • R1–R15, Chromaticity, and Device Info β€” full numeric detail, including the meter's own firmware version and integration time.
  • Upload to hCRI.io and Share CSV β€” the same upload button as Main (with the same inline checkmark), plus exporting this one reading as a CSV file through your phone's share sheet.

11 The History tab

A switch at the top chooses between two lists: Readings and Flicker (saved flicker samples, described below).

Your most recent readings (up to 100), grouped by day, newest first. From here you can:

  • View a past reading's full measurement grid, spectrum, chromaticity, and R-values exactly as they looked when it was taken.
  • Rename a reading β€” renaming before upload sends it to hCRI.io under that new title.
  • Re-upload a reading at any time, including ones already sent β€” an already-uploaded reading updates its existing hCRI.io report instead of creating a duplicate (a confirmation says Updated). Tap a reading's LED line (marked Edit) to change its LEDs. Row actions are icons: cloud (upload to hCRI.io), tray (share CSV), eye (view) and trash (delete). A small waveform icon next to the CCT/Ra marks a reading that includes a flicker sample, which goes up with it.
  • TM-30, Copy, Report β€” every reading has a TM-30 button that opens its TM-30 report in the app (see The TM-30 report), whether or not it was ever uploaded. For a reading that has been uploaded, Copy puts its hCRI.io link on the clipboard and Report opens the report in your browser. For a private report, the first tap creates its share link, which anyone holding the link can open.
  • Select multiple readings: hold a reading's title to start, with that reading checked. Tap more rows to add them, use Select all at the top, and tap the X to stop. Then upload them to hCRI.io in one batch, share, compare or delete them.
  • Share a single reading, the readings you have selected, or your entire history, as CSV. Shared files end with a short summary of the computed values.
  • Add a saved flicker to a reading that has none: the lightning-bolt button lists your saved flickers that aren't attached to a reading yet. Pick one and it is copied into the reading, so it is saved and uploaded with it. If the reading was already uploaded, the flicker is also added to its report on hCRI.io. The button only appears when the reading has no flicker and a free saved flicker exists. A reading that has a flicker shows a small waveform icon next to its date; its hint says when the flicker went up with the report.
  • Delete a reading you no longer want β€” this only removes it from your phone (and from your cloud backup, if backup is on); a copy already uploaded to hCRI.io as a report stays there until you delete it from your account separately.

The Flicker list

Each New sample from the Flicker page is saved here automatically when it ends (up to 100, newest first). A row shows the date, the meter model, the frequency, percent flicker and flicker index. Tap the title to rename it, the eye to view the waveform, the cloud to upload it to hCRI.io on its own, or the bin to delete it. A badge says where it belongs:

  • In report β€” it is attached to a reading that has been uploaded as an hCRI.io report.
  • In reading β€” it is attached to a reading that hasn't been uploaded yet; it will go up with that reading. If that reading is deleted, the flicker becomes free again.
  • Uploaded to hCRI.io β€” it was sent on its own (a standalone flicker reading on hCRI.io).
  • No badge β€” it is free, and can be attached to a reading with the lightning-bolt button on the Readings list.

Flickers that were taken for a reading (Add to reading, or Capture flicker with each reading) live inside that reading and aren't listed here.

How many readings are kept

History holds your most recent 100 readings. When it is full, the oldest uploaded readings are removed first, so a reading you haven't uploaded yet is kept (up to 200 in total). From 90 readings on, a note at the top of History reminds you. Readings you've uploaded stay safe on hCRI.io after they leave History.

12 The Logs tab

A running debug log of connect/disconnect/measure/upload activity, each line timestamped in your phone's own local time. Useful for troubleshooting, or to attach to a bug report.

  • Share Debug Log β€” sends the current log through your phone's share sheet (email, messaging, wherever you'd like to send it).
  • Clear β€” empties the log.

Turning on Verbose logging in Settings adds the low-level Bluetooth hex traffic and the full raw result body to this log β€” off by default, since the standard log already covers ordinary connection and measurement status.

13 Settings

Settings are grouped into sections. Tap the ? in a circle beside any setting for a short explanation of it.

hCRI.io account

Your username and API token β€” see Connecting your hCRI.io account above.

Display

Light, Dark, or System (the default), which follows your phone's own light/dark setting. Also holds the Main Screen Measurements picker (below) and, on Android, LED suggestions and flicker options.

Connection

Auto-connect to meter and Stay connected in background are on by default; Keep screen awake is off by default and uses more battery. See Background & reconnect behavior.

Backup

Back up readings to hCRI.io (on by default) saves your reading history and your saved flickers to your own hCRI.io account a few seconds after each change, and again when you come back to the app. It needs your API token (see Connecting your hCRI.io account); with no token saved nothing is sent, and everything not yet backed up goes up once you sign in. Backed-up data is private to you: it is stored apart from your reports and is never shown on any public page. Deleting a reading or a saved flicker in the app removes it from the backup, while readings that only drop off the end of History stay in the backup.

Restore readings from backup (shown once a token is saved) adds back any readings and saved flickers the app doesn't have, newest first, and never removes or changes anything. History still keeps its usual 100 readings (up to 200 if unuploaded), so a very large backup restores only the most recent. On a fresh install with your token already saved, the app also offers to restore once.

Bridge

Flip screen turns the hCRI Bridge's screen 180Β° (for a Torch Bearer or a ColorMunki), so it reads upright the other way round. It takes effect right away while the bridge is connected and needs the latest bridge firmware. It does not affect HPCS meters. The Torch Bearer spectrum is sent exactly as the meter reports it, so there is no correction setting.

ColorMunki

Calibration limit (hours): how old the ColorMunki's calibration may be before the app asks you to calibrate again. The default is 1 hour; 0 turns the check off. The bridge itself still needs one calibration after it powers up.

Readings

LED suggestions (on by default): after a reading, hCRI.io suggests the LED from the shape of the spectrum and the reading's title, and you confirm it with one tap. See LED details. Capture flicker with each reading (off by default) takes one flicker sample with every reading on meters that support it; see Live readings & Flicker.

Feedback

Two switches, both on by default: Button taps (a short tick when you press a button in the bottom bar) and Reading and upload results (a distinct vibration when a reading or upload finishes, and a different one when it fails). On iPhone these use the Taptic Engine.

Troubleshooting

Verbose logging adds the full wavelength-by-wavelength and Bluetooth hex detail to the debug log; see The Logs tab.

Main Screen Measurements

Check which measurements show on the Main tab's result card, and hold the dotted handle to drag a row and reorder it. Reset to Default restores CCT, Ra, Duv, Lux, Rf, R9, Rg in that order.

On Android, Settings has three tabs at the top: Settings, Update and About, so About is one tap away instead of at the bottom of a long scroll. Update shows what Google Play reports about newer versions and has the button that opens the app's Play Store page; it carries a dot when an update is waiting. On iPhone there is no Update tab (updates come through the App Store / TestFlight), so Settings has just Settings and About.

About

The current list of supported meter models (and which are independently verified), a Send Feedback button that opens a pre-addressed email, and a link back to this Companion page.

14 Background & reconnect behavior

By default, switching away from hCRI Companion β€” the app switcher, locking your screen, a phone call β€” leaves the meter connected (Stay connected in background, on by default in Settings). Coming back to the app picks up right where you left off, with no reconnect delay.

If you'd rather the app disconnect the meter whenever it isn't the one on screen (trading a short reconnect delay for a little extra meter battery life), turn that setting off. Either way, coming back to the foreground with nothing connected always tries to reconnect automatically β€” you shouldn't need to tap Connect yourself just because the meter dropped on its own while you were away. (Not when Auto-connect to meter is turned off in Settings, and not while Bluetooth is off or blocked β€” the Main status line says so.)

Sharing a CSV or the debug log briefly hands control to your phone's own share sheet, which looks like backgrounding the app β€” this is recognized and never triggers a disconnect either way, since you're still right there using the app.

15 Troubleshooting

Meter won't connect, or seems stuck

Tap Meter won't connect? Reset connection on the Main tab (shown while disconnected). This clears a leftover Bluetooth connection from a previous session β€” by far the most common cause, and something that used to require power-cycling the meter.

Main says "Bluetooth is off" or "Bluetooth access is off"

The app does not try to connect until Bluetooth is usable. Turn Bluetooth on in your phone's settings; on iPhone, if it says access is off, open Settings β†’ hCRI Companion and allow Bluetooth. Then tap Connect to Meter (or switch away and back to the app).

The app doesn't connect by itself any more

Check Settings β†’ Auto-connect to meter; when it is off, connect with the button on Main.

App crashed, or won't open

A crash lands on a "Try Again" screen rather than kicking you back to your home screen. If the app won't stay open at all, force-close it from your phone's app switcher and reopen it β€” this app recovers from a mid-session crash cleanly.

Upload says it can't reach hCRI.io, or took too long

Uploads, token creation and link requests give up after about 25 seconds (a minute for uploads) instead of waiting forever. "Can't reach hCRI.io" means the phone has no working internet connection; "took too long" means the connection is there but slow or the site didn't answer. Check your signal or Wi-Fi and tap Upload again β€” the reading is still on your phone. If a reading could not be added to History, or LED details could not be saved, the app tells you.

Too many sign-in attempts

For security, hCRI.io limits repeated failed sign-ins and password-reset requests. If you see "Too many attempts", wait about 15 minutes and try again; if you use a saved token, signing in is not needed.

ColorMunki: "Calibrate first", "Calibration failed" or wrong dial

Turn the ColorMunki's dial to the calibration position, keep it still and tap Calibrate. After calibrating, turn the dial to ambient. The app asks again once the time in Settings β†’ ColorMunki has passed. Repeated communication errors usually mean weak USB power: use a power bank on the standard T-Display S3. More in the bridge setup guide.

A reading looks wrong

Double-check the correct meter model connected (shown next to the status dot on Main) β€” each model has its own field layout, and the wrong one can occasionally still connect if its advertised name happens to be ambiguous. If a value still looks off, check Settings β†’ About for whether that model is marked independently verified.

Still stuck?

From the Logs tab, tap Share Debug Log and send it along with a description of what happened to fizzgig@hcri.io, or use Send Feedback on the About tab of Settings.

16 Privacy

hCRI Companion doesn't collect, store, or transmit anything about you on its own β€” no analytics, no tracking, no third-party server in the loop. A reading lives on your device until you tap Upload, which sends it straight to your own hCRI.io account over an encrypted connection and nowhere else. If you have saved an API token, the optional Back up readings to hCRI.io setting (on by default, see Settings) also keeps a private copy of your reading history and saved flickers in your own hCRI.io account; it isn't a report and nobody else can see it. Turn the setting off and nothing is backed up. If you use Generate Token in Settings, your password is sent once, over that same encrypted connection, to sign in and create the token β€” it's never stored on the device. Full details are in the Privacy Policy on the Companion page.

17 Feedback & support

Questions, bug reports, or feature requests are always welcome at fizzgig@hcri.io β€” the same address the app's own Send Feedback button (Settings β†’ About) opens for you.