Snickerstream Versions Save

Unified NTR and HzMod streaming client for the 3DS


5 years ago

New features

  • Initial HzMod support. This alone should warrant a paragraph of its own, but for shortness' sake check the full details on the Wiki for its pros and cons against NTR.
  • The Direct2D renderer has been updated from D2D v1.0 to v1.1. This was mainly required for HzMod support but it also bumped up the interpolation mode count from 2 to 6!
  • A function to remap the hotkeys without having to edit the INI file manually has been added to the advanced menu.
  • More logging options: you can now log to a file, a console window or both. Also, logging at loglevel 3 is a little less spammy now.

Improvements & Bug fixes:

  • The renderer combobox has been moved to the advanced menu. The streaming app selection takes its old place. This marks the official deprecation of the GDI+ renderer.
  • Snickerstream no longer your logs CPU and GPU model. The function being used was a bit of a mess and caused crashes at startup in some very rare cases – just two recorded ones, if you’re being curious. Considering that this info was rarely needed for troubleshooting after adding Direct2D support, I just decided to remove it altogether.
  • Fixed some typos.
  • Slightly made the source code better to look at. Just slightly.
  • [Bugfix] You can now specify a custom width & height (DPI fix) for the bottom screen window in separate windows mode.
  • [Bugfix] The default hotkeys will now be restored if an invalid number of hotkeys is found in settings.ini instead of being simply refusing to read them.
  • [Bugfix] Fixed a bug affecting real time screen scaling in GDI+.
  • [Bugfix] Top and bottom scaling factor inputs in the adv menu aren't limited only to decimal chars anymore (so you can now enter dots).

Still, there are two important things to keep in mind. First off, the GDI+ renderer will be deprecated from now on, which means it can still be used but it will receive no updates or bugfixes starting from the next versions, and if a critical bug shows up I’ll just remove it altogether. No one used it since the D2D one was implemented (in fact there was little reason to do so, it was only kept for legacy reasons) and now with D2D 1.1 there’s literally no reason to use it so it’s just slowing development down.

Secondly, this should affect virtually no one but upgrading the renderer from D2D 1.0 to 1.1 made Snickerstream incompatible with not just XP but Vista too. Windows 7 is still compatible but it needs the Platform Update to be installed (which you should have by now as it’s a pretty old free update) while later versions are compatible out of the box.

Thanks to Sono for helping me with HzMod support!


6 years ago

New features:

  • A brand new “Advanced” settings menu which lets you change all variables that could only be changed by directly editing the INI file before.
  • Multiple 3DS streaming to a single PC is now supported (after patching NTR & changing the listen port, click here for a guide)
  • (D2D Only) Individual screen scaling – finally! You can either set this via the Advanced menu or by editing/adding TopScalingFactor and BottomScalingFactor in the INI.
  • (D2D Only) You can now pop up the other screen in full screen modes with the push of a button! (default: Spacebar) The screen can also be scaled using the previously mentioned individual screen scaling function.
  • Hotkeys can now be customized by editing/adding a “Hotkeys” key to the INI. They have to be specified as a string of seven hexadecimal key codes separated by a vertical bar, ex. 26|28|25|27|0D|53|20|1B. The functions corresponding to the key codes are: Scale up, Scale down, Change interp. (plus), Change interp. (minus), Return to the connection window, Capture a screenshot, Show secondary screen popup (only in fullscreen modes), Exit Snickerstream. A full list of keycodes supported by AutoIt is available here.
  • You can now choose whether to center the screens or not (via Advanced menu or by editing/adding CenterScreens to settings.ini)
  • New screen layouts! Non-streched fullscreen (top), Non-streched fullscreen (bottom), stretched fullscreen (bottom) and separate windows! (Keep in mind that all of these are D2D only except for stretched fullscreen bottom)
  • You can now specify the settings INI file’s name and path manually by passing it as a command line argument to Snickerstream. Useful if you want to connect multiple 3DSes. Example usage: ‘snickerstream.exe C:\Path\to\setting\file.ini’
  • Added support for custom presets. Custom presets will only change the remoteplay settings (except for the IP), they don’t need you to reopen Snickerstream each time you want to change them (but you will need to restart your 3DS if remoteplay has already been started) and are stored on a separate INI file, making them very useful if you wish to save different settings for your games. Snickerstream will always look for the presets.ini in the same directory as the settings INI, even if you specified a custom path for it. Thanks to ElderCub for the suggestion!
  • A shiny new icon made by Trinsid! Improvements & Bug fixes:
  • The quality value will be set to 10 if it’s too low (10 is the lowest quality value allowed by NTR).
  • Snickerstream will no longer pause if you right-click on its tray icon.
  • Snickerstream now returns to the connection window if it’s not able to receive the stream after initializing remoteplay (instead of hanging on a black screen) and tells the user to double check its firewall rules/listening ports.
  • A completely redesigned about screen!

On a quick note, I want to underline that update is called "The Definitive Update" because I've coded each and every single thing I originally wanted for Snickerstream now. This doesn't mean there won't be any future updates tho! There's still some very experimental stuff that I want to try...


6 years ago

New features:

  • Snickerstream will now try to allow itself through Windows Firewall if ran as admin (requires Windows Vista/Server 2008 or later and the script to be compiled).
  • An update warner has been added, it will check for new versions as soon as Snickerstream has been launched (can be disabled, only works for official releases). Thanks to Real96 for the suggestion!
  • Auto-disconnect feature: Snickerstream will now automatically return to the connection window if the 3DS disconnects (aka a certain amount of time passes without any frames being recieved). The default amount is set to 6 seconds but can be adjusted by adding/editing ReturnAfterMsec in settings.ini (setting it to 0 or a negative value will disable this feature). Thanks to /u/DaWoblefet on the 3dshacks subreddit for the suggestion!
  • Frame limiter (disabled by default): you can now limit the number of frames per second displayed by the prioritized screen. Useful if you have a bad connection or you prefer a stream with a constant framerate rather than having your FPS jump around to the maximum possible value at all times. This feature can be enabled by adding/editing Framelimit=XX in settings.ini, where XX specifies the desired maximum FPS you want for the prioritized screen (setting it to 0 or a negative value will disable it). If enabled, the frame prioritized screen’s FPS will be displayed on the title bar, thus letting you know that the limiter is working as intended.

Improvements & Bug fixes:

  • The internal UDP buffer has been decreased from 2000 to 1448 bytes, slightly improving performance and decreasing resource usage.
  • The title bar will now show the client’s status while waiting for a 3DS to connect (ex. “Starting remoteplay…”, “Connecting…”, etc.)
  • Screenshots will only capture the windows’ contents, with the mouse cursor being hidden again.
  • If Snickerstream won’t automatically detect your monitor’s scaling settings you’ll be able to manually set the streaming window’s initial size by setting “CustomWidth” and “CustomHeight” to your preferred values in settings.ini. Please note that these options will only resize the window and WON’T scale its contents! (See the wiki on GitHub for more info)

NOTE: If you’ve been using unstable Snickerstream builds, please note that the INI key “Framelock” has been renamed to “Framelimit”!


6 years ago
  • Snickerstream now supports Direct2D as its rendering library.

    • Direct2D is hardware accelerated if your GPU supports it (if not, it uses to software mode). This means much less CPU usage, more constant RAM usage, less tearing and less dropped frames due to slow hardware, while still requiring no external DLLs and being Wine-friendly.
    • Thanks to it, Snickerstream now works on many more hardware configurations and fullscreen works properly (it isn't an experimental feature anymore!)
    • This means that, as both now support hardware acceleration, Snickerstream should perform at just as good as NTRViewer!
    • In order to use Direct2D in hardware accelerated mode you need a GPU that supports at least Direct3D feature level 9 and has WDDM 1.1 drivers (read: any GPU made during or past 2006 should support it).
    • The minimum requirements to use Direct2D rendering are Windows Vista SP2 (or later) and a graphics card with 128 MB of VRAM (256+ recommended).
  • Although it's not recommended (because Direct2D is better than it in basically every way), it's possible to choose between Direct2D and GDI+ rendering.

  • Pressing ENTER will now go back to the connection window.

  • The Init Remoteplay and Connect buttons have been merged togheter. Snickerstream will automatically detect if Remoteplay has been started and send the appropriate packet if it isn't. In case you want to edit how much time it will wait before sending the packet, you can edit the WaitRemoteplayInit value in the INI (in milliseconds)

  • NFC patching has been added for firmwares <=11.3 and >=11.4.

  • Presets have been added. There are a total of 7 presets ranging from best quality to best performance.

  • Packet errors will now be logged at loglevel 2, making this loglevel a bit more useful without producing giant logfiles.

  • CPU model and frequency, GPU model and OS version are now logged at loglevel 3.

  • (Bugfix) Key presses are only recieved if the GUI is active.

  • (Bugfix) The GUI buttons get disabled when one of them gets clicked on to avoid function calling related bugs.


6 years ago


  • WAY better netcode, Snickerstream will now drop many less frames. Expect great performance bumps!

  • (Bugfix) Snickerstream will now bind its UDP socket to all available network interfaces by default (this behaivor can be changed in the INI file by modifying the value PCIpAddr to a specific internal IP address).

  • (Bugfix) Snickerstream now properly registers keypresses when a frame isn't rendered.

  • (Bugfix) Fixed bottom screen priority, it won't result in poor FPS anymore.

  • The default settings have been changed to something that should perform better for most computers.

  • Added a proper logging function, 3 log levels are now available. (1=Essential info, 2=More detailed info & variables, 3=Everything)

  • Added the following screen layouts: Vertical (inverted), Horizontal, Horizontal (inverted), Top only, Bottom only, Fullscreen (Top only).

  • As hinted before, experimental borderless fullscreen support has been added. Snickerstream currently doesn't support hardware acceleration (as it relies on GDI+ to draw stuff onscreen) so this function can be very slow on old computers, but you can lower your desktop resolution temporarily to gain more FPS.

  • The top only and bottom only screen layouts will completely ignore the screen that's currently not being rendered, which will mean in most cases much better FPS when streaming (in order to get the best performance, screen priority should be given to the currently drawn screen and priority factor should be set to 0 so that only one screen will be streamed).

  • Snickerstream will check if the connection settings are optimal for top/bottom only modes and top only fullscreen (aka, if the priority factor has been set to 0 and priority is given to the currently selected screen). This feature can be disabled.

  • Addded a screenshot function, press S while streaming to save a screenshot of the current frame. It will be saved in the same directory as Snickerstream's executable as a bitmap file. Size and layout of the screenshot depend on the scaling factor and the layout of that the window had when it was taken.

  • Changed scaling factor from 2x to 1.2x per key press in order to give the user more scaling choices.

  • Minor GUI changes.

  • (Dev stuff) NTR UDF has been discontinued (no one used it and it made development of this tool more difficult), from now on the version included with Snickerstream is for private use only (it might use tool-specific functions). If you need the old version for whatever reason, it now has its own GitHub repo:


7 years ago

Initial unstable release. Binaries include both x86 and x64 versions.