Chokistream 3DS: Difference between revisions

From GameBrew
 
(35 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Infobox 3DS Homebrews
{{Infobox 3DS Homebrews
|title=HorizonM
|title=Chokistream
|image=Chokistream3ds2.png
|image=Chokistream3ds2.png
|description=A from-scratch re-implementation of Snickerstream.
|description=A from-scratch re-implementation of Snickerstream.
|author=Eiim, herronjo, ChainSwordCS
|author=Eiim, herronjo, ChainSwordCS
|lastupdated=2022/08/17
|lastupdated=2024/02/19
|type=3DS Streaming
|type=3DS Streaming
|version=1.0
|version=2.1.0
|license=GPL-3.0
|license=GPL-2.0
|download=https://github.com/Eiim/Chokistream/releases
|download=https://dlhb.gamebrew.org/3dshomebrews/chokistream3ds.7z
|website=https://github.com/Eiim/Chokistream/wiki
|website=https://github.com/Eiim/Chokistream/wiki
|source=https://github.com/Eiim/Chokistream/releases
|source=https://github.com/Eiim/Chokistream/releases
}}
}}
Chokistream is a Nintendo 3DS wireless video capture software, compatible with [[BootNTR Selector 3DS|BootNTR]] and [[HzMod 3DS|HzMod]] and the only cross-platform video capture software to support HzMod.
Nintendo 3DS wireless video capture software, compatible with [[ChirunoMod 3DS|ChirunoMod]], [[BootNTR Selector 3DS|BootNTR]] and [[HzMod 3DS|HzMod]] and the only cross-platform video capture software to support HzMod.


It is a from-scratch re-implementation of [[Snickerstream 3DS|Snickerstream]], with planned TARGA support from [https://github.com/ChainSwordCS/TGAHz-Parsing TGAHz] and HorizonScreen.
It is a from-scratch re-implementation of [[Snickerstream 3DS|Snickerstream]], with TARGA support in part from [https://github.com/ChainSwordCS/TGAHz-Parsing TGAHz] and HorizonScreen.


==Features==
==Features==
* Portable as it's just a standalone jar file.
*Only client to support ChirunoMod.
* TGA (lossless compression) support for HzMod, the only application other than [https://gbatemp.net/threads/hzmod-old3ds-screen-streaming.469817/post-9684176 HorizonScreen] to do so.
*Pure Java - works on essentially any platform. Tested on Windows and Linux, and lightly tested on Mac and FreeBSD.
* Various display output options to get it looking just right on your monitor.
**Versions < 2.0 support Windows, Linux, and Mac, with OS-specific builds. Builds may not be available for all platforms for all releases.
* Can run entirely headless and stream straight to a video file (currently unstable).
*TGA (lossless compression) support for HzMod, the only application other than HorizonScreen to do so.
* Color correction modes to fix whatever weirdness HzMod may throw your way.
*Various display output options to get it looking just right.
* Dual-Screen HzMod support for version 2017-05-05 (one of two dual-screen versions).
*Dual-Screen HzMod support for version 2017-05-05 (one of two dual-screen versions).
*Can run entirely headless and stream straight to a video file, or output frames to image files.


==User guide==
==User guide==
===Using Chokistream===
'''Note:''' Requires Java 17 to run.
Make sure either [[BootNTR_3DS|NTR]], [[NTR-HR 3DS|NTR-HR]], [[HzMod 3DS|HzMod]], or [[ChirunoMod 3DS|ChirunoMod]] is installed and running on the 3DS. NTR and NTR-HR only supports the New 3DS family.
When you first launch Chokistream, you'll need to select the mod you're using (NTR/HzMod/ChirunoMod) and fill in the IP of your 3DS. These are the most important parts of the setup. There are a number of homebrew apps that can show you your IP:
* [[The_Homebrew_Launcher_3DS|The Homebrew Launcher]]. Press Y in the menu of apps.
* [[WiFi Status Checker 3DS|Wi-Fi Status Checker]] (available on [[Universal-Updater 3DS|Universal Updater]]).
* [[ftpd 3DS|ftpd]] (available on Universal Updater).
* [[FBI 3DS|FBI]] > Remote install > Receive URLs... (available on Universal Updater).
* Use a network scanner, such as the one in the [https://play.google.com/store/apps/details?id=com.ubnt.usurvey WIFIman app] or a PC utility like Nmap.
You may want to set the layout for a better appearance, and the scale if you find that the image is too small. It is recommended to use integer scaling, but decimal is also supported. Depending on your mod, you'll likely also want to set mod settings.
Once you're ready, hit "Connect!". After it connects to the 3DS, it should start showing the display(s). You can press S to take a screenshot, or up and down to adjust the quality if you're using HzMod.
===Chokistream options===
'''General options:'''
*Streaming Mod - The 3DS mod to connect to (NTR, HzMod, ChirunoMod). (Default: NTR)
*3DS IP - The IP address of the 3DS. (Default: 0.0.0.0)
*Layout -The layout of the two screens. Supported in visual output. (Default: Separate)
*Top Scale - Multiplicative factor to scale the top screen by. (Default: 1.0)
*Bottom Scale - Multiplicative factor to scale the bottom screen by. (Default: 1.0)
*Color Mode - Effect to manually correct for color issues (Regular, VC Blue Shift (Test), Grayscale). (Default: Regular)
*3DS Port - The port Chokistream will attempt to connect to (Integer 0-65535). (Default: Depends on mod)
*Log Mode - Where log output goes (Console, File, Both). (Default: Console)
*Log Level - How much logging to enable (Regular, Verbose, Extreme). (Default: Regular)
*Log File - What file to send logging output to in &quot;File&quot; and &quot;Both&quot; log modes. (Default: chokistream.log)
*Output Format - Display the video on the screen, stream to a video file, or save frames as image files. (Default: Visual)
'''NTR settings:'''
*Quality - JPEG image quality (Integer 1-100). (Default: 70)
*Priority Screen - Which screen to send more frequently. (Top, Bottom). (Default: Top)
*Priority Factor - Factor for how frequently to send the priority screen compared to the non-priority screen. (Default: 8)
*QoS - Networking packet priority value. (0-100). (Default: 26)
'''HzMod settings:'''
*Quality - JPEG image quality (Integer 0-100). (Default: 70)
*Request TGA? - Whether to request TGA (lossless) images instead of JPEG. (on/off). (Default: off)
*CPU Cap - CPU limiter for certain HzMod versions (0-100). (Default: 0)
'''ChirunoMod settings:'''
*Quality - JPEG image quality (Integer 1-100). (Default: 70)
*Request TGA? - Whether to request TGA (lossless) images instead of JPEG. (on/off). (Default: off)
*CPU Cap - CPU limiter for certain HzMod versions (0-100). (Default: 0)
*Requested Screen - Which screen to send, or both. (Top, Bottom, Both). (Default: Top)
*Interlace? - Whether or not to request interlaced images (on/off). (Default: off)
'''File Streaming settings:'''
*Video Codec - Codec to use when encoding video files. (Default: ProRes)
*Video File - File to stream video to, without the extension. (Default: out)
'''Image Sequence settings:'''
*Image Directory - Folder to put frames in. (Default: out)
*Image Prefix - Prefix for image files. (Default: None)
===Chokistream vs Snickerstream===
===Chokistream vs Snickerstream===
{|class="wikitable"
{|class="wikitable"
!Chokistream||Snickerstream
!Chokistream||Snickerstream
|-
|-
|Partial HzMod TGA support||NTR Remote Control
|HzMod TGA support||NTR Remote Control
|-
|-
|Dual-screen HzMod (2017-05-05) support||Can adjust HzMod settings mid-stream
|ChirunoMod support||NTR/NFC patching
|-
|-
|Linux & MacOS support||Better NFC patching
|Linux, MacOS, and other OSs support||Customizable controls
|-
|-
|Flexible log output||NTR patching
|Streaming to video or image files||Fullscreen mode
|-
|-
|Streaming to file (unstable for now)||Fullscreen mode
|Dual screen HzMod (2017-05-05) support||Better performance
|-
|-
|Headless mode||Better performance (Generally not noticeable)
|Flexible log output||
|-
|Headless mode||
|-
|-
|}
|}


===HzMod Support Chart===
===HzMod Support Chart===
https://dlhb.gamebrew.org/3dshomebrews/chokistream3ds5.png
{| style="width: 640px;"
|https://dlhb.gamebrew.org/3dshomebrews/chokistream3ds7.png
|}


You can find a list of supported builds with summaries [https://chainswordcs.com/horizon-by-sono.html here] (maintained by ChainSwordC), below is a basic summary of the different files:
For more information see the [https://chainswordcs.com/horizon-by-sono.html list of tested builds] (maintained by ChainSwordCS), below is a basic summary of the different files:
* HorizonM.cia or HzMod.cia - Backend/Base Module (does not show up on Home Menu, if you ever need to uninstall this the TitleID is probably 000401300CF00F02).
* HorizonM.cia or HzMod.cia - Backend/Base Module (does not show up on Home Menu, if you ever need to uninstall this the TitleID is probably 000401300CF00F02).
* HzLoad.cia - Launcher (shows up on Home Menu, does not contain module).
* HzLoad.cia - Launcher (shows up on Home Menu, does not contain module).
* HzLoad_HIMEM.cia - Launcher for extended-memory games on Old 3DS + 2DS only.
* HzLoad_HIMEM.cia - Launcher for extended-memory games on Old 3DS + 2DS only.
* [https://gbatemp.net/threads/hzmod-old3ds-screen-streaming.469817/post-9684176 HorizonScreen] - PC-side viewer by Sono. May not work with some builds.
* [[Snickerstream 3DS|Snickerstream]] - PC-side viewer by RattletraPM. Should work with all builds.


How to setup:
How to setup:
* Find a supported build and install HzLoad.cia and HorizonM.cia on your console (and also HzLoad_HIMEM.cia if you're on an Old 2/3DS).
* Find a supported build, install HzLoad.cia and HorizonM.cia on your console (and also HzLoad_HIMEM.cia if you're on an Old 2/3DS).
* Make sure your 3DS is connected to the internet, then launch HorizonM Loader (or HorizonM HIMEM Loader if you're on an Old 2/3DS and you want to stream high memory games).
* Make sure your 3DS is connected to the internet, then launch HorizonM Loader (or HorizonM HIMEM Loader if you're on an Old 2/3DS and you want to stream high memory games).
* You should be booted back to the Home Menu and the notification LED should be cyan. Make sure Chokistream is connected on the same network as your PC, then launch Chokistream.
* You should be booted back to the Home Menu and the notification LED should be cyan. Make sure Chokistream is connected on the same network as your PC, then launch Chokistream.
===Using Chokistream===
'''Note:''' This requires Java 17 to run.
When you first launch Chokistream (create a file named chokistream.ini in the same directory if it's not there), you'll need to select the mod you're using (NTR or HzMod) and fill in the IP of your 3DS. These are the most important parts of the setup. There are a number of homebrew apps that can show you your IP:
* [https://github.com/hide0123/WiFi-Status-Checker Wi-Fi Status Checker] (available on [[Universal-Updater 3DS|Universal Updater]]).
* [[ftpd 3DS|ftpd]] (available on Universal Updater).
* [[FBI 3DS|FBI]] > Remote install > Receive URLs... (available on Universal Updater).
* Use a network scanner, such as the one in the [https://play.google.com/store/apps/details?id=com.ubnt.usurvey WIFIman app] or a PC utility like Nmap.
You may want to set the layout for a better appearance, and the scale if you find that the image is too small. It is recommended to use integer scaling, but decimal is also supported. Depending on your mod, you'll likely also want to set mod settings.
'''NTR settings:'''
* Quality is a trade-off between image quality and speed. It ranges from 0-100.
* If the game you're streaming uses the bottom screen heavily, you may want to switch the priority screen to bottom.
'''HzMod settings:'''
* Quality is a trade-off between image quality and speed.
* For versions supporting TGA, 0 quality requests TGA. (You can also use the check box).
* The requested screen probably doesn't do anything for any version of HzMod except potentially 2017-05-05.
Once you're ready, hit "Connect!". After it connects to the 3DS, it should start showing the display(s). You can press S to take a screenshot, or up and down to adjust the quality if you're using HzMod.


==Screenshots==
==Screenshots==
Line 87: Line 128:


==Changelog==
==Changelog==
'''v2.1.0'''
* Steaming improvements
* NTR improvements
* HzMod/ChirunoMod improvements
* Additional and customizable controls
* Layout support for file streaming and image sequence modes
* License change from GPLv3 to GPLv2 (or later, except for NTRClient.java)
* Fixed issue with INI files growing increasingly large
* More logging for NTR
* Code refactoring and cleanup
'''v2.0.1'''
* NFC patch for NTR is now working, thanks to @ChainSwordCS!
* Fixed handling for ChirunoMod v0.2.1 broken frames in certain cases.
* Fixed hidden "Apply" button in NTR options.
* File Streaming and Image Sequence output modes now respect scale parameters.
* Improved performance, especially with certain edge cases for HzMod and ChirunoMod.
'''v2.0'''
*Compatibility.
**Full HzMod TGA support.
***There may be some extremely rare edge cases that don't work. If you find one, let us know!.
**Better ChirunoMod and HzMod 24bpp compatibility.
**Better HzMod fractional screen support.
*Image Sequences:
**We now support writing frames to image files!
**Currently limited to PNG output.
**Doesn't respect layout, outputs each frame individually as it gets them.
*GUI:
**Refactored GUI to use Swing instead of JavaFX.
**This eliminates a major source of development difficulties on the GUI.
**Also allows us to support more platforms (e.g. FreeBSD) as we're now fully pure-Java.
**Also cuts our binary down from ~10MB to just ~3MB.
**Simplified our GUI somewhat by removing the currently-unused Interpolation Mode, the newly-unused DPI, and moving video file settings to a new "Output Settings" window.
**Added output settings for image sequences.
**The main settings now have tooltips.
**Assorted visual tweaks.
*Other:
**Better .ini file parsing.
**Bugfix in video streaming output.
'''v1.2'''
*This release primarily adds support for fractional screen with HzMod. This is most strongly felt on Old 3DS systems, which become much more usable with this change, but may improve edge cases for New 3DS systems as well. Also includes one other minor bug fix. Thanks to @ChainSwordCS for debugging this release.
'''v1.1'''
*Full ChirunoMod support with [https://github.com/ChainSwordCS/ChirunoMod/releases/tag/v0.2 v0.2]! This includes things like:
**Interlacing.
**Much better O3DS support.
**Improved image color mode support.
**Options to request top/bottom/both screens.
**Vsync/Hsync for interlacing and O3DS partial screen.
**Much improved logging.
**Lots of bug fixes.
**Some minor code quality improvements.
*[https://github.com/Eiim/Chokistream/compare/v1.0...v1.1 Full changelog].
'''v1.0'''
'''v1.0'''
* HzMod TGA mode support (still somewhat limited).
* HzMod TGA mode support (still somewhat limited).
Line 111: Line 207:
* GitHub - https://github.com/Eiim/Chokistream/
* GitHub - https://github.com/Eiim/Chokistream/


[[Category:DS homebrew applications]]
[[Category:3DS homebrew applications]]
[[Category:PC utilities for DS]]
[[Category:PC utilities for 3DS homebrew]]

Latest revision as of 08:03, 25 February 2024

Chokistream
Chokistream3ds2.png
General
AuthorEiim, herronjo, ChainSwordCS
Type3DS Streaming
Version2.1.0
LicenseGPL-2.0
Last Updated2024/02/19
Links
Download
Website
Source

Nintendo 3DS wireless video capture software, compatible with ChirunoMod, BootNTR and HzMod and the only cross-platform video capture software to support HzMod.

It is a from-scratch re-implementation of Snickerstream, with TARGA support in part from TGAHz and HorizonScreen.

Features

  • Only client to support ChirunoMod.
  • Pure Java - works on essentially any platform. Tested on Windows and Linux, and lightly tested on Mac and FreeBSD.
    • Versions < 2.0 support Windows, Linux, and Mac, with OS-specific builds. Builds may not be available for all platforms for all releases.
  • TGA (lossless compression) support for HzMod, the only application other than HorizonScreen to do so.
  • Various display output options to get it looking just right.
  • Dual-Screen HzMod support for version 2017-05-05 (one of two dual-screen versions).
  • Can run entirely headless and stream straight to a video file, or output frames to image files.

User guide

Using Chokistream

Note: Requires Java 17 to run.

Make sure either NTR, NTR-HR, HzMod, or ChirunoMod is installed and running on the 3DS. NTR and NTR-HR only supports the New 3DS family.

When you first launch Chokistream, you'll need to select the mod you're using (NTR/HzMod/ChirunoMod) and fill in the IP of your 3DS. These are the most important parts of the setup. There are a number of homebrew apps that can show you your IP:

You may want to set the layout for a better appearance, and the scale if you find that the image is too small. It is recommended to use integer scaling, but decimal is also supported. Depending on your mod, you'll likely also want to set mod settings.

Once you're ready, hit "Connect!". After it connects to the 3DS, it should start showing the display(s). You can press S to take a screenshot, or up and down to adjust the quality if you're using HzMod.

Chokistream options

General options:

  • Streaming Mod - The 3DS mod to connect to (NTR, HzMod, ChirunoMod). (Default: NTR)
  • 3DS IP - The IP address of the 3DS. (Default: 0.0.0.0)
  • Layout -The layout of the two screens. Supported in visual output. (Default: Separate)
  • Top Scale - Multiplicative factor to scale the top screen by. (Default: 1.0)
  • Bottom Scale - Multiplicative factor to scale the bottom screen by. (Default: 1.0)
  • Color Mode - Effect to manually correct for color issues (Regular, VC Blue Shift (Test), Grayscale). (Default: Regular)
  • 3DS Port - The port Chokistream will attempt to connect to (Integer 0-65535). (Default: Depends on mod)
  • Log Mode - Where log output goes (Console, File, Both). (Default: Console)
  • Log Level - How much logging to enable (Regular, Verbose, Extreme). (Default: Regular)
  • Log File - What file to send logging output to in "File" and "Both" log modes. (Default: chokistream.log)
  • Output Format - Display the video on the screen, stream to a video file, or save frames as image files. (Default: Visual)

NTR settings:

  • Quality - JPEG image quality (Integer 1-100). (Default: 70)
  • Priority Screen - Which screen to send more frequently. (Top, Bottom). (Default: Top)
  • Priority Factor - Factor for how frequently to send the priority screen compared to the non-priority screen. (Default: 8)
  • QoS - Networking packet priority value. (0-100). (Default: 26)

HzMod settings:

  • Quality - JPEG image quality (Integer 0-100). (Default: 70)
  • Request TGA? - Whether to request TGA (lossless) images instead of JPEG. (on/off). (Default: off)
  • CPU Cap - CPU limiter for certain HzMod versions (0-100). (Default: 0)

ChirunoMod settings:

  • Quality - JPEG image quality (Integer 1-100). (Default: 70)
  • Request TGA? - Whether to request TGA (lossless) images instead of JPEG. (on/off). (Default: off)
  • CPU Cap - CPU limiter for certain HzMod versions (0-100). (Default: 0)
  • Requested Screen - Which screen to send, or both. (Top, Bottom, Both). (Default: Top)
  • Interlace? - Whether or not to request interlaced images (on/off). (Default: off)

File Streaming settings:

  • Video Codec - Codec to use when encoding video files. (Default: ProRes)
  • Video File - File to stream video to, without the extension. (Default: out)

Image Sequence settings:

  • Image Directory - Folder to put frames in. (Default: out)
  • Image Prefix - Prefix for image files. (Default: None)

Chokistream vs Snickerstream

Chokistream Snickerstream
HzMod TGA support NTR Remote Control
ChirunoMod support NTR/NFC patching
Linux, MacOS, and other OSs support Customizable controls
Streaming to video or image files Fullscreen mode
Dual screen HzMod (2017-05-05) support Better performance
Flexible log output
Headless mode

HzMod Support Chart

chokistream3ds7.png

For more information see the list of tested builds (maintained by ChainSwordCS), below is a basic summary of the different files:

  • HorizonM.cia or HzMod.cia - Backend/Base Module (does not show up on Home Menu, if you ever need to uninstall this the TitleID is probably 000401300CF00F02).
  • HzLoad.cia - Launcher (shows up on Home Menu, does not contain module).
  • HzLoad_HIMEM.cia - Launcher for extended-memory games on Old 3DS + 2DS only.
  • HorizonScreen - PC-side viewer by Sono. May not work with some builds.
  • Snickerstream - PC-side viewer by RattletraPM. Should work with all builds.

How to setup:

  • Find a supported build, install HzLoad.cia and HorizonM.cia on your console (and also HzLoad_HIMEM.cia if you're on an Old 2/3DS).
  • Make sure your 3DS is connected to the internet, then launch HorizonM Loader (or HorizonM HIMEM Loader if you're on an Old 2/3DS and you want to stream high memory games).
  • You should be booted back to the Home Menu and the notification LED should be cyan. Make sure Chokistream is connected on the same network as your PC, then launch Chokistream.

Screenshots

chokistream3ds6.png

chokistream3ds4.png

Known issues

Please see https://github.com/Eiim/Chokistream/issues.

Changelog

v2.1.0

  • Steaming improvements
  • NTR improvements
  • HzMod/ChirunoMod improvements
  • Additional and customizable controls
  • Layout support for file streaming and image sequence modes
  • License change from GPLv3 to GPLv2 (or later, except for NTRClient.java)
  • Fixed issue with INI files growing increasingly large
  • More logging for NTR
  • Code refactoring and cleanup

v2.0.1

  • NFC patch for NTR is now working, thanks to @ChainSwordCS!
  • Fixed handling for ChirunoMod v0.2.1 broken frames in certain cases.
  • Fixed hidden "Apply" button in NTR options.
  • File Streaming and Image Sequence output modes now respect scale parameters.
  • Improved performance, especially with certain edge cases for HzMod and ChirunoMod.

v2.0

  • Compatibility.
    • Full HzMod TGA support.
      • There may be some extremely rare edge cases that don't work. If you find one, let us know!.
    • Better ChirunoMod and HzMod 24bpp compatibility.
    • Better HzMod fractional screen support.
  • Image Sequences:
    • We now support writing frames to image files!
    • Currently limited to PNG output.
    • Doesn't respect layout, outputs each frame individually as it gets them.
  • GUI:
    • Refactored GUI to use Swing instead of JavaFX.
    • This eliminates a major source of development difficulties on the GUI.
    • Also allows us to support more platforms (e.g. FreeBSD) as we're now fully pure-Java.
    • Also cuts our binary down from ~10MB to just ~3MB.
    • Simplified our GUI somewhat by removing the currently-unused Interpolation Mode, the newly-unused DPI, and moving video file settings to a new "Output Settings" window.
    • Added output settings for image sequences.
    • The main settings now have tooltips.
    • Assorted visual tweaks.
  • Other:
    • Better .ini file parsing.
    • Bugfix in video streaming output.

v1.2

  • This release primarily adds support for fractional screen with HzMod. This is most strongly felt on Old 3DS systems, which become much more usable with this change, but may improve edge cases for New 3DS systems as well. Also includes one other minor bug fix. Thanks to @ChainSwordCS for debugging this release.

v1.1

  • Full ChirunoMod support with v0.2! This includes things like:
    • Interlacing.
    • Much better O3DS support.
    • Improved image color mode support.
    • Options to request top/bottom/both screens.
    • Vsync/Hsync for interlacing and O3DS partial screen.
    • Much improved logging.
    • Lots of bug fixes.
    • Some minor code quality improvements.
  • Full changelog.

v1.0

  • HzMod TGA mode support (still somewhat limited).
  • GUI rebuilt from the ground up.
  • True nearest-neighbor interpolation.
  • Support for HzMod CPU cap.
  • FPS counter in displays.
  • Stream to a video file.
  • Fully headless/CLI mode.
  • Refactor tons of code to make things easier to work.

v0.1

  • Support for NTR and modern HzMod JPEG mode. Bugs are likely, features are incomplete, and HzMod support is limited, but all these should get better in the near future.

Credits

Special thanks to:

  • RattletraPM for Snickerstream.
  • Sono for HzMod.
  • Cell9/44670 for BootNTR.
  • Nanquitas for BootNTRSelector.
  • All other open-source contributers.

External links

Advertising: