Homebrew [release] Unified NTR Viewer and Input Redirection program

JennaScvl

Well-Known Member
OP
Newcomer
Joined
May 1, 2013
Messages
63
Trophies
1
Age
44
XP
288
Country
United States
UPDATE! February 14, 2024
I've updated the project for Unity 2022, but my 3DS was stolen in 2019, so I have no way of actually testing it. Anyway, I've also put it up on GitHub and changed the license to AGPL v3. More out of laziness than principle. You're welcome to use it under either license.
https://github.com/JennaScvl/Twix


So what is this? This is Twix.

What is Twix? Twix is a feature packed alternative to ntrViewer, kitkat, SnickerStream, and input redirection programs. It's oriented more toward gamers, streamers, and people doing gameplay recordings



A quick overview of the most important features:
  • Easy to use
  • Supports any and all gamepad and joystick controllers on your computer
  • Even use your keyboard for input
  • Turbo Fire!
  • Antialiasing and some "next gen" effects for the video stream.
  • Great for recording or streaming gameplay footage.
  • Open source with light weight license.
Downloads at the bottom.

  • Multi-threaded (receiving the packets and decoding the video stream are on two separate threads) (build 1)
  • Supports InputRedirection via Luma on the 3DS. (build 1)
  • Integrated touch-screen redirect into the bottom screen output. (build 1)
  • 3D cursor for touch-screen when in a perspective projected 3D display mode. (build 1)
  • Supports any and all game pads your operating system supports out of the box (build 1)
  • All redirected controls configurable to keyboard, mouse, and gamepad buttons and axes. (build 1)
  • Full screen and windowed mode (build 1)
  • Easily resizable windowed mode (no having to restart with the command line like regular NTR Viewer) (build 1)
  • When virtual 3DS mode, the Dpad, A, B, X, Y, Start, Select, and Home buttons can all be clicked on with the mouse without having to configure any controls (build 1)
  • Automatically detects IP of 3DS for input redirection if RemotePlay has already been started on the 3DS (build 1)
  • Supports New3DSXL's c-stick and ZR/ZL buttons (build 1)
  • Two display modes. Virtual 3DS and Draggable Resizable Screens. Switch between them by pressing the display change button (build 3)
  • Screen size and position saved between sessions (build 7)
  • In virtual 3DS display mode, the buttons glow when pressed, to show input when recording (build 8)
  • Automatically finds your 3DS as long as bootNTR and Luma input redirection are running (build 8)
  • Configurable stream quality settings. (build 9)
  • Default stream quality settings produce acceptable quality and framerate for both top and bottom screen. (build 1)
  • Turbo fire(build 9)
  • Antialiasing (build 9)
  • Post processing (build 9)
  • Pixel perfect accuracy on touch screen (build 10)
  • Cycle through different camera angles on Virtual 3DS mode. (build 10)
  • Antialiasing is done on the stream directly (build 10)
  • Record output to MP4 file
  • Recover frames delivered out of order
  • Recover frames delivered out of order
Step 1: Run bootNTR Selector on your 3DS
Step 2: Enable input redirection on Luma.
Step 3: Run Twix
Step 4: If Twix doesn't know the correct IP address for your 3DS, hit Start Stream to find it. Otherwise hit Try IP.
Step 5: Have fun!

When in Virtual 3DS Mode, use the mouse wheel to cycle between camera angles.

In either mode, hit the Escape key to pull up the options window.
I hit Start Stream and Twix never finds my 3DS
If Start Stream never finds your 3DS then either your 3DS isn't on the same router as your computer, the 3DS doesn't have its wifi on, bootNTR and Luma aren't running, or your router is assigning your 3DS an IP that isn't in your computer's range. For example if your computer's LAN address is 192.168.1.2 and your 3DS is on 192.168.1.4 then Start Stream will very quickly find your 3DS. However if your 3DS is on 192.168.2.x, instead of 192.168.1.whatever, then it will not find it and you'll have to manually enter the IP yourself and use "Try IP" button.

By the way, it doesn't matter what your IP is. IPs are arranged like A.B.C.D, and as long as the A, B, and C are the same for the 3DS and the computer Twix is on, it should find it. The higher the D is on the 3DS the longer it'll take, though.

The stream output is glitchy and the frames keep flashing
This happens because of network lag and there's nothing Twix nor any other stream receiver can really do about it. Check to make sure your 3DS and router are close enough, close off any torents or high bandwidth apps on your computer, make sure nothing else is using your router for high bandwidth stuff. Basically the usual slow wifi debugging stuff.

If none of that works, try reducing the jpeg quality or otherwise adjusting the quality settings whens starting a new stream. Ideally, there would be some manner of telling the bootNTR to lower its quality in these situations. I've tried doing that, but it seems that once the stream is started, it can't be adjusted without restarting the 3DS.

The only reason other streamers don't have this problem is they're all using the reference code for interpretting the stream, which drops any incomplete or out of order frames entirely. I rolled my own code by reverse engineering the packets, and I'd personally rather have a glitchy display than one that appears frozen.
Resizable, Draggable screens display mode has touch screen axes being wrong. Please use virtual 3DS mode only for now if you need to use the touch screen. I have a fix already and will be pushing it out with Build 11.






Stream with Jpeg quality set to 80 without post processing
0LG83D0.png


Stream with Jpeg quality set to 80 with post processing
2eF2GCC.png


Both of these screenshots are zoomed in to exaggerate aliasing and jpeg artifacts. They're both from the same stream, using jpeg compression quality of 80, which has quite noticeable artifacts as you can see in the first image. The post processing almost eliminates these jpeg artifacts entirely. So basically, using Twix, if your computer has a good enough video card to support post process effects, you can use a lower jpeg quality for better performance and not sacrifice quality quite as much. Granted the image is slightly blurrier, but that's mostly due to the antialiasing. I will be experimenting with other antialiasing methods as soon as I can figure out how to write the shaders for it.

There aren't many questions I've gotten about it so far but there is one that I keep being asked on other webpages and in private.

Q: Why did you make Twix when there's similar programs available?

A: This question was mainly asked at the very start, when I hadn't added all the extra features I've developed. The main reason is that I wanted to up the ante. I wanted better and knew I could do better. I also hope that Twix inspires the others to do better.

Q: Why are you distributing it under Creative Commons BY NC SA license instead of GPL v3 like the others?

A: A few reasons.

1: I think GPL is over used and it's just slapped on to projects by people who just want the source to stay open without any consideration for the implications of GPL.

2: As a license, GPL is frick'n tome. Very few people understand what it really says, as few of the patience to read it in its entirety, and as a result so many people violate it constantly, without even realizing it, even when they put it on their own project. For example, I've seen BSD licensed code pop up in GPL licensed projects, and that's actually a violation of both BSD and GPL, as BSD allows you to relicense code with additional restrictions, and GPL does not.

3: I made my own code from scratch save for the use of a few shaders, all of which are freely available on the Unity Asset Store for use with any project. So distributing under an easy to understand, CopyLeft license seemed like the thing to do.

4: GPL allows people to take what I've made here and sell it as long as they distribute the source code for their version. Many people fail to do so or they put links to the source code that go nowhere an feign ignorance when it does. By only allowing it Non-Commercial use, I make it unfeasible for someone to do shenanigans like that. Not that we have a huge problem with this kind of thing in the community, but it has happened on a few occasions.

 
Last edited by JennaScvl,

chirogan

The Engineer
Member
Joined
Feb 28, 2018
Messages
379
Trophies
0
XP
396
Country
Philippines
Kitkat has integrated Input redirection AFAIK.
also, you could try snicker Stream and it can work side by side with Luma's in-built Input Redirection.

At least this has inspired you tp create another homwbrew. :D. I have not tested this but thanks and i will look into it soon.
 
  • Like
Reactions: JennaScvl

JennaScvl

Well-Known Member
OP
Newcomer
Joined
May 1, 2013
Messages
63
Trophies
1
Age
44
XP
288
Country
United States
Kitkat has integrated Input redirection AFAIK

It doesn't work with my WiiU gamepad and it requires the original NTR Viewer, which means overlaying a semitransparent window... I haven't tried or even heard of Snicker... Still, I like what I've got and think that even as it is, as long as we (Corscaria and I) can figure out how to clear up the occasional odd frame glitches, it'll be very useful for people doing live streams since being presented on a virtual 3DS is a more polished presentation.

We actually now have two code bases we're playing with for decoding the stream. Mine and Corscaria's. What I packaged up for the initial release is Corscaria's because it was the first that worked. Apparently mine would almost work perfectly but I was reading the jpeg data from 1 byte later in the packet than I was supposed to. Once I started from byte 5 instead of byte 6, the images were reproduced perfectly, without flaw. the only issue then ends up being that sometimes the screens swap and I don't know why.

If we can figure out why the screens swap and fix that, then that'll work out best for us because it's 100% reverse engineered without using the ntr viewer source code as a guide, which means no legal gray area with the infectiousness of the GPLv3 license. We have no problem GPL in general, but we don't like the fact that GPL is like a virus that everything everything it touches.

None of the actual code in the version distributed here is actually GPL, but it's made using the GPL ntr viewer code as a white paper, and that's kind of legally grey.

(EDIT) The code base is no longer using any code I didn't write from scratch except for the Unity engine of course.
 
Last edited by JennaScvl,

JennaScvl

Well-Known Member
OP
Newcomer
Joined
May 1, 2013
Messages
63
Trophies
1
Age
44
XP
288
Country
United States
Ok, I think those glitches weren't glitches, they were dropped packets, and I fixed the screen swapping issue on my codebase. So now, basically Corscaria's code isn't being used at all anymore, and it's all my code now, though Corscaria was the one who figured out the typo that made my decoding algorithm was so mezmerizingly glitchy (seriously, it was pretty in a way, like Hollywood's idea of a glitchy video feed). I'm changing the megalink in the original post so that it's using the all me version of the code.

So this now it's a completely GPL free code. Now I have to mull over which license to use to release the source... I'm pretty against GPL, fond of BSD but I'm not fond of the idea of someone selling it... I'm thinking maybe the AROS license? I haven't committed to that yet, and not that it matters cuz I haven't released the source yet.
 

JennaScvl

Well-Known Member
OP
Newcomer
Joined
May 1, 2013
Messages
63
Trophies
1
Age
44
XP
288
Country
United States
Just got build 7 done. It no longer crashes in the alternate display mode ("windowed"). So once you have the stream going, you can click the ChangeDisplay button and you'll have a top and bottom screen you can drag around and resize independently of eachother. Dragging them uses the right mouse button and resizing uses the mouse wheel. I'd previously made the top screen drag with the left mouse button but in testing that occasionally resulted in accidentally dragging the top screen. if it was close to the bottom screen and you went over the edge.

Also the frames are a lot less glitchy now. There's still an occasional glitch but I don't know where it comes from since I'm dropping any frame with a dropped packet and also dropping frames with out of order packets (next on my list is to reconstruct frames with out of order packets as long as they're still the latest frame to be finished). Since I got that handled, Mac and OSX versions are now available again.
 
Last edited by JennaScvl,

JennaScvl

Well-Known Member
OP
Newcomer
Joined
May 1, 2013
Messages
63
Trophies
1
Age
44
XP
288
Country
United States
Ok! Build 8 is now done and the download links have been changed.

What's new is I've added a shiny input display to the virtual 3DS mode. Now Twix shows you what buttons you're pressing and which direction the cpad and cstick are being pushed in. Buttons glow when pressed and the ABXY buttons glow in the color corresponding to the buttons on a Super Famicom controller, which are also the same colors my New 3DSXL has the letters written in for those buttons.

You can see what it looks like in the Build 8 demo video in the first post in the thread.

Also, Twix now automatically looks for your 3DS to start the stream if there is no stream already. So the ONLY thing you need to do is run bootNTR Selector and enable Luma input redirection on your 3DS, and then load Twix. Everything else should be handled automatically!
 

JennaScvl

Well-Known Member
OP
Newcomer
Joined
May 1, 2013
Messages
63
Trophies
1
Age
44
XP
288
Country
United States
I've got anti-aliasing working on Twix now... Check THIS out!

Before:
AMe1fDt.png


After:
FkUXRLs.png


Check out that sweet, sweet antialiasing! It'll be included in Build 9, which should be done just a few hours after I Wake up, and I'm going to bed right after posting this update.
 
  • Like
Reactions: DarkSynopsis

JennaScvl

Well-Known Member
OP
Newcomer
Joined
May 1, 2013
Messages
63
Trophies
1
Age
44
XP
288
Country
United States
Ok... I'm pretty much ready to take a break. In the last week since I started this project, I've poured maybe 80 hours into it. I've implemented all but 2 of my planned features, plus half a dozen more that I never planned on in the first place. At least on my end it's incredibly stable and reliable.

I've just released Build 9 which has the added features of post process effect, antialiasing for the video stream, configurable stream quality settings (if you start the stream with Twix), it remembers your 3DS's IP address to make it even easier to connect the next time, and MF'n turbo fire! The build 9 demo video in the first post in the thread shows the turbo fire at work and is also using antialiasing and motion blur effect on the video stream.

Oh and the downloads section now has the source code.

Phew, I'm beat... Please people, give it a try now that it's basically done, and let me know what you think. Maybe add suggestions? Or maybe even show me any changes or improvements you've made.
 
  • Like
Reactions: LinkFan16

JennaScvl

Well-Known Member
OP
Newcomer
Joined
May 1, 2013
Messages
63
Trophies
1
Age
44
XP
288
Country
United States
Twix, KitKat and Snickerstream...

Why do all these streaming tools have a name related to a chocolate bar.

Anyway, nice work!

Thanks, I'm glad you like it. As for the name... I'm not sure which one started it, but I'm just going with the trend since I'm kind of late to the game here.

I'm uploading Build 10 to Mega now. Where I live, the internet is powered by cow pies, and we're all out of cow pies, so it's taking an extra long time to upload Build 10 for all 3 platforms and the source code. When it's finished, I'll update the download links.

Build 10 now has post processing for the draggable screens mode, some tweaked improvements to the post processing shaders, 4 different camera angles for Virtual 3DS mode with the mouse wheel. Of the three new three new camera angles, the first lets you zoom in a little bit to have both screens being slightly larger, and the other 2 are zoomed in on the bottom and top screen respectively.

The last feature is a bit of a bug fix, I guess, or an improvement? I noticed that KitKat, SnickerStream, and the reference input redirection app all have the touch screen being rather off and not exactly perfect. I spent two hours making a touch screen test app for the 3DS so I can figure out the math of how to make the touch screen redirection on Twix pixel perfect, and... well... I've succeeded. The touch screen now registers EXACTLY where your mouse cursor is pointing no matter where you're pointing.
 
  • Like
Reactions: ImInsane

niño de cobre

Well-Known Member
Newcomer
Joined
Oct 16, 2013
Messages
82
Trophies
0
XP
292
Country
Chile
long time ago i used ntr viewer and Snickerstream, there is any improvement in the fps side of things? i remember some game that run @60fps on 3ds, but the stream fps varies between 20-40fps
 

JennaScvl

Well-Known Member
OP
Newcomer
Joined
May 1, 2013
Messages
63
Trophies
1
Age
44
XP
288
Country
United States
long time ago i used ntr viewer and Snickerstream, there is any improvement in the fps side of things? i remember some game that run @60fps on 3ds, but the stream fps varies between 20-40fps

What you're describing is caused by a limitation with how fast bootNTR can produce the compressed images for the stream on the 3DS and then send them out over wifi. There's even some games that experience significant slow down when bootNTR is producing a stream. Also, Twix has its own code base so any problems Twix has that the others have isn't Twix's fault, but rather bootNTR's fault.

I do have a large number of improvements over how it works vs the others though. It's just that no amount of code in a stream viewer can make the framerate any higher than the 3DS and bootNTR are capable of pumping it out at.
 
Last edited by JennaScvl,

KyoIsHacking

Well-Known Member
Member
Joined
Jun 17, 2018
Messages
120
Trophies
0
Age
22
XP
474
Country
Austria
Hello!
Nice program but where is the Keyboard config saved? It would be nice to have some way to Reset it.
Also there should be a way to map the D-pad to Keys instead of axis.
 

MyNameIsWest

New Member
Newbie
Joined
Mar 12, 2019
Messages
1
Trophies
0
Age
35
XP
74
Country
United States
Looks like it's been a while since anything happened on this project. Is there any wway you could release the version that has the touchscreen fix implemented?
 

CGNetwork

Well-Known Member
Member
Joined
Nov 11, 2016
Messages
194
Trophies
0
Age
36
XP
261
Country
United States
I've tested it, and it just wouldn't display the screen from my 3DS. Followed the instructions and it did not work after I configured my firewall settings to allow the software.
 

fis60

New Member
Newbie
Joined
Mar 14, 2019
Messages
1
Trophies
0
Age
34
XP
43
Country
Saudi Arabia
Thanks for the software your Mac version is not compiled correctly and doesn't work I fixed it this is a link

mega.nz/#!xaAw2aRL!09-lI_cw0nldEfBzxVQmBvNNrQioDrSDhtg96vKYIvI
 

JennaScvl

Well-Known Member
OP
Newcomer
Joined
May 1, 2013
Messages
63
Trophies
1
Age
44
XP
288
Country
United States
Looks like it's been a while since anything happened on this project. Is there any wway you could release the version that has the touchscreen fix implemented?

As far as I know, the latest version of the source has been released...
I packaged up the latest version of my source, which I'm pretty sure includes unreleased improvements. Not sure what all I did because it's been a long time since I even used it. My life got turned upside down shortly after I stopped updating it. Long story short, I won't go into details about what happened because this isn't the right venue for diary entries.

https://mega.nz/#!sJcm3QyK!kZzWp3M7RZQIiyHFHVzVbdTpTScBPANDwqrlwc3e93o

Hello!
Nice program but where is the Keyboard config saved? It would be nice to have some way to Reset it.
Also there should be a way to map the D-pad to Keys instead of axis.

Not out of the box, no, but I've mothballed the project because it's already well beyond where I wanted/needed it to be. It should be fairly easy to implement for anyone familiar with Unity.

how do you change the stream quality settings along with the current FPS?

Either Reboot the 3DS and do it again with different settings or log in with an NTR client and change it manually, I guess.

I've tested it, and it just wouldn't display the screen from my 3DS. Followed the instructions and it did not work after I configured my firewall settings to allow the software.

Any number of things could be causing this... If you're absolutely sure your 3DS is running NTR properly, punch the IP to it in manually on the start up screen.

Thanks for the software your Mac version is not compiled correctly and doesn't work I fixed it this is a link

mega.nz/#!xaAw2aRL!09-lI_cw0nldEfBzxVQmBvNNrQioDrSDhtg96vKYIvI

Thanks, I have absolutely no way of testing Mac compiles and was simply assuming that Unity for Windows was compiling it to Mac properly. Apparently it is not.
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • No one is chatting at the moment.
    I @ idonthave: :)