FourthTube 3DS: Difference between revisions
More actions
No edit summary |
b34.1 |
||
| (13 intermediate revisions by 2 users not shown) | |||
| Line 3: | Line 3: | ||
|image=Thirdtube3ds02.png | |image=Thirdtube3ds02.png | ||
|description=Another work-in-progress fork of the homebrew YouTube client for the 3DS called ThirdTube. | |description=Another work-in-progress fork of the homebrew YouTube client for the 3DS called ThirdTube. | ||
|author= | |author=Erie Valley Software | ||
|lastupdated= | |lastupdated=2026/02/06 | ||
|type=Media Players | |type=Media Players | ||
|version= | |version=Beta 34.1 | ||
|license=GPL-3.0 | |license=GPL-3.0 | ||
|download=https://dlhb.gamebrew.org/3dshomebrews/FourthTube3DS.7z | |download=https://dlhb.gamebrew.org/3dshomebrews/FourthTube3DS.7z | ||
| Line 21: | Line 21: | ||
FourthTube is a fork of [[ThirdTube 3DS|ThirdTube]], which had become non-functional around July 2024. The developer of FourthTube, also known for creating NexTube, collaborated with members of the ThirdTube Discord server to implement a fix, resulting in the creation of FourthTube. | FourthTube is a fork of [[ThirdTube 3DS|ThirdTube]], which had become non-functional around July 2024. The developer of FourthTube, also known for creating NexTube, collaborated with members of the ThirdTube Discord server to implement a fix, resulting in the creation of FourthTube. | ||
ThirdTube uses a decrypter and manipulates certain JavaScript files to access YouTube's player without encountering access issues. | ThirdTube uses a decrypter and manipulates certain JavaScript files to access YouTube's player without encountering access issues. FourthTube on the other hand employs a different approach by sending data that mimics the iOS YouTube app, a technique also used by tools like YT-DLP. | ||
[https://github.com/erievs/FourthTube/blob/main/README.md#notice-as-of-the-4th-of-february-2026-on-playback Notice As Of The 4th Of February, 2026 On Playback]. | |||
== Features == | == Features == | ||
| Line 35: | Line 37: | ||
==Installation== | ==Installation== | ||
Requires 3DS (including 2DS) with [[Luma3DS]] (at least 8.1.0-0) and [[DSP1 3DS|DSP1]]. | Requires 3DS (including 2DS) with [[Luma3DS]] (at least 8.1.0-0) and [[DSP1 3DS|DSP1]]. | ||
To migrate data from [[ThirdTube 3DS|ThirdTube]] to FourthTube, rename the /3ds/ThirdTube/ folder to FourthTube. If you were using an unofficial fork of ThirdTube (such as a translation), this folder may be named differently. | |||
== Controls == | == Controls == | ||
| Line 60: | Line 64: | ||
==Screenshots== | ==Screenshots== | ||
https://dlhb.gamebrew.org/3dshomebrews/images/FourthTube3DS- | https://dlhb.gamebrew.org/3dshomebrews/images/FourthTube3DS-03.png | ||
==Changelog== | |||
'''Beta - 34.1''' | |||
* TO PEOPLE WHO ARE UPDATING PLEASE SWITCH TO ANDROID VR IN THE ADVANCE TAB IN SETTINGS YOUR SETTINGS WON'T BE AUTO UPDATED, ANDROID VR WILL ONLY BE DEFAULT IF YOU DIDN'T HAVE ANY SAVE DATA | |||
* erievs & Smu1zel (helped me build the release) && 2ipper (a lot) | |||
** Add the current version to the update header in settings updater. | |||
** Switched the default agent from Android to Android VR, so videos will play again, do note VR does NOT support YouTube kids content. A better solution is being worked on, this is a stopgap update really. | |||
** A lot more, I'll update as I learn more, oops. | |||
'''Beta - 34''' | |||
* Smu1zel | |||
** The screen timeout feature now only turns off the bottom screen. This means you no longer have to set it to Never to make the app usable. | |||
** The iOS client has been removed in favor of Android (with some iOS parameters since that works for some reason). This works with all videos that the iOS client originally supported. visionOS should no longer be preferred due to YouTube blocking Kids videos on it as of September or so. If you used it as a workaround in 33, please switch back. This may also fix video playback in certain regions, but I don't know for certain. | |||
'''Beta - 33''' | |||
* Smu1zel | |||
** Better error screen. | |||
** Formatted the entire codebase with clang-format. | |||
** Added an option to hide the pointer (the red box when you tap the screen). | |||
** FourthTube now uses a better color scheme, instead of using a dull blue nearly everywhere. | |||
** New banner for when a video isn't playing. Criticism is welcome. | |||
** Old ThirdTube config files now retain the scroll speed threshold value set when used in FourthTube. | |||
** Dropped the unused unicodetochar library. | |||
** Changed some font sizes. | |||
** Deleted some obsolete files. | |||
** Changed libctru library path to his. Updated it. | |||
** Some other general improvements to enhance the user's experience (TM) | |||
* 2ipper | |||
** Fixed the community tab. | |||
** Added timestamps. Tapping them in the description or comments will jump you to that timestamp automatically. | |||
** Added Live tab. | |||
** Added Shorts tab. | |||
** Changed the color of the Reload button. | |||
** Removed useless randomVisitorData function. | |||
** Translated the "Hide pointer" string into Japanese. | |||
** Added better resolution detection logic. | |||
** Fixed a bug where a video would end a few seconds early. | |||
* Dragontwo14 | |||
** Made some fixes to the German translation. | |||
** Translated the "Hide pointer" string into German. | |||
* cooolgamer | |||
** Translated the "Hide pointer" string into French. | |||
* Dxni | |||
** Translated the "Hide pointer" string into Italian. | |||
* Misino | |||
** Added a Spanish translation (will be implemented in the future). | |||
'''Beta - 32''' | |||
*Smu1zel | |||
** Added an Italian translation (with help from Dxni) | |||
** Updated stb_image | |||
** Fixed some annoying spelling errors in the English translation | |||
** Lowered the minimum speed limit for videos to 0.25 (to match YouTube) | |||
** Improved the German translation (with help from Dragontwo14) | |||
** Refactored time unit handling in the New tab | |||
*2ipper | |||
** Fixed up the changelog feature | |||
** Fixed occasional performance issues when streaming >240p on clients other than iOS | |||
** Fixed the banner spin | |||
** Other misc fixes | |||
'''Beta - 31''' | |||
* Smu1zel | |||
** Rewrote community posts workaround to take advantage of Google's parameters (images load much faster and take up less memory, at the cost of a small drop in quality). | |||
** Added code to wait up to 20 seconds for the 3DS to connect to Wi-Fi at launch (avoids some race conditions). | |||
** Added visionOS app/spoof data. | |||
** Upgraded nghttp2 to version 1.64.0. | |||
** Some more QoL internal improvements to enhance the developer's experience. | |||
* 2ipper | |||
** Added code to fetch visitorData from YouTube's servers directly (fixes the infamous gray Play button again). | |||
** Added the ability to see the latest changelog in the Update tab. | |||
** Fixed subscriber count in the Subscribed tab. | |||
** Search fixes. | |||
* cooolgamer | |||
** Created a custom boot screen. | |||
'''Beta - 30''' | |||
* Added option to switch app data (iOS, Android VR) to Settings -> Advanced. | |||
* Update iOS client. | |||
''' | * Added visitor data (YouTube requests). (Comment From Me ErieVS: I have no idea why I didn't think about doing this to begin with, I used it with MangoTube, guess I just forgot, anwyas huge thanks to 2ipper for this fix!) | ||
* Added option to switch app data (iOS, Android VR) to Settings -> Advanced | |||
* Update iOS client | |||
* Added visitor data (YouTube requests) (Comment From Me ErieVS: I have no idea why I didn't think about doing this to begin with, I used it with MangoTube, guess I just forgot, anwyas huge thanks to 2ipper for this fix!) | |||
== Credits == | == Credits == | ||
'''FourthTube credits:''' | |||
*[https://github.com/windows-server-2003 WindowsServer2003] - The creator of ThirdTube. | *[https://github.com/windows-server-2003 WindowsServer2003] - The creator of ThirdTube. | ||
*[https://github.com/Smu1zel Smu1zel] - Figured out the line of code that needed to be changed and tested the change out, fixing the app after it stopped working in 2024. | *[https://github.com/Smu1zel Smu1zel] - Figured out the line of code that needed to be changed and tested the change out, fixing the app after it stopped working in 2024. | ||
*[https://github.com/erievs NCP 3.0] - Fixing the app after it stopped working in 2024. | *[https://github.com/erievs NCP 3.0] - Fixing the app after it stopped working in 2024. | ||
*[https://github.com/5GBurrito 5GBurrito] - Minor changes (project manager?). | *[https://github.com/5GBurrito 5GBurrito] - Minor changes (project manager?). | ||
*[https://github.com/2b-zipper | *[https://github.com/2b-zipper 2b-zipper] - New banner, watch history fix, new icon, 480p support, some other fixes, and a fair bit more (thank you so much!). | ||
*[https://github.com/ItsFrocat ItsFrocat] & [https://github.com/Dragontwo14 Dragontwo14] - For the strings used in the German translation. | *[https://github.com/ItsFrocat ItsFrocat] & [https://github.com/Dragontwo14 Dragontwo14] - For the strings used in the German translation. | ||
*[https://github.com/cooolgamer cooolgamer] - For the strings used in the French translation. | *[https://github.com/cooolgamer cooolgamer] - For the strings used in the French translation, as well as a custom boot screen. | ||
*[https://github.com/Icee666 Dxni] - For the strings used in the Italian translation. | |||
*[https://returnyoutubedislike.com/install returndislike] - Used for dislikes. | *[https://returnyoutubedislike.com/install returndislike] - Used for dislikes. | ||
'''ThirdTube credits:''' | |||
* Core 2 Extreme - For [https://github.com/Core-2-Extreme/Video_player_for_3DS Video player for 3DS] which this app is based on. Needless to say, the video playback functionality is essential for this app, and it would not have been possible to develop this software without him spending his time optimizing the code sometimes even with assembly and looking into HW decoding on the new 3DS. | |||
* dixy52-beep - For in-app textures. | |||
* [https://github.com/Poketubepoggu PokéTube] - For the icon and the banner. | |||
* The contributors of [https://github.com/ytdl-org/youtube-dl youtube-dl] - As a reference about YouTube webpage parsing. It was especially helpful for the deobfuscation of ciphered signatures. | |||
* The contributors of [https://github.com/pytube/pytube pytube] - As a reference about YouTube webpage parsing. Thanks to its strict dependency-free policy, I was able to port some of the code without difficulty. | |||
== External links == | == External links == | ||
* | * GitHub - https://github.com/erievs/FourthTube | ||
* GBAtemp - https://gbatemp.net/threads/fourthtube-for-now-a-fork-of-thirdtube-that-works.660775/ | |||
Latest revision as of 10:45, 6 February 2026
| FourthTube | |
|---|---|
| General | |
| Author | Erie Valley Software |
| Type | Media Players |
| Version | Beta 34.1 |
| License | GPL-3.0 |
| Last Updated | 2026/02/06 |
| Links | |
| Download | |
| Website | |
| Source | |
FourthTube is a fork of ThirdTube, which had become non-functional around July 2024. The developer of FourthTube, also known for creating NexTube, collaborated with members of the ThirdTube Discord server to implement a fix, resulting in the creation of FourthTube.
ThirdTube uses a decrypter and manipulates certain JavaScript files to access YouTube's player without encountering access issues. FourthTube on the other hand employs a different approach by sending data that mimics the iOS YouTube app, a technique also used by tools like YT-DLP.
Features
- Video Playback up to 480p.
- Livestreams and premiere videos support.
- Searching.
- Video suggestion.
- Comments.
- Captions.
- Local watch history and channel subscription.
- No ads.
Installation
Requires 3DS (including 2DS) with Luma3DS (at least 8.1.0-0) and DSP1.
To migrate data from ThirdTube to FourthTube, rename the /3ds/ThirdTube/ folder to FourthTube. If you were using an unofficial fork of ThirdTube (such as a translation), this folder may be named differently.
Controls
B - Go back to the previous scene
Circle Pad Up/Down - Scroll
L/R - Switch between tabs
Select+Start - Blackout the bottom screen
In video player:
Left/Right - 10s seek
ZL/ZR - 5s seek
Debugging:
Select+X - Toggle debug log
Select+Y - Toggle memory usage monitor
Select+R+A - Toggle FPS monitor
Screenshots
Changelog
Beta - 34.1
- TO PEOPLE WHO ARE UPDATING PLEASE SWITCH TO ANDROID VR IN THE ADVANCE TAB IN SETTINGS YOUR SETTINGS WON'T BE AUTO UPDATED, ANDROID VR WILL ONLY BE DEFAULT IF YOU DIDN'T HAVE ANY SAVE DATA
- erievs & Smu1zel (helped me build the release) && 2ipper (a lot)
- Add the current version to the update header in settings updater.
- Switched the default agent from Android to Android VR, so videos will play again, do note VR does NOT support YouTube kids content. A better solution is being worked on, this is a stopgap update really.
- A lot more, I'll update as I learn more, oops.
Beta - 34
- Smu1zel
- The screen timeout feature now only turns off the bottom screen. This means you no longer have to set it to Never to make the app usable.
- The iOS client has been removed in favor of Android (with some iOS parameters since that works for some reason). This works with all videos that the iOS client originally supported. visionOS should no longer be preferred due to YouTube blocking Kids videos on it as of September or so. If you used it as a workaround in 33, please switch back. This may also fix video playback in certain regions, but I don't know for certain.
Beta - 33
- Smu1zel
- Better error screen.
- Formatted the entire codebase with clang-format.
- Added an option to hide the pointer (the red box when you tap the screen).
- FourthTube now uses a better color scheme, instead of using a dull blue nearly everywhere.
- New banner for when a video isn't playing. Criticism is welcome.
- Old ThirdTube config files now retain the scroll speed threshold value set when used in FourthTube.
- Dropped the unused unicodetochar library.
- Changed some font sizes.
- Deleted some obsolete files.
- Changed libctru library path to his. Updated it.
- Some other general improvements to enhance the user's experience (TM)
- 2ipper
- Fixed the community tab.
- Added timestamps. Tapping them in the description or comments will jump you to that timestamp automatically.
- Added Live tab.
- Added Shorts tab.
- Changed the color of the Reload button.
- Removed useless randomVisitorData function.
- Translated the "Hide pointer" string into Japanese.
- Added better resolution detection logic.
- Fixed a bug where a video would end a few seconds early.
- Dragontwo14
- Made some fixes to the German translation.
- Translated the "Hide pointer" string into German.
- cooolgamer
- Translated the "Hide pointer" string into French.
- Dxni
- Translated the "Hide pointer" string into Italian.
- Misino
- Added a Spanish translation (will be implemented in the future).
Beta - 32
- Smu1zel
- Added an Italian translation (with help from Dxni)
- Updated stb_image
- Fixed some annoying spelling errors in the English translation
- Lowered the minimum speed limit for videos to 0.25 (to match YouTube)
- Improved the German translation (with help from Dragontwo14)
- Refactored time unit handling in the New tab
- 2ipper
- Fixed up the changelog feature
- Fixed occasional performance issues when streaming >240p on clients other than iOS
- Fixed the banner spin
- Other misc fixes
Beta - 31
- Smu1zel
- Rewrote community posts workaround to take advantage of Google's parameters (images load much faster and take up less memory, at the cost of a small drop in quality).
- Added code to wait up to 20 seconds for the 3DS to connect to Wi-Fi at launch (avoids some race conditions).
- Added visionOS app/spoof data.
- Upgraded nghttp2 to version 1.64.0.
- Some more QoL internal improvements to enhance the developer's experience.
- 2ipper
- Added code to fetch visitorData from YouTube's servers directly (fixes the infamous gray Play button again).
- Added the ability to see the latest changelog in the Update tab.
- Fixed subscriber count in the Subscribed tab.
- Search fixes.
- cooolgamer
- Created a custom boot screen.
Beta - 30
- Added option to switch app data (iOS, Android VR) to Settings -> Advanced.
- Update iOS client.
- Added visitor data (YouTube requests). (Comment From Me ErieVS: I have no idea why I didn't think about doing this to begin with, I used it with MangoTube, guess I just forgot, anwyas huge thanks to 2ipper for this fix!)
Credits
FourthTube credits:
- WindowsServer2003 - The creator of ThirdTube.
- Smu1zel - Figured out the line of code that needed to be changed and tested the change out, fixing the app after it stopped working in 2024.
- NCP 3.0 - Fixing the app after it stopped working in 2024.
- 5GBurrito - Minor changes (project manager?).
- 2b-zipper - New banner, watch history fix, new icon, 480p support, some other fixes, and a fair bit more (thank you so much!).
- ItsFrocat & Dragontwo14 - For the strings used in the German translation.
- cooolgamer - For the strings used in the French translation, as well as a custom boot screen.
- Dxni - For the strings used in the Italian translation.
- returndislike - Used for dislikes.
ThirdTube credits:
- Core 2 Extreme - For Video player for 3DS which this app is based on. Needless to say, the video playback functionality is essential for this app, and it would not have been possible to develop this software without him spending his time optimizing the code sometimes even with assembly and looking into HW decoding on the new 3DS.
- dixy52-beep - For in-app textures.
- PokéTube - For the icon and the banner.
- The contributors of youtube-dl - As a reference about YouTube webpage parsing. It was especially helpful for the deobfuscation of ciphered signatures.
- The contributors of pytube - As a reference about YouTube webpage parsing. Thanks to its strict dependency-free policy, I was able to port some of the code without difficulty.