Open-source · Raspberry Pi Pico · ASIAIR
Dual-band imaging.
Bring both bands into focus.
A simple workaround that lets ASIAIR apply a measured focus offset for each band, reducing wavelength-dependent softness in fast optical systems.
- 3 virtual slots For Ha/OIII or SII/OIII
- RP2040 USB HID emulator
- Open source Experimental project
Powered by Raspberry Pi Pico
The observation
Ha and OIII may need slightly different focus positions.
In the tested setup, the red and green parts of the image were sharp at different ZWO EAF positions. ASIAIR autofocus settled on a compromise between them—closer to the OIII/green focus in this test—rather than placing both channels at their individual best focus.
Bahtinov mask observation
The focusing mask makes the difference visible.
These two 3-second exposures were taken at f/4 and 140 EAF steps apart. ASIAIR autofocus selected position 30120—a compromise between the two channel-specific focus positions. In one image the green pattern is centered; in the other, the red pattern is centered. On an even faster system, a small focus difference may be easier to see because the range of good focus is narrower.
Moving the focuser by 140 steps shifts the centered Bahtinov spike from one color channel to the other. This shows what happened in this f/4 setup; it is not an offset that should be copied to another telescope. The result on a faster system still depends on its complete optical path.
Why this can happen
The complete optical train shapes where each wavelength focuses.
The telescope, reducer, corrector, and other glass in the optical path do not treat every wavelength in exactly the same way. Fast systems have a narrow range of good focus, so even a small difference can become visible.
Measured focus curves
Two repeatable minima, about 140 EAF steps apart.
FWHM was measured from EAF position 29700 to 30140 in 20-step intervals. Each point is a stack of ten 5-second exposures made at the same focuser position.
The stacks used 1× drizzle with no intentional dithering because guiding was disabled. The same processing was applied to every position, so the curves remain directly comparable. At 1× scale, drizzle does not provide a super-resolution claim here.
Real-world comparison
Same target. Same integration time. Separate focus for each band.
Two 45-minute (2700-second) stacks of the Pacman Nebula, processed with the same workflow. The first used the single compromise focus selected by autofocus. The second used VFS offsets to bring Ha and OIII to their own measured focus positions.
4.226 → 1.902 px


2.578 → 1.923 px


Test setup: 2.90 µm pixels · 129.43 mm focal length · f/4 · 4.622 arcsec/px image scale. In angular terms, Ha improved from 19.53″ to 8.79″ and OIII from 11.92″ to 8.89″.
Small pixels sample the image more finely, but the visibility of a focus difference depends on the complete combination of pixel size, focal length, focal ratio, optics, and seeing. These results come from one f/4 setup; FWHM was measured in Siril after the same registration, drizzle, and stacking workflow.
How it works
Measure once. Let ASIAIR handle the focus changes.
VFS turns your measured focus difference into virtual slots that ASIAIR can use automatically.
Measure separately
Find the sharpest focus position for each channel in your own setup.
Store the difference
Enter the difference as a focus offset in ASIAIR.
Virtualize the slots
The Pico provides three virtual slots. The physical filter never moves.
Inside the workflow
What happens when ASIAIR selects a virtual slot.
Three virtual slots for three saved focus positions.
Reference
Autofocus position
Offset: 0
Ha
User-measured Ha offset
OIII
User-measured OIII offset
Only the slot name and focus offset change. The same physical filter stays installed.
Requirements
What you need.
-
Raspberry Pi Pico
-
ASIAIR
-
ZWO EAF
-
Dual-band filter
Quick start
Flash the Pico in a few minutes.
No compiler is required when using the ready-made UF2 release.
-
1
Download the latest UF2
Get the ready-made firmware from GitHub Releases.
-
2
Enter BOOTSEL mode
Hold BOOTSEL while connecting the Pico to your computer.
-
3
Copy the firmware
Copy the UF2 to the
RPI-RP2drive. -
4
Connect it to ASIAIR
Connect the Pico with a USB data cable. ASIAIR should detect an EFW with virtual slots.
ASIAIR configuration
Measure, enter the offsets, and test each slot.
The numbers in the screenshots are examples. Use values measured with your own setup.
Enable autofocus before each target
Turn on Before Autorun/Each Target Start. VFS relies on this setting so each target block begins with autofocus on the Reference slot.
Assign the virtual slots
Use Reference as zero, enter your Ha and OIII offsets, and turn on Use Filters Offsets.
Configure focuser backlash
Enter your measured backlash. Switch between all three slots and check that the focuser moves in the correct direction.
Imaging plan
Start and finish each target block on Reference.
Start on Reference, capture the Ha and OIII blocks, then return to Reference. This puts the next autofocus run on the expected slot.
Detailed plan example
Use shorter repeated target blocks if you want autofocus to run more often.
- Plan meridian flips between blocks where practical.
- Allow time for slewing, settling, dithering, downloads, and autofocus.
Siril processing script
Turn a VFS session into separate Ha, OIII, and ready-made HOO stacks.
The optional Siril script reads the virtual filter name stored in each FITS header, sorts the lights by focus position, and processes both groups automatically.
Prepare one folder
Place the original FITS lights in a lights folder. Keep both FILTER='H' and FILTER='O' frames together.
session/
└── lights/
├── ...H...fit
└── ...O...fitRun it in Siril
Install the Python script in Siril, launch it, and choose the parent session folder. Your original files are left untouched.
Collect the results
The script extracts, registers, drizzles, stacks, aligns, and normalizes the channels, then creates a HOO image with R=Ha and G=B=OIII.
Output from each run
result_Ha_3000s.fit— monochrome Ha masterresult_OIII_3000s.fit— monochrome OIII masterresult_HOO_Ha3000s_OIII3000s.fit— three-channel HOO image
Scope and limitations
What VFS does—and what it does not do.
VFS does
- Appear in ASIAIR as a simple filter wheel.
- Provide three virtual slots.
- Let ASIAIR use your saved focus offsets.
VFS does not
- Move or replace the physical filter.
- Control the ZWO EAF by itself.
- Measure or calculate offsets for you.
- Make an optical system sharper by itself.
- Guarantee compatibility with future ASIAIR updates.
Common questions
When does Virtual Filter Slots make sense?
Short answers to the questions most people ask first.
Does this remove the main advantage of a dual-band filter?
There is a trade-off. Both bands are still captured at the same time, but only one can be at its best focus if Ha and OIII focus at different positions. VFS lets you choose which band gets priority.
Why not use separate Ha and OIII filters?
Separate filters and a real filter wheel are the better choice for some setups. VFS is for people who already use one fixed dual-band filter and want more control without adding a physical wheel.
What happens to the other band?
It is still recorded, but it may be slightly out of focus. Whether that data is still useful depends on your optics and the size of the focus difference.
Why not adjust focus manually?
You can, but the next autofocus run may return to a position between the best Ha and OIII focus points. A virtual slot lets ASIAIR reapply the saved offset automatically.
Does a pre-shifted filter solve the focus problem?
No. A pre-shifted filter is designed to reduce bandpass shift in fast optics, helping its transmission bands stay aligned with the Ha and OIII emission lines. It does not correct wavelength-dependent focus differences introduced by the rest of the optical system. VFS solves the opposite part of the problem: it applies your measured focus offsets, but it does not correct bandpass shift. If your setup needs a fast-optics filter, you may still need one.
How do I know if my setup needs VFS?
Measure both channels several times. If the focus difference is repeatable and visible in your images, VFS may help. If both channels are already sharp, there may be nothing to fix.
Can it run unattended?
Yes, after you have measured the offsets and tested every slot change, offset direction, and backlash setting indoors.
Is this a replacement for a physical filter wheel?
No. VFS changes virtual slot names and focus offsets only. It never changes the filter in front of the camera.
Build it. Test it. Share what you learn.
Ready to try Virtual Filter Slots?
Download the firmware, follow the setup guide, and test every slot before leaving the setup unattended.