Repository navigation
Releases: Erik1028/focal
Release list
Focal v2.1 - sharper capture, new name and icon
PhoneCam is now Focal — same app, new name and a fresh iPhone‑camera‑style icon.
✨ What's new
🎥 Sharper, lighter capture (v2.1)
- Frame‑perfect draw loop. The phone now redraws exactly once per camera frame (via
requestVideoFrameCallback) instead of up to 2–4× on 120 Hz ProMotion iPhones — less CPU, less battery, smoother capture. A built‑in watchdog guarantees the video can never freeze (it re‑primes the callback, and falls back to the old loop if anything stalls). - Snappier server. The virtual‑camera bridge moved its per‑frame colour conversion off the event loop, so incoming video is serviced with less jitter — most noticeable on higher‑resolution / higher‑fps feeds.
🎨 New name & icon
- Focal, with a realistic camera‑lens icon. Your saved settings, the trusted certificate on your iPhone, and everything else carry over untouched — only the visible name changed.
📦 Install
Focal-SingleFile.exe— one file, nothing to unzip. The first run unpacks to%LOCALAPPDATA%\Focal(progress bar, ~20 s); every later run starts instantly. SmartScreen may warn → More info → Run anyway (unsigned, not harmful).Focal-Portable.zip— the classic folder; extract anywhere and runFocal.exe.
Upgrading from PhoneCam? Just run the new app and reload the phone page once (⟳). Your iPhone keeps trusting the same certificate — no re‑setup needed.
PhoneCam v2.0 — left-edge controls, zoom readout, sharper picture
A round-number release: a couple of handy controls plus a small picture-quality bump.
📱 Phone UI
- Left-edge quick controls. A small cluster (Grid · Mirror · Dim) now lives on the left edge, so in a two-handed landscape grip your left thumb has controls too — the zoom and lens pills are on the right, and the left was empty. Grid and Mirror stay in sync with the same switches in Settings; Dim moved here from the top bar (shown only while streaming), tidying the top-right.
- Zoom readout. While you pinch or drag the zoom, a big glassy zoom number (e.g.
2.4×) appears and fades — the camera-app touch that was missing.
🎥 Picture quality
Two standard webcam tweaks that make the image a touch crisper at no cost:
- The stream now hints to the encoder that it's a mostly-static talking head, so it spends its bits on sharpness rather than smoothing.
- Higher-quality scaling on the zoom/detail/filter path (better interpolation).
For the biggest jump in sharpness, also try Detail zoom (v1.9) and nudge the bitrate up in Settings.
📦 Install
PhoneCam-SingleFile.exe— one file, nothing to unzip. SmartScreen may warn → More info → Run anyway (unsigned, not harmful).PhoneCam-Portable.zip— the classic folder; extract and runPhoneCam.exe.
Upgrading? Replace the app and reload the phone page once (⟳).
PhoneCam v1.9 — Detail zoom (hi-res sensor-crop)
Adds Detail zoom — sharper zoom that uses more of the sensor.
🔍 Detail zoom (opt-in)
Normally zoom crops a 1080p frame and upscales it, which gets soft. Detail zoom instead captures the back camera at its maximum resolution and crops the output from that — the same "sensor crop" idea the iPhone's own camera uses for its 2× on the 48MP main sensor. The result is lossless up to the sensor/output ratio (e.g. a 4K capture sent at 1080p gives a clean ~2× before any softening; at 720p output, up to ~3×). Even at 1× the image is a touch crisper (supersampled).
- Turn it on in Settings ▸ Camera ▸ Detail zoom. It tells you the actual capture size your phone gave, so you can see whether it helped.
- It's opt-in on purpose: a high-res capture uses more battery and, on some iPhones, the 4K format runs at 30 fps instead of 60. It's a no-op (no downside) on devices that cap the browser camera at 1080p.
The sent resolution and bandwidth are unchanged — only the source the zoom crops from gets bigger.
(This went through an adversarial review; a few edge cases were fixed before release — no 4K frames ever hit the stream, the stats badge shows the true sent size, and a viewer-join race was hardened.)
📦 Install
PhoneCam-SingleFile.exe— one file, nothing to unzip. SmartScreen may warn → More info → Run anyway (unsigned, not harmful).PhoneCam-Portable.zip— the classic folder; extract and runPhoneCam.exe.
Upgrading? Replace the app and reload the phone page once (⟳).
PhoneCam v1.8 — Liquid Glass phone UI
A Liquid Glass makeover for the phone camera page.
🪟 Liquid Glass
The floating controls — status pill, stats badge, icon buttons, corner Stop, lens pills, the zoom slider, the toggles, the More sheet, toasts and cards — are retextured as Apple-style Liquid Glass: a stronger frosted blur that picks up and refracts the colours behind it, a bright specular highlight along the top edge, and soft depth. The Start button gets a glossy sheen and the zoom knob a subtle gradient.
Tuned for a real webcam, not just looks:
- The tint stays dark enough that white text (lens labels, stats) stays readable over any background — bright scenes included.
- The blur strength is moderated so it doesn't tax the GPU/battery on long streams (the glass re-blurs the live video behind every control, every frame).
Purely visual — nothing about streaming, quality, or the controls changed. All the reliability and design fixes from v1.6–v1.7 are included.
📦 Install
PhoneCam-SingleFile.exe— one file, nothing to unzip (first run unpacks ~20 s, later runs instant). SmartScreen may warn → More info → Run anyway (unsigned, not harmful).PhoneCam-Portable.zip— the classic folder; extract anywhere and runPhoneCam.exe.
Upgrading? Replace the app and reload the phone page once (⟳).
PhoneCam v1.7 — phone design polish + camera-blocked recovery card
A phone design polish release — small refinements from a design-focused review of the camera page, plus one real usability fix.
✨ On the phone
- "Camera blocked" recovery card. If Safari is blocking the camera (once you've tapped "Don't Allow", it never asks again), you no longer hit a dead-end — a persistent card shows the exact steps to fix it (aA → Website Settings → Camera → Allow) until you're back up.
- The framing grid stays visible over bright scenes. It used to fade out against white/bright video — exactly when you need it. It now has a subtle dark outline.
- Consistency & feel: the zoom slider now matches the same frosted-glass style as the other edge controls; the corner Stop has a softer red edge; lens pills, toggles and the zoom chip now give a little press animation when tapped; and selection highlights ease in instead of snapping.
- Small touches: the quality caption under Start gets a ⚙ hint and lines up under the button; a one-time tip points out the corner ■ Stop; and reduced-motion users now get a calmer experience (no shutter flash or focus-ring pop).
No changes to how streaming works — this is all visual/UX. The reliability fixes from v1.6 are included.
📦 Install
PhoneCam-SingleFile.exe— one file, nothing to unzip (first run unpacks ~20 s, later runs instant). SmartScreen may warn → More info → Run anyway (unsigned, not harmful).PhoneCam-Portable.zip— the classic folder; extract anywhere and runPhoneCam.exe.
Upgrading? Replace the app and reload the phone page once (⟳).
PhoneCam v1.6 — reliability fixes (vcam reconnect, wake-lock, OBS recovery)
A reliability release — nine bugs found by a whole-codebase adversarial audit, all fixed. No feature changes.
🛠️ What's fixed
- The virtual camera no longer freezes when the phone reconnects at a different resolution (or you rotate the phone). Previously the webcam was locked to the first resolution it saw, so a Stop→Start at a new quality left Discord/OBS stuck on the last frame until you restarted the app.
- The phone won't sleep mid-stream anymore. iOS drops the screen wake-lock every time you switch apps or pull down Control Center; it's now re-acquired when you return, so a long unattended stream keeps running.
- Dim mode's battery saving actually sticks — a camera recovery behind the black overlay used to silently resume the preview; it now stays paused.
- OBS / the PC preview recover on their own if the video connection drops while the signaling link stays up (previously a frozen browser source until you refreshed it).
- Auto-bitrate no longer "sticks" low — a temporary congestion dip could get saved as your bitrate and cap the next launch; your slider setting is what persists now.
- PC app: switching the virtual-camera backend (or regenerating the certificate) can no longer be interrupted into staying down; cleaner startup/shutdown and a "Restarting…" state so a mis-timed click can't derail it.
📦 Install
PhoneCam-SingleFile.exe— one file, nothing to unzip (first run unpacks ~20 s, later runs are instant). SmartScreen may warn → More info → Run anyway (unsigned, not harmful).PhoneCam-Portable.zip— the classic folder; extract anywhere and runPhoneCam.exe.
Upgrading? Replace the app and reload the phone page once (⟳).
PhoneCam v1.5 — preview-first PC app (video fills the window, floating controls)
A preview-first PC app — the phone's picture now gets the whole window.
🖥️ Redesigned desktop window
- The video fills the entire window. The old fixed side panel is gone.
- Controls float on top as translucent overlays: connection status (top-left), Settings + Fullscreen (top-right), and a Start/Stop button centered at the bottom (red while live).
- The QR code, setup steps, virtual-camera selector and tools moved into a Settings panel (gear button, or
Ctrl+,). It opens automatically on launch so the QR is right there, and tucks itself away once your phone connects — so while you're on a call it's pure preview. - Fullscreen (F11) keeps just the floating controls. The third status light now reads "Webcam" (clearer than the old "Viewer" count).
🧪 Hardening
The redesign went through a multi-agent adversarial review; six issues were fixed before release — including the "Webcam" light no longer showing green when no virtual camera exists, a guard against a first-run certificate race, and Escape correctly leaving fullscreen from the Settings panel. (The overlay-over-video layering was verified against the bundled Qt version.)
The phone page is unchanged from v1.4 (corner Stop, double-tap flip, zoom snap, plain status copy, etc.).
📦 Install
PhoneCam-SingleFile.exe— one file, nothing to unzip (first run unpacks itself ~20 s, later runs start instantly). SmartScreen may warn → More info → Run anyway (unsigned, not harmful).PhoneCam-Portable.zip— the classic folder; extract anywhere and runPhoneCam.exe.
Upgrading? Replace the app; reload the phone page once (⟳).
PhoneCam v1.4 — intuitive phone UI (corner Stop, gesture flip, zoom snap)
A big phone-UI intuitiveness release — the camera page now behaves the way muscle memory expects, and it's much harder to fumble.
✨ What's new on the phone
- Stop moved out of harm's way. It's now a small round button in the top-left corner instead of a big red bar under your thumb — so a mounted phone won't get stopped by accident. The big button is Start-only and disappears while you're live.
- Double-tap flips the camera (front ⇄ back), like every camera app. The lens pills still pick a specific back lens.
- Zoom snaps to the lens marks. Let go near 1× and you land on a clean 1× (no more awkward 0.97× crop), and the matching lens pill lights up live as you drag or pinch.
- Tap the zoom readout to jump back to 1× — tap it again to return to your previous zoom.
- Plainer status text: "waiting for PC…", "LIVE" — no more "waiting for viewer".
- Quality caption under the dock (e.g.
720p · 30 fps · 8 Mbps) so you can see your settings at a glance; tap it to open Settings. - "Mirror" is now "Mirror preview" so it's clear it only flips your screen, not what the PC sees.
- A one-time hint after 5 minutes points out the dim-mode 🌙 button.
🧪 Hardening
These changes went through a multi-agent adversarial code review; five issues it found were fixed before release — most notably a case where a wrong/stale access key could leave the page stuck with no working Start or Stop button.
📦 Install
Two flavours, no installation either way:
PhoneCam-SingleFile.exe— one file, nothing to unzip. First run unpacks itself (~20 s), later runs start instantly. SmartScreen may warn ("Windows protected your PC" → More info → Run anyway; it's unsigned, not harmful).PhoneCam-Portable.zip— the classic folder; extract anywhere and runPhoneCam.exe.
Upgrading? Replace the app and reload the camera page on your phone once (⟳) — it caches aggressively.
PhoneCam v1.3 — phone UI polish: session timer, dim mode, toasts
A phone-side UI polish release — the camera page is nicer to look at and easier to live with during long streams.
✨ New on the phone page
- Session timer — the stats badge now shows how long you've been live (
8.0Mbps · 12:34), and keeps ticking even while no viewer is connected. - Connection health at a glance — the throughput number is coloured green / amber / red based on packet loss and latency.
- Dim mode 🌙 — a moon button appears while streaming; tap it to black out the screen (great for OLED battery life on long calls). A faint clock shows the elapsed time; tap anywhere to wake. The stream and wake-lock keep running the whole time.
- Toast messages — status messages now float above the dock and fade out on their own, and they're finally visible in landscape too.
- Organized settings — the More sheet is grouped into Stream / Camera / Image & framing sections and scrolls when it's taller than the screen (landscape phones used to push the top controls off-screen).
- Snapshot shutter flash, a one-time gesture hint (pinch to zoom · double-tap switches lens · hold to mirror), and a gently pulsing LIVE dot.
- The reload button hides while streaming so you can't kill the session by accident, and the top bar can no longer overflow on narrow phones.
- Bitrate up to 40 Mbps — the slider now goes to 40 (was 20), and a hidden server-side cap that silently limited the virtual-camera path to ~10 Mbps is gone. The slider is now the single real control on every path.
- Auto-macro works again — iPhones only switch to the ultra-wide for close-up subjects when the virtual combo camera is active; the lens picker was pinning the bare wide lens at 1×, which disabled it. The 1× slot now uses the macro-capable virtual camera.
📦 Install
Two flavours, same app — no installation either way:
PhoneCam-SingleFile.exe(new) — one file, nothing to unzip. The first run unpacks itself to%LOCALAPPDATA%\PhoneCam(progress bar, ~20 s); every later run starts instantly. Windows SmartScreen may show "Windows protected your PC" — click More info → Run anyway (it's unsigned, not harmful).PhoneCam-Portable.zip— the classic folder; extract anywhere and runPhoneCam.exe.
See the README for the 2-minute setup (certificate + QR code).
Upgrading from v1.2? Just replace the folder and reload the camera page on your phone (it caches aggressively — use ⟳ once after starting the new server).
PhoneCam 1.2
Bug-fix and performance update. Same setup as always — unzip, run PhoneCam.exe (or just replace your existing folder).
🐛 Fixes (phone page)
- Lens switches no longer pop. v1.1's seamless switch held the last frame, but applied the new lens's crop to it — so every wide↔tele change visibly jumped out and back in. The crop now flips exactly when the new lens's frames arrive: the switch reads as a clean, brief hold.
- No more frozen viewers from unlucky timing — adjusting zoom/rotation at the exact moment of a lens switch could wire a dead camera track into the stream; the pipeline now waits out the switch.
- "Camera lost — retrying…" — if a phone call steals the camera mid-switch, the page says so and keeps retrying with backoff instead of freezing silently on "LIVE".
- Recovery can't leak into a new session — the camera-recovery timer is cancelled on Stop, so a quick Stop→Start no longer risks two competing camera requests (which could leave the lens locked until reload).
- Honest zoom UI — a failed lens switch no longer leaves the zoom chip showing a value that isn't real, and the front camera no longer offers a fake 0.5× range.
⚡ Performance (PC side)
- The virtual-camera feed skips a redundant full-frame copy (~14% less conversion cost per frame at 1080p), decoding now overlaps sending instead of waiting for it, and a leftover per-frame preview hook that burned CPU on nothing was removed. Net: more headroom for smooth 1080p60 into Discord on modest CPUs.
Windows 10/11 · phone and PC on the same Wi-Fi · only video is sent. Full setup in the README.
🤖 Release notes generated with Claude Code