Sofirn HS20 with SFT40 Review – Versatile Budget Headlamp


The Boring Stuff

Sofirn sent me this light in exchange for an honest review. Here is the official product page, where code “SDT4CYG2” will get you 15% off. The XHP50.2 version can also be found on Amazon, where code “25GZYQ4F” will get you 25% off. Below are the official specs.

What comes in the box?

The box is your typical Sofirn box. It’s thin brown cardboard with a small foam pad inside and a bubblewrap sleeve to protect the light. Interestingly, the light does not come mounted in the headband. The following items are included in the box:

  • The light itself
  • Battery (inside the light)
  • Headband
  • USB A-to-C charging cable
  • Spare O-rings
  • User Manual

Design & Construction

This is a little bit unusual of a design for a headlamp. The emitters and driver sit on top of the battery, rather than in front of the battery or on the end.


Build quality is good. The threads in particular are nice and smooth. Sofirn always does a great job with those.

Size & Measurements

Convoy S2+ | Sofirn HS20 | Skilhunt H04 RC | Noctigon KR1

Measurement Measured (mm)
Height 48.5
Width 85.5
Thickness 26.0
Switch Diameter 8.0
Switch Proudness 2.3
Body Tube Diameter (internal) 19.2
Included Battery Length 67.2
Included Battery Diameter 18.6

Flashlight weight: 77g
Battery weight: 46g
Headband weight: 52g
Total weight: 175g

User Interface

This is a great UI. There are two switches, one for each LED. They both do the same thing and generally only control that LED.

The actions are # of presses followed by a hold (H) or a release (C). So, “1C” is one click and release. “2H” is two clicks but you hold down the last one.

State Action Result
Off 1C On (mode memory)
Off 1H Moonlight (not memorized)
Off 2C Turbo (not memorized)
Off 3C Lockout (confirmed by 2 blinks on the flood channel)
On 1C Off
On 1H Cycle mode (Low > Med > High)
On 2C Turbo
On 3C Toggle to other channel (repeat to turn both channels on)
Turbo 1C Return to the previous state (off, or memorized mode)
Lockout 3C Unlock & Turn On

Thoughts and notes:

  • The channels are controlled independently, so you have to turn them on/off or change modes separately.
  • If you press both buttons at once, it will ignore one of them.
  • Lockout locks out both channels, not just one at a time.
  • Moonlight and Turbo are not memorized, nor are they included in the normal mode rotation. I think that’s ideal because they already have dedicated shortcuts, and it eliminates clutter in the UI.
  • When unlocking, the light will turn on the channel that corresponds with the switch you use to unlock
  • The buttons are stiff so I frequently miss-click when trying to double or triple click.
  • The 3C from on function seems redundant. It’s slower than just moving your finger to the other switch to turn both channels on.
  • I would like a battery voltage readout mode so I can tell the charge level without removing the light from my head to look at the switch LED’s.
  • 1C from Turbo takes you back to the previous state (like the previous mode, or off). I would prefer 1C always turn the light off, and that 2C would go back to the previously used mode. Sofirn does this on all their E-switch UI’s and it always bothers me because I expect the light to turn off when I 1C, but half the time it just goes to the memorized mode instead.

Modes, Brightness, Throw, & Tint

Disclaimer: Lumen measurements were taken on a Texas Ace 3.5″ Lumen Tube. A candela measurement was taken at 10 meters with an Opple Light Master III on the highest brightness, and other candela figures were calculated relative to that. CCT & DUV data was taken for each mode from a few feet away at the center of the hotspot with the Opple Light Master and Waveform DUV Calculator. Runtime tests were performed with the Ceilingbounce app on my smartphone. All of these tests were performed with a fully charged included attery unless otherwise specified. None of this is professional equipment, so take all of these measurements with a grain of salt.

Level Lumens (@ Turn-On) Candela (@ Turn-On) Throw (meters) CCT DUV
Turbo 1070 1500 77 5100 0.0036
High 385 540 46 5010 0.0070
Medium 140 196 28 4950 0.0075
Low 35 49 14 4870 0.0070
Moonlight 2 2.80 3.35 4750 0.0057
LH351D Flood Channel

CCT = Color Temperature | DUV = Tint | Positive DUV is more green, negative DUV is more magenta

Level Lumens (@ Turn-On) Candela (@ Turn-On) Throw (meters) CCT DUV
Turbo 1540 12500 224 7090 0.0002
High 660 5357 146 6840 0.0021
Medium 190 1542 79 6680 0.0030
Low 47 381 39 6630 0.0032
Moonlight 4 32.47 11.40 6420 0.0047
SFT40 Throw Channel

Mode Spacing: is just fine. There are no unusually small or large jumps.

How does it compare to the official specs? Lumen & Candela measurements are all very close to the advertised brightness. I’ll call the official specs Accurate.

Something weird: I noticed when testing the high mode on the LH351D flood channel, it always starts off at 385 lumens and then slowly creeps up to ~470lm over the course of 30 seconds or so. You can see it in the runtime graphs below. It did this very reliably, every time I turned it on, and it does not happen on any other mode.


LH351D Flood Channel | SFT40 Throw Channel

Performance: Turbo lasts a solid 2-3 minutes depending on which channel you’re using. Sustained output is somewhere in the 3-400lm range, which is not too shabby.

LVP: is present and I observed it in all of my runtime tests. The cell was always around 2.8V whenever I checked it after a test. There’s also a warning in the form of a hard stepdown to moonlight when the cell is low. This extends battery life too. The switches glow red as a warning as well, but you can’t see that when it’s on your head.

Driver & Regulation


HS20’s driver appears to be on the same PCB as the LED’s. That’s highly unusual and it will make emitter swaps difficult. Based on its performance and Sofirn’s tendencies, I suspect it’s a FET driver with no regulation circuitry besides PWM to regulate brightness. It’s not very sophisticated, but it works fine and it’s got two different channels on it which is cool.

LH351D Flood Channel | SFT40 Throw Channel

Regulation is poor. Every mode is affected significantly by cell voltage. This is precisely what I would expect from a FET only driver. Fortunately, you can plug in USB power if you need a boost in brightness.

Note: All regulation measurements are taken at turn-on so they do not reflect any thermal or low voltage stepdowns that may occur. A value of 0 indicates low voltage shutoff immediately upon activation.

Thermal regulation: is present and works well. It works noticeably better than most other lights I’ve tried with a Sofirn-designed UI, in fact. Most of those have some nasty oscillation like this, but that’s not present on HS20.

PWM: No PWM is visible to my eye nor my cell phone camera. I did some testing on each mode with an Opple Light Master III and found PWM on all modes (including Turbo, which susprised me) at 20khz (inaudible)

Parasitic Drain: 24 microamps. That’s trivially low.

Emitter & Beam

HS20 has two emitters: one for flood and one for throw. The flood emitter is always a 5000K Samsung LH351D, but there are two options for the throw emitter: a Cree XHP50.2 or a Luminus SFT40. SFT40 produces a much narrower beam than XHP50.2 so it was the clear choice for me to go in the throw channel. It would have been nice to have a flood LED option with nicer tint.

LH351D Flood Channel | SFT40 Throw Channel
Both Channels Active

Both beams are pretty clean with no artifacts to speak of. The flood beam is a very wide hotspot with some corona that fades out. The throw beam has a narrow (for a headlamp) hotspot, some corona, and some spill. When both are active, the throw beam is much more prominent. The flood beam is noticeably greener than the throw beam and measures in at 95CRI. The throw beam is noticeably cooler than the flood beam and measures in at 70CRI.

LH351D Flood Channel | SFT40 Throw Channel
Both Channels On

In the beamshots above, the trees where I’m aiming the hotspot are 175M away. In the beamshots below, the park bench where I’m aiming the hotspot is 42M away.

LH351D Flood Channel | SFT40 Throw Channel
Both Channels On



HS20 has two switches on top, one for each LED. I love this setup because it’s very intuitive to use, with no weird click-hold combos to remember to switch channels. They’re covered by proud rubber boots and they’re backlit. The backlighting indicates battery status: green being good, red being low. I don’t understand why the switches are backlit because you cannot see them while the light is on your head. They’re pretty stiff so I found myself mis-clicking frequently.

Carry & Ergonomics

Unlike a right-angle light, HS20 is a dedicated headlamp that you’ll only ever really use on your head. The headband is a two-strap design with one strap going around your head and the other strap going over your head. The overhead strap cannot be removed, unfortunately. It’s very helpful to have it though because it supports the weight of this heavy light really well.


There’s a molded rubber piece at the front with two loops to hold the light. It holds it very securely, perhaps a little too securely. You shouldn’t need to remove the light from the headband often, but if you do, it’s difficult and frustrating. The mount piece in front also has some vent holes or something cut in it, and if you have the headband too tight they will make it look like a jeep ran into your forehead and left a grill imprint.

Batteries & Charging


HS20 uses an 18650 battery. A Sofirn-branded, unprotected, button top cell is included. Protected cells should fit and work just fine too. This isn’t a particularly high drain light so just about any cell will work. Higher discharge cells may get you a little more brightness though.


Charging is facilitated by a USB-C port on the left side of the light. It’s hidden and sealed under a cap, which is a great design. Charging works from both A-to-C cables and C-to-C cables. It’s fully functional while plugged in too. You can even run it plugged in in the headband and without a battery. That means you can grab a powerbank and a long cable and run it off the powerbank in your pocket. That’s great for when you need super long runtime or you’re in a cold environment and you want to keep the batteries warm inside your coat. It does not work as a powerbank itself though. Charging stopped at 4.19V and took two hours and fifteen minutes.



HS20 is an excellent budget option if you’re looking for a dedicated headlamp with dual beams. It’s got plenty of runtime for most situations, but can be extended indefinitely or used in cold conditions thanks to the USB-C port built into the side. Sofirn really knocked it out of the park with this one and I recommend it.

Thanks to Sofirn for sending me this light for review!

original source: