Imira mirrors the phone screen and audio to a Miracast sink - a TV or an HDMI dongle - over Wi-Fi Direct. No app on the TV, no cables, no network: the phone talks to the sink directly. As far as I know this is the first working Wi-Fi Display source for Sailfish OS.
WHAT IS STABLE, WHAT IS NOT
- The core Miracast function - mirroring your own screen and audio to a TV/dongle - already works well and stably on the tested hardware.
- The convergence direction (using the TV as a separate desktop with its own apps) is early and ***very experimental***.
- Verified on Xperia 10 III (Sailfish OS 5.0.0.62) and Jolla J2 (jp2601) against a Microsoft Wireless Display Adapter V2 and an LG webOS TV, using the phone's internal Wi-Fi. Other devices and sinks are untested.
- Known rough edge: playing a video in the Gallery WHILE casting can crash the Gallery's playback (hardware encoder and decoder share the video core).
PLEASE READ - WHAT THE PACKAGE INSTALLS SYSTEM-WIDE
Miracast on Sailfish is not possible with the stock system, so this package is invasive by necessity:
- a root systemd service (imira.service) that does the Wi-Fi Direct setup, the WFD/RTSP handshake, screen capture via the Lipstick recorder interface, and H.264/RTP streaming - enabled and started at boot;
- a bundled, P2P-capable wpa_supplicant under /usr/libexec/imira/ (the stock Sailfish wpa_supplicant has Wi-Fi Direct compiled out) - used only while casting;
- a PulseAudio policy file so the daemon can capture the audio monitor without touching the microphone;
- the app runs without the Sailfish sandbox, because it exchanges control/status files with the daemon.
Nothing leaves your network - the phone streams directly to the sink. Removing the app removes all of it.
STATUS AND RESPONSIBLE USE
Proof of concept / work in progress, shared as is, no warranty (GPLv3). This touches Wi-Fi and system audio deeply and runs a root daemon; install it because you want to experiment with Miracast on Sailfish, not because you need a polished tool. Feedback with your device and sink model is welcome on the issue tracker.
ARCHITECTURES
aarch64 (Sailfish OS 5.0+). No armv7hl build.
Written with Claude Code (Anthropic).
Source, issues, releases: https://github.com/JimKnopfIoT/harbour-imira
| Attachment | Size | Date |
|---|---|---|
| 1.39 MB | 13/09/2026 - 14:01 |
- The picture no longer starves the sound. While mirroring, the screen is
only captured when something on it changes, and a quiet screen was nudged
just twice a second — so the sink received video timestamps up to three
quarters of a second apart. Sinks tie their audio output to that clock,
and it was heard as stuttering music, not as a stuttering picture. The
nudge now keeps the frame rate steady, which also lets the encoder budget
its bits normally instead of spending a whole second's worth on the rare
frame it got: the picture is sharp immediately after a change of
orientation instead of mushy for a moment.
- The programme clock is sent independently of the video. It used to ride
along on video frames, which is fine at thirty frames a second and far
outside spec at two.
- Frames are paced by deadline rather than by a minimum gap. A minimum gap
discards a frame that arrives a hair early and then waits a whole period
for the next one, halving the rate; measured on one phone, twenty-seven
frames a second arrived and fourteen went out.
- Colour conversion is roughly two and a half times faster: the source
coordinates are computed once per geometry instead of once per pixel — a
64-bit division for every pixel of every frame — and the rows are now
converted on several cores, which yield to the audio path.
- A large frame is sent in slices, so audio packets are no longer queued
behind a third of a megabyte.
- Audio capture asks for a bigger fragment and no longer demands minimal
latency, which had forced the silencing sink down to a ten millisecond
deadline. Its timeline is placed per block instead of per chunk and only
re-anchors on real drift, not on ordinary jitter.
- The daemon reports gaps, timeline jumps and silent stretches in the
captured audio, which turns "it stutters sometimes" into a number.
Comments
birdzhang
Sun, 2026/08/23 - 05:39
Permalink
Hi, is it possible to add android apps to TV apps?
JimKnopfIoT
Sun, 2026/08/23 - 09:39
Permalink
@birdzhang I can't answer that — my focus is on native apps for Sailfish OS.