Skip to content

Releases: TomasUribe/switch-frame-tap

Switch Frame Tap v0.7.0 - network streaming, play docked

Choose a tag to compare

@TomasUribe TomasUribe released this 30 Sep 18:49

Network streaming: play docked. The stream can now go over Wi-Fi or the dock's LAN port instead of the USB cable, so a docked Switch streams its native 1080p to the PC too.

How to use it

  • In the manager app, set Connection to Network and restart the Switch. (Connection is now one setting: USB - PC viewer, USB - webcam or Network. One at a time; in Network mode the Switch leaves USB alone.)
  • In the viewer, press Tab until it says Connection: Network. It's remembered.
  • With both on the same network, the viewer finds the Switch by itself: the last address that worked, the Switch's broadcast, or a quick scan of your network (many Wi-Fi routers drop broadcasts between devices, so the scan is what finds it there). Or press I and type the Switch's IP; the manager shows it.
  • Windows asks once whether to allow the viewer on private networks. Allow it.

The quality adapts to your network. Five times a second the Switch checks how busy the network is. When it's full, the next frames are coded a little coarser; when there's room, it goes back to your quality setting. The frame rate and delay stay steady, and the picture gets softer in fast scenes instead of stuttering.

Tested docked and handheld: smooth and very playable over a phone hotspot, with latency a little above USB. A close hotspot or a LAN adapter in the dock gives the best picture; a far-away or busy home Wi-Fi drops the quality more often. Max resolution 720p halves what the network has to carry.

Everything else works over the network too: game audio, recording (R), the menu.

Updating: unzip switch-frame-tap-0.7.0-switch.zip over the SD card root and reboot (settings and screenshots are kept), and use the new viewer (Windows zip / Linux tarball). The Linux viewer's install-launcher.sh rebuilds as before.

Socket setup follows SysDVR's sysmodule (GPL-2.0).

Switch Frame Tap v0.6.1 - a 2 MB Windows viewer

Choose a tag to compare

@TomasUribe TomasUribe released this 30 Sep 16:44

A 2 MB Windows download. The Windows viewer zip went from 50 MB to 2 MB.

It shipped the complete FFmpeg libraries (every codec there is), but it only needs the H.264 decoder, the AAC encoder for recordings and the MP4 writer. Those are now built into SwitchFrameTap.exe itself: it's one 3 MB program plus SDL2.dll and libusb-1.0.dll. Decoding is exactly as fast as before; the same FFmpeg version with the same x86 SIMD code.

Updating (Windows): delete the old viewer folder (it had several large avcodec/avformat DLLs) and unzip switch-frame-tap-0.6.1-windows-viewer.zip. The WinUSB driver from Zadig stays; nothing to redo.

Nothing else changed: the Switch side and the Linux viewer are the same as v0.6.0 apart from the version number.

Switch Frame Tap v0.6.0 - smaller streams and recordings

Choose a tag to compare

@TomasUribe TomasUribe released this 30 Sep 16:25

Smaller streams and recordings. About 15-20% fewer bits at the same picture quality.

What's new (Switch side)

  • P frames (the frames between keyframes) are now coded at a slightly lower quality step than keyframes (QP 22 instead of 20 at High), as software encoders do. The difference isn't visible, and they take noticeably fewer bits.
  • A better motion search: the encoder now starts from where each part of the picture moved in the previous frame, so fast motion is predicted more often instead of being coded from scratch.
  • Measured in a 1080p Mario Kart 8 Deluxe race: about 80 Mbps instead of about 100. A recording from the PC viewer at High quality is about 600 MB a minute instead of 650-750.
  • The manager's Quality setting now says what each level costs: Medium is about half of High, Low about a third.

We also checked the Switch's encoder against x264 at the same quality setting on the same frames: x264 needs about 89% of the bits, so the encoder was never badly tuned. The remaining size is simply the price of near-lossless 1080p60. A bitrate cap will come with the network (dock) streaming work, where it's actually needed.

Updating: unzip switch-frame-tap-0.6.0-switch.zip over the SD card root and reboot (settings and screenshots are kept). The viewers haven't changed since v0.5.0.

Switch Frame Tap v0.5.0 - recording and a main screen

Choose a tag to compare

@TomasUribe TomasUribe released this 30 Sep 15:38

Recording, and a main screen in the viewer.

What's new (PC viewer)

  • Press R to record to an MP4, and R again to stop. Recordings are saved in Videos/Switch Frame Tap. The picture is the console's own H.264 exactly as it arrived, never re-encoded, so there's no quality loss and almost no CPU use. The game audio is included (AAC).
    • The file is written in fragments, so a recording cut short by closing the window or pulling the cable still plays.
    • Switching between 720p and 1080p mid-recording continues in a new file.
    • Recording won't start with less than 1 GB free, and stops by itself below 500 MB.
    • At 1080p it takes about 650 MB a minute.
  • A main screen while there's no picture. It says what the viewer is waiting for (the Switch, its USB driver, or a game) and lists the keys: R record, M mute, F11 fullscreen, Esc. It comes back whenever the game is closed or you're on the HOME menu, instead of freezing on the last frame.

Sample: switch-frame-tap-sample-mk8-race-1080p60.mp4 below is a 30-second Mario Kart 8 Deluxe race recorded with R, as the viewer saved it: 1080p, 60 fps (1792 frames, 0 decode errors), with sound.

Updating: use the new viewer. Windows: switch-frame-tap-0.5.0-windows-viewer.zip. Linux: switch-frame-tap-0.5.0-linux-viewer.tar.gz, or re-run install-launcher.sh, which now also needs libavformat-dev. The Switch side is unchanged from v0.4.1; its zip is here for completeness.

Switch Frame Tap v0.4.1 - upside-down games fixed

Choose a tag to compare

@TomasUribe TomasUribe released this 30 Sep 14:45

Fix: games that showed up upside down. Some games (Kirby and the Forgotten Land, Kirby's Return to Dream Land Deluxe) draw their picture upside down and have the Switch flip it on the way to the screen. The stream and the screenshots now apply the same flip, so they come out the right way up.

Tested with Kirby and the Forgotten Land at 720p and 1080p, and with Mario Kart 8 Deluxe to check that ordinary games are unchanged. Thanks to Alert21boy for the report, and to masagrator and proconsule54 for pointing at the cause.

Updating: unzip switch-frame-tap-0.4.1-switch.zip over the SD card root and reboot (settings and screenshots are kept). The viewers haven't changed; the ones attached here are the same apart from the version number.

Switch Frame Tap v0.4.0 - webcam mode

Choose a tag to compare

@TomasUribe TomasUribe released this 30 Sep 05:13

Webcam mode. The Switch can now show up on the PC as a plain USB camera, so OBS can capture it with no viewer and no driver.

What's new

  • A USB mode setting in the manager: PC viewer (as before, with sound) or Webcam. It takes effect after a restart.
  • In webcam mode the console appears as Switch Frame Tap Camera: an H.264 camera at 1920x1080 or 1280x720, 60 fps. The camera app picks the size and the picture is scaled to fit. No Zadig driver is needed; the camera uses its own USB id.
  • In OBS: add a Video Capture Device, pick Switch Frame Tap Camera and set Buffering to Disable.
  • Tested: 60 fps at 1080p and 720p with 0 decode errors (Linux), and OBS on Windows.
  • Linux: uvc-check (in the viewer tarball) streams the camera for a few seconds and reports the frame rate and any errors.

Updating: unzip switch-frame-tap-0.4.0-switch.zip over the SD card root and reboot (settings and screenshots are kept). The viewers haven't changed since v0.3.0, apart from the version number; the new ones are attached anyway.

Known limits of webcam mode

  • No sound: a USB microphone needs transfer types the Switch's USB service doesn't support. Use the viewer for sound.
  • Latency in OBS is higher than with the viewer; most of it comes from OBS's H.264 camera decoder.
  • The Windows Camera app doesn't open it (it only accepts uncompressed or MJPEG cameras). OBS does.

The USB camera code follows Insektaure's SysDVR-UVC-Capture (GPL-2.0); thanks for the research that made it possible.

What you need is unchanged: a Switch running Atmosphère (tested 1.11.2, firmware 22.5.0, Mariko), a Windows or Linux PC and a USB-C cable. See the README.

Switch Frame Tap v0.3.0 - game audio

Choose a tag to compare

@TomasUribe TomasUribe released this 30 Sep 04:17

Game audio. The stream now carries the game's sound, and the viewer plays it in sync with the picture.

What's new

  • The game's sound (48 kHz stereo), taken from the console's own video recorder - the same source SysDVR uses - and sent alongside the video (~1.5 Mbps extra).
  • The viewer plays it on your default sound device with a small buffer (~40 ms) that keeps it in step with the picture. M mutes.
  • A Game audio setting in the manager (on by default), showing whether sound is playing.

Updating: unzip switch-frame-tap-0.3.0-switch.zip over the SD card root and reboot (settings and screenshots are kept), and use the new viewer - Windows: switch-frame-tap-0.3.0-windows-viewer.zip; Linux: switch-frame-tap-0.3.0-linux-viewer.tar.gz (or re-run install-launcher.sh). Older viewers still work with the new Switch side, just without sound.

What you need is unchanged: a Switch running Atmosphère (tested 1.11.2, firmware 22.5.0, Mariko), a Windows or Linux PC and a USB-C cable; see the README for the optional overlay menu, SaltyNX/ReverseNX-RT (1080p) and clock tool. Windows needs the WinUSB driver once (Zadig).

Known limits

  • Games that turn video capture off have no sound in the stream (the recorder produces none for them).
  • Tested on one console (Mariko, 22.5.0, Atmosphère 1.11.2).

Switch Frame Tap v0.2.0

Choose a tag to compare

@TomasUribe TomasUribe released this 30 Sep 03:49

The Windows viewer is here, and the viewer is smoother on both Windows and Linux.

What's new

  • switch-frame-tap-0.2.0-windows-viewer.zip: a double-click SwitchFrameTap.exe for Windows 10/11 (x86_64). It waits for the Switch, reconnects by itself, F11 or a double-click for fullscreen.
  • Smoother picture on both PCs: USB, decoding and drawing run on separate threads, and frames are shown in order, one per screen refresh (vsync). Frames are only dropped if the viewer falls more than two behind.
  • Per-second statistics (frame rate, latencies, decode and draw times): in the terminal on Linux, in %APPDATA%\switch-frame-tap\viewer\viewer.log on Windows.

Windows setup (once)

  1. Install the Switch zip, reboot, and connect the Switch (handheld) with a USB-C cable.
  2. Run Zadig: Options -> List All Devices, pick Switch Frame Tap (USB ID 1209 5F1E - make sure it is that one), choose WinUSB, Install Driver.
  3. Unzip the viewer and double-click SwitchFrameTap.exe (keep the DLLs next to it). If Windows warns about an unknown publisher: More info -> Run anyway.

Updating from v0.1.x: unzip the Switch zip over the SD card root and reboot; settings and screenshots are kept. The Switch side is the same as v0.1.1.

What you need

  • Required: a Switch running Atmosphère (tested 1.11.2, firmware 22.5.0, Mariko; new to CFW: NH Switch Guide), the homebrew menu (comes with Atmosphère), a Windows or Linux PC, and a USB-C cable. That's enough for 720p60, screenshots and the manager app.
  • Optional, for the overlay: Ultrahand Overlay (its sdout.zip includes the loader) or Tesla Menu + nx-ovlloader.
  • Optional, for 1080p: SaltyNX + ReverseNX-RT, and for a full 60 fps at 1080p a clock tool such as sys-clk or Horizon OC (CPU 1785 MHz).
  • Optional, for screenshot notifications: Ultrahand.

Known limits

  • Tested on one console (Mariko, 22.5.0, Atmosphère 1.11.2) and one PC. No macOS viewer. No audio.
  • The Windows viewer is 40 MB, mostly FFmpeg's decoder library.

Switch Frame Tap v0.1.1

Choose a tag to compare

@TomasUribe TomasUribe released this 30 Sep 02:20

Homebrew apps stream now. Forwarders on the HOME menu and the homebrew menu in title-override mode, at the resolution the app draws (usually 1280x720).

What's new

  • Homebrew support: libnx apps present through vi:m, not the vi:u games use - the sysmodule now also watches vi:m, for the running application only (the HOME menu, system services and overlay loaders are passed straight through).
  • More apps found: framebuffers inside a larger memory block, 32-row block layouts, B/G/R colour order, and native 1080p for any 1920x1080 app (not just Mario Kart's layout). Screenshots get the right colours too.
  • Stream this app in the overlay: apps that refuse to run under a debugger (TiCo's protected builds) can be left alone completely - no stream, no screenshots. The manager's "Apps never streamed" clears the list.
  • Screenshots in the README, taken on the console with the screenshot button.

What you need

  • Required: a Switch running Atmosphère (tested 1.11.2, firmware 22.5.0, Mariko; new to CFW: NH Switch Guide), the homebrew menu (comes with Atmosphère), a Linux PC with libusb, SDL2 and libavcodec (see README.txt in the viewer package), and a USB-C cable. That's enough for 720p60, screenshots and the manager app.
  • Optional, for the overlay: Ultrahand Overlay (its sdout.zip includes the loader) or Tesla Menu + nx-ovlloader.
  • Optional, for 1080p: SaltyNX + ReverseNX-RT (needs an overlay menu), and for a full 60 fps at 1080p a clock tool such as sys-clk or Horizon OC (CPU 1785 MHz).
  • Optional, for screenshot notifications: Ultrahand.
  • Nothing else - no other sysmodule, no sigpatches, no capture card.

Updating: unzip switch-frame-tap-0.1.1-switch.zip over the SD card root and reboot. Your settings and screenshots are kept.

Known limits

  • Homebrew can't be forced into docked mode (ReverseNX-RT works through the official SDK; most homebrew draws 720p in both modes anyway).
  • Apps with anti-debug protection can't be streamed - exclude them.
  • Homebrew launched from the album (applet mode) isn't streamed; use a forwarder or title override.
  • Tested on one console: Mariko, firmware 22.5.0, Atmosphère 1.11.2. Linux viewer only (Windows is next). No audio.

Switch Frame Tap v0.1.0

Choose a tag to compare

@TomasUribe TomasUribe released this 29 Sep 23:39

First release. Streams the game you are playing to a Linux PC over a USB-C cable, with no capture card, using the Switch's own hardware H.264 encoder: native 1280x720 at 60 fps in handheld, and native 1920x1080 at 60 fps with ReverseNX-RT.

What's in it

  • switch-frame-tap-0.1.0-switch.zip - unzip onto the root of the SD card and reboot:
    • the sysmodule (streams whenever the PC viewer is open and a game is running)
    • Switch Frame Tap in the homebrew menu: status, stream on/off, start with the console, quality, keyframes, max resolution, screenshots, a setup check, and a screenshot gallery
    • an overlay (Tesla Menu or Ultrahand): stream on/off, live status, and handheld (720p) / docked (1080p) through ReverseNX-RT
    • native-resolution screenshots on a button combo (L3 + R3 by default), saved as PNG, with a notification if you use Ultrahand
  • switch-frame-tap-0.1.0-linux-viewer.tar.gz - the PC viewer and a desktop-app installer (see README.txt inside)

What you need

  • Required: a Switch running Atmosphère (tested 1.11.2, firmware 22.5.0, Mariko; new to CFW: NH Switch Guide), the homebrew menu (comes with Atmosphère), a Linux PC with libusb, SDL2 and libavcodec (see README.txt in the viewer package), and a USB-C cable. That's enough for 720p60, screenshots and the manager app.
  • Optional, for the overlay: Ultrahand Overlay (its sdout.zip includes the loader) or Tesla Menu + nx-ovlloader.
  • Optional, for 1080p: SaltyNX + ReverseNX-RT (needs an overlay menu), and for a full 60 fps at 1080p a clock tool such as sys-clk or Horizon OC (CPU 1785 MHz).
  • Optional, for screenshot notifications: Ultrahand.
  • Nothing else - no other sysmodule, no sigpatches, no capture card.

Measured (Mario Kart 8 Deluxe): 1080p at 59.5-59.9 fps against the game's ~59.2, 0 lost frames, ~90 Mbps over USB 2, about 34 ms on the console + 25 ms on the PC. 1080p60 wants the CPU at 1785 MHz (Nintendo's boost clock); at stock it runs a little below 60.

Known limits

  • Tested on one console only: Mariko, firmware 22.5.0, Atmosphère 1.11.2. On other firmware it does not stream unless you allow it in the manager.
  • Official games only - homebrew apps don't stream yet (planned for v0.2).
  • Linux viewer only - Windows is planned for v0.2.
  • No audio.

If something goes wrong: turn off "Start with the console" in the manager, or hold Volume Up while booting, or delete atmosphere/contents/0100000000000C20 from the SD card. Logs are in sdmc:/config/switch-frame-tap/ - please attach log.txt and last.txt to bug reports.

Built with Claude (Anthropic's AI) - see the README for how.