Ultrahand Overlay Switch: Difference between revisions
More actions
2.4.1 |
2.4.4 |
||
| (3 intermediate revisions by 2 users not shown) | |||
| Line 4: | Line 4: | ||
|description=The fully craft-able overlay executor. Create directories, manage files, and customize configurations effortlessly using simple ini files. | |description=The fully craft-able overlay executor. Create directories, manage files, and customize configurations effortlessly using simple ini files. | ||
|author=ppkantorski | |author=ppkantorski | ||
|lastupdated=2026/ | |lastupdated=2026/05/28 | ||
|type=Overlays | |type=Overlays | ||
|version=2.4. | |version=2.4.4 | ||
|license=Mixed | |license=Mixed | ||
|download=https://github.com/ppkantorski/Ultrahand-Overlay/releases | |download=https://github.com/ppkantorski/Ultrahand-Overlay/releases | ||
| Line 14: | Line 14: | ||
}} | }} | ||
<!--ultrahandoverlaynx.7z--> | <!--ultrahandoverlaynx.7z--> | ||
Ultrahand Overlay | '''Ultrahand Overlay''' is a fully scriptable overlay menu ecosystem for the Nintendo Switch. | ||
Accessible instantly via hotkey from any game or application, it provides a powerful custom command language for managing files, configurations, and system settings. Built on [https://github.com/ppkantorski/libultrahand libultrahand] (an enhanced fork of [https://github.com/WerWolv/libtesla libtesla]), Ultrahand is a full drop-in replacement for Tesla Menu. | |||
Every existing Tesla overlay (<code>.ovl</code>) works without modification. | |||
==Features== | ==Features== | ||
===For Users=== | |||
* Instantly accessible from any game via hotkey or swipe gesture - no game suspension required. | * Instantly accessible from any game via hotkey or swipe gesture - no game suspension required. | ||
* Launch and manage overlays and packages with assignable per-item key combos. | * Launch and manage overlays and packages with assignable per-item key combos. | ||
* Install and run community packages | * Install and run community packages from [https://github.com/ppkantorski/Ultrahand-Packages Ultrahand Packages]. | ||
* Control volume (up to 150% via bundled audio patch), backlight, and system settings on the fly. | * Control volume (up to 150% via bundled audio patch), backlight, and system settings on the fly. | ||
* Real-time progress feedback for downloads, copies, and installs. | * Real-time progress feedback for downloads, copies, and installs. | ||
* Full touch support - scrolling, tapping, long-tap, and swipe gestures work throughout the entire UI. | * Full touch support - scrolling, tapping, long-tap, and swipe gestures work throughout the entire UI. | ||
* Customizable themes, wallpapers, sound packs, and UI layout. | * Customizable themes, wallpapers, sound packs, and UI layout. | ||
* Toast notification system - packages and external sysmodules/apps can push notifications to the overlay via | * Browser-based [https://ppkantorski.github.io/Ultrahand-Wallpaper/ Wallpaper Designer] - crop, adjust, and export ready-to-drop <code>.rgba</code> wallpapers (448×720). | ||
* A growing ecosystem | * Toast notification system - packages and external sysmodules/apps can push notifications to the overlay via JSON <code>.notify</code> files. | ||
** [https://github.com/ppkantorski/UltraGB-Overlay UltraGB] | * A growing ecosystem of [https://github.com/ppkantorski/libultrahand libultrahand]-based overlays is available, all launchable and manageable directly from Ultrahand: | ||
** [https://github.com/ppkantorski/Tetris-Overlay Tetris] | ** [https://github.com/ppkantorski/UltraGB-Overlay UltraGB] - Game Boy / GBC emulator running on top of any game. | ||
** [https://github.com/ppkantorski/sys-tune sys-tune] | ** [https://github.com/ppkantorski/Tetris-Overlay Tetris] - Fully playable Tetris running as an overlay. | ||
** [https://github.com/ppkantorski/Status-Monitor-Overlay Status Monitor] | ** [https://github.com/ppkantorski/sys-tune sys-tune] - Background music player. | ||
** [https://github.com/ppkantorski/FPSLocker FPSLocker] | ** [https://github.com/ppkantorski/Status-Monitor-Overlay Status Monitor] - Real-time CPU/GPU/RAM, temps, battery, and frequency stats. | ||
** [https://github.com/ppkantorski/sys-clk sys-clk] | ** [https://github.com/ppkantorski/FPSLocker FPSLocker] - Custom FPS targets and display refresh rates for retail games. | ||
** [https://github.com/ppkantorski/ovl-sysmodules ovl-sysmodules] | ** [https://github.com/ppkantorski/sys-clk sys-clk] - Per-game CPU/GPU/memory overclocking and underclocking. | ||
** [https://github.com/ppkantorski/QuickNTP QuickNTP] | ** [https://github.com/ppkantorski/ovl-sysmodules ovl-sysmodules] - Toggle system modules and monitor memory usage on the fly. | ||
** [https://github.com/ppkantorski/Fizeau Fizeau] | ** [https://github.com/ppkantorski/QuickNTP QuickNTP] - One-tap NTP time sync. | ||
** [https://github.com/ppkantorski/NX-FanControl NX-FanControl] | ** [https://github.com/ppkantorski/Fizeau Fizeau] - Color temperature, saturation, gamma, and contrast adjustment. | ||
** [https://github.com/ppkantorski/NX-FanControl NX-FanControl] - Custom fan curve control. | |||
* For a fuller list, see [https://github.com/ppkantorski#ultrahand-overlays Ultrahand Overlays]. | |||
===For Package Devs=== | |||
A rich INI-based GUI scripting environment with: | |||
* '''Launch integration''' - assignable hotkey combos per package, hide/star state, and boot/exit package hooks (<code>boot_package.ini</code> / <code>exit_package.ini</code>) | |||
* '''Overlay control''' - launch overlays, execute package sections, navigate back, exit to menu | |||
* '''Dynamic UI''' - toggles, sliders, dropdowns, tables (drawn directly or loaded from a text file), rich toast notifications (title, duration, alignment, icon), <code>set-footer</code>, and page/theme/wallpaper <code>refresh</code> | |||
* '''Status bar widget''' - opt-in clock, temperature, and battery overlay widget | |||
* '''Language translations''' - package UI strings are automatically translated at render time based on the active system language | |||
* '''Notifications''' - <code>notify</code> / <code>notify-now</code> commands push inline toast messages from scripts; dropping a <code>.notify</code> JSON file to <code>/config/ultrahand/notifications/</code> queues a persistent API notification that displays until dismissed | |||
* '''Placeholders''' - INI, JSON, hex, list, file, and timestamp sources; hardware info (<code>{ams_version}</code>, <code>{hos_version}</code>, <code>{title_id}</code>, <code>{build_id}</code>, <code>{ram_vendor}</code>, <code>{local_ip}</code>, <code>{volume}</code>, <code>{backlight}</code>, fuse data, and more); math and string transforms | |||
* '''Conditional logic''' - <code>try:</code> blocks, <code>path_exists</code>, <code>erista:</code>/<code>mariko:</code> hardware guards, version comparisons | |||
* '''File operations''' - copy, move, delete, rename, mkdir, touch, mirror, compare, flag, dot-clean | |||
* '''Download & extraction''' - download with retry, unzip; performs a one-time NTP sync to <code>pool.ntp.org</code> on first download to prevent SSL handshake failures | |||
* '''INI editing''' - get/set values and keys, add/rename/remove sections and keys, pattern-matched bulk edits | |||
* '''JSON editing''' - get/set values and keys | |||
* '''Hex editing''' - edit by offset, swap, string, decimal, reversed decimal, custom pattern offset, and hex pattern replacement | |||
* '''Mod conversion''' - <code>.pchtxt</code> to <code>.ips</code> or Atmosphere cheat format | |||
* '''System control''' - reboot (Hekate boot/ini/UMS/payload targets), shutdown, volume, backlight, region | |||
See the [https://github.com/ppkantorski/Ultrahand-Overlay/wiki Wiki] for full documentation. | |||
===For Overlay Devs=== | |||
Overlays built on [https://github.com/ppkantorski/libultrahand libultrahand] get access to the full <code>libultra</code> utility suite plus first-class Ultrahand integration: | |||
* '''Tesla compatibility''' - full drop-in replacement for libtesla; existing overlays work without modification | |||
* '''Improved rendering''' - enhanced rendering performance and expanded shape primitives compared to libtesla | |||
* '''Bug fixes''' - title ID change foreground bug, underscan bug, and screenshot transparency bug all resolved versus stock libtesla | |||
* '''Full touch support''' - complete touch input handling with proper scrolling, tap, long-tap, and swipe gesture support (a significant improvement over libtesla's limited touch implementation) | |||
* '''Launch integration''' - assignable combos, hide/star state, and boot/exit package hooks | |||
* '''Per-overlay themes''' - independent theme overrides scoped to your overlay | |||
* '''Per-overlay wallpapers''' - custom wallpaper support with automatic heap-aware fallback | |||
* '''Status bar widget''' - opt-in clock, temperature, and battery overlay widget | |||
* '''Language translations''' - automatic string translation at render time based on the active language | |||
* '''Notifications''' - call <code>tsl::notification->show()</code> or <code>tsl::notification->showNow()</code> to push toast messages from overlay code, with configurable text, font size, priority, duration, alignment, and icon | |||
* '''File & path utilities''' - copy, move, delete, mkdir, wildcard matching, and directory traversal | |||
* '''Download & extraction''' - curl-based file downloads and zip extraction; performs a one-time NTP sync to <code>pool.ntp.org</code> on first download to prevent SSL handshake failures | |||
* '''INI, JSON & hex utilities''' - full read/write access to INI files, JSON files, and binary hex data | |||
* '''Mod conversion''' - <code>.pchtxt</code> to <code>.ips</code> or Atmosphere cheat format | |||
* '''String utilities''' - trim, split, format, version parsing, placeholder resolution | |||
* '''Audio & haptics''' - WAV sound playback with volume control and rumble feedback | |||
See [https://github.com/ppkantorski/libultrahand libultrahand] for full documentation. | |||
==Installation== | ==Installation== | ||
Quick Install (Recommended): | Quick Install (Recommended): | ||
* Download the | * Download the latest [https://github.com/ppkantorski/Ultrahand-Overlay/releases/latest/download/sdout.zip <code>sdout.zip</code>] and extract it to the root of your SD card. It includes everything needed: <code>nx-ovlloader</code>, <code>ovlmenu.ovl</code>, language files, themes, sound packs, and the required folder structure. Boot / reboot and launch Ultrahand with the default hotkey (<code>ZL+ZR+DDOWN</code>) or any Tesla-compatible combo. | ||
Manual Install: | Manual Install: | ||
* Download and install the | * Download and install the latest [https://github.com/ppkantorski/nx-ovlloader nx-ovlloader]. | ||
* | * Place [https://github.com/ppkantorski/Ultrahand-Overlay/releases/latest/download/ovlmenu.ovl <code>ovlmenu.ovl</code>] at <code>/switch/.overlays/ovlmenu.ovl</code>. | ||
* '''Warning:''' | * '''Warning:''' This will replace Tesla Menu if it is installed. | ||
* | * Boot / reboot and launch Ultrahand with the default hotkey (<code>ZL+ZR+DDOWN</code>) or any Tesla-compatible combo. | ||
* On first launch, Ultrahand | * On first launch, Ultrahand creates <code>/config/ultrahand/</code> and generates a starter <code>package.ini</code> at <code>/switch/.packages/</code>. | ||
* If a package does not appear in the menu, try | * If a package does not appear in the menu, try running "Fix Bit Archive" in Hekate. | ||
For available community packages, | For available community packages, see [https://github.com/ppkantorski/Ultrahand-Packages Ultrahand Packages]. | ||
== Settings Overview == | == Settings Overview == | ||
Access the Settings menu by | Access the Settings menu by pressing <code>PLUS</code> from the main screen. | ||
* '''Key Combo''' | * '''Key Combo''' - Configure the hotkey used to open Ultrahand | ||
* '''Language''' | * '''Language''' - Select UI language (loaded from <code>/config/ultrahand/lang/</code>) | ||
* '''Notifications''' | * '''Notifications''' - Toast behavior and API notification settings | ||
** Silence notifications, set max slots, toggle startup notification | ** Silence notifications, set max slots, toggle startup notification | ||
** External sysmodules/apps can push notifications | ** External sysmodules/apps can push notifications via <code>.notify</code> JSON files in <code>/config/ultrahand/notifications/</code>; per-app filtering and 50×50 RGBA icons supported | ||
** '''API Toggle Hotkey''' | ** '''API Toggle Hotkey''' - hold <code>MINUS</code> ~4s to enable/disable API notifications on the fly | ||
* '''System''' | * '''System''' - View device info and adjust overlay memory heap size (4 / 6 / 8 MB) | ||
* '''Software Update''' | * '''Software Update''' - Check for and install updates from within the overlay | ||
* '''Theme''' | * '''Theme''' - Select a theme from <code>/config/ultrahand/themes/</code> | ||
* '''Sounds''' | * '''Sounds''' - Select a sound-effect pack from <code>/config/ultrahand/.sounds/</code> | ||
* '''Wallpaper''' | * '''Wallpaper''' - Set a background wallpaper (requires 6 MB+ heap; <code>.rgba</code> format, 448×720 px) | ||
* '''Widget''' | * '''Widget''' - Toggle individual status bar elements: | ||
** Clock, SOC temperature, PCB temperature, battery | ** Clock, SOC temperature, PCB temperature, battery | ||
** Backdrop, extended backdrop, border | ** Backdrop, extended backdrop, border | ||
* '''Miscellaneous''' | * '''Miscellaneous''' - Granular toggles including: | ||
** Swipe-to-open, haptic feedback, auto NTP sync | ** Swipe-to-open, haptic feedback, auto NTP sync | ||
** Page recall, launch recall | ** Page recall, launch recall | ||
| Line 79: | Line 125: | ||
== Writing Packages == | == Writing Packages == | ||
Packages live | Packages live in <code>/switch/.packages/<YOUR_PACKAGE_NAME>/</code> and are configured with a <code>package.ini</code> file. A minimal example: | ||
<pre class="language-ini">;title='My Package' | <pre class="language-ini">;title='My Package' | ||
| Line 91: | Line 137: | ||
;hold=true | ;hold=true | ||
reboot hekate</pre> | reboot hekate</pre> | ||
For complete documentation on the package format, all available commands, placeholder variables, and command modes, see | For complete documentation on the package format, all available commands, placeholder variables, and command modes, see the [https://github.com/ppkantorski/Ultrahand-Overlay/wiki Wiki]: | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/wiki/Package-Reference Package Reference] - Package structure, headers, pages, boot/exit hooks, and configuration | * [https://github.com/ppkantorski/Ultrahand-Overlay/wiki/Package-Reference Package Reference] - Package structure, headers, pages, boot/exit hooks, and configuration | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/wiki/Command-Reference Command Reference] | * [https://github.com/ppkantorski/Ultrahand-Overlay/wiki/Command-Reference Command Reference] - All commands, modes, source functions, and placeholder variables | ||
For real-world package examples, see | For real-world package examples, see the [https://github.com/ppkantorski/Ultrahand-Overlay/tree/main/examples <code>examples/</code>] directory. | ||
==Controls== | ==Controls== | ||
| Line 133: | Line 179: | ||
==Changelog== | ==Changelog== | ||
'''Version 2.4.4''' | |||
* Quick bug fix for the <code>exit package</code> command. | |||
** In the prior version triggering <code>exit package</code> was preventing the package header from being properly cached for forwarder packages until Ultrahand exits. | |||
*** This broke things like package versions, titles, and info sections in package forwarders from being properly cached after triggering (now resolved). | |||
* '''Side-note:''' Compiled with <code>libultrahand v2.4.3</code> (<code>v2.4.4</code> will be skipped on this release; no changes). | |||
'''Version 2.4.3''' | |||
* Sleep halting of the background event poller in <code>libultrahand</code> (to prevent all polling activity during shallow sleep). | |||
** This makes the CPU load contribution from the overlay 0% during shallow sleep. | |||
'''Version 2.4.2''' | |||
* New package command option header <code>;ram_size_gb=</code> for conditionally drawing commands based on detected system RAM. | |||
** <code>;ram_size_gb=4</code> will only apply on 4GB systems, <code>;ram_size_gb=8</code> on 8GB systems. | |||
** RAM size is detected at fuse data write time and cached. | |||
*** Older fuse files without this key are updated automatically on next startup. | |||
* New package placeholders: <code>{ram_size_gb}</code>, <code>{hekate_version}</code>, <code>{ovlloader_version}</code>, <code>{ultrahand_version}</code>, and <code>{ovl_version(<PATH_TO_OVL>)}</code>. | |||
** <code>{ram_size_gb}</code>: returns <code>4</code> or <code>8</code> based on detected system RAM (read from fuse data). | |||
** <code>{hekate_version}</code>: reads from <code>sdmc:/bootloader/update.bin</code> and is cached at startup. | |||
** <code>{ovlloader_version}</code>: reads from the running loader info and is cached at startup. | |||
** <code>{ultrahand_version}</code>: returns the currently running Ultrahand version. | |||
** <code>{ovl_version(<PATH_TO_OVL>)}</code>: dynamically reads the version of any overlay by path. | |||
* Expanded <code>exit</code> command with new destination arguments. | |||
** <code>exit package</code> instantly returns to the packages menu from anywhere in the package nav stack (including nested menus and script overlays) with the cursor positioned on the originating package. | |||
** <code>exit overlays</code> and <code>exit packages</code> have been renamed to <code>exit to_overlays</code> and <code>exit to_packages</code>. | |||
** <code>exit ovlloader</code> triggers a complete exit of <code>nx-ovlloader</code>. | |||
* Expanded <code>reboot</code> command <code>reboot ovlloader</code> command using the same reload flag mechanism as <code>exit ovlloader</code>. | |||
** Triggers an nx-ovlloader reload on demand without requiring a heap size change. | |||
* <code>nx-ovlloader</code> version is now compared before and after a Software Update. | |||
** If a version change is detected, Ultrahand automatically triggers a reload so the new loader takes effect immediately without a manual reboot. | |||
* New <code>force_failure</code> command. | |||
** Explicitly marks command execution as failed (useful for <code>try:</code> logic in packages). | |||
* Scope fix for <code>exec</code> commands. | |||
** <code>executeIniCommands</code> now correctly derives the package path from the ini file's actual location rather than always defaulting to the calling package's path. | |||
* Bug fix for <code>;mode=option</code> drop-down losing the option symbol on back when no value has been set. | |||
** Footer now correctly restores to <code>OPTION_SYMBOL</code> as the default rather than an empty/null string. | |||
* Name split footer normalization fix for option-mode checkmark matching. | |||
** Footers written by <code>boot_package</code> (e.g. <code>"0 - (default)"</code>) now correctly restored in <code>SelectionOverlay</code> after subsequent value changes. | |||
* Table fixes / improvements. | |||
** Lines beginning with <code>;</code> are now skipped (comment-out support for table rows). | |||
** Rows where a placeholder resolves to <code>""</code> now correctly shift columns instead of rendering a blank first column (bug fix). | |||
** The section and info columns now wrap independently to their own available widths, with rows aligned pairwise so multi-line entries in either column don't go out of sync. | |||
** Creator field text wrapping mode corrected from <code>"none"</code> to word wrapping. | |||
* Bug fix for <code>PROTECTED_FILES</code> (<code>atmosphere/package3</code>, <code>atmosphere/stratosphere.romfs</code>) not being correctly staged to <code>.ultra</code> during <code>copy</code>, <code>move</code>, and <code>unzip</code> operations. | |||
** These changes fix updating AMS from Ultrahand via reboot payload in more test cases. | |||
* IDDQ fuse calibration values now correctly scaled on write (<code>cpu_iddq</code> x4, <code>soc_iddq</code> x4, <code>gpu_iddq</code> x5) to match <code>hekate</code>. | |||
* Scroll bar object rendering corrections in <code>libultrahand</code>. | |||
* <code>atmosphere.rgba</code> wallpaper is now bundled in <code>sdout.zip</code>. | |||
* New master volume IPS patch included (<code>d1e98d469...ips</code>) for latest HOS support. | |||
* Now packaged with [https://github.com/ppkantorski/nx-ovlloader/releases/tag/v2.0.2 nx-ovlloader v2.0.2]. | |||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/59b531c...v2.4.2 Full Changelog: 59b531c...v2.4.2] | |||
'''Version 2.4.1''' | '''Version 2.4.1''' | ||
* Widget now has an optional border (on by default). | * Widget now has an optional border (on by default). | ||
** New theme | ** New theme color <code>widget_border_color</code>. | ||
** New toggle | ** New toggle for <code>Border</code> in <code>Settings > Widget</code>. | ||
** | ** Themes <code>ultra.ini</code> and <code>ultra_blue.ini</code> have been updated. | ||
* Improved audio event handling (for simultaneous sound effect playbacks) | * Improved audio event handling (for simultaneous sound effect playbacks) in <code>libultrahand</code>. | ||
* Improved combo input isolation and button event handling. | * Improved combo input isolation and button event handling. | ||
* Home event system tick flag storing | * Home event system tick flag storing in <code>libultrahand</code> (for devs only). | ||
* Slight alignment corrections. | * Slight alignment corrections. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.4.0...v2.4.1 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.4.0...v2.4.1 Full Changelog: v2.4.0...v2.4.1] | ||
Quick Update: | Quick Update: | ||
* Slight widget alignment correction for the 100% battery case. - 04/20/2026 5:02 AM PST | * Slight widget alignment correction for the 100% battery case. - 04/20/2026 5:02 AM PST | ||
* <code>hide_widget_border</code> | * <code>hide_widget_border</code> variable loading bug fix in <code>libultrahand</code>. -04/20/2026 7:45 AM PST | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.4.1...59b531c Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.4.1...59b531c Full Changelog: v2.4.1...59b531c] | ||
'''Version 2.4.0''' | '''Version 2.4.0''' | ||
* Across the board performance optimizations to rendering methods | * Across the board performance optimizations to rendering methods in <code>libultrahand</code>. | ||
** Significantly improved wallpaper rendering performance (60FPS on 612 MHz cpu under-clock). | ** Significantly improved wallpaper rendering performance (60FPS on 612 MHz cpu under-clock). | ||
* Across the board optimizations to | * Across the board optimizations to all <code>libultra</code> functions in <code>libultrahand</code>. | ||
** Now compiling back to pre-<code>Ultrahand Overlay v1.1.7</code> | ** Now compiling back to pre-<code>Ultrahand Overlay v1.1.7</code> sizes. | ||
* Overlay memory mode features have been expanded. | * Overlay memory mode features have been expanded. | ||
** 6MB overlay heap now supports wallpapers and higher buffer sizes (faster copy, downloads, unzip, etc). | ** 6MB overlay heap now supports wallpapers and higher buffer sizes (faster copy, downloads, unzip, etc). | ||
** 4MB overlay heap now supports sound effects and slightly higher buffer sizes. | ** 4MB overlay heap now supports sound effects and slightly higher buffer sizes. | ||
* Improved table drawing (significantly better performance + various bug fixes). | * Improved table drawing (significantly better performance + various bug fixes). | ||
* Download commands now perform a NTP sync | * Download commands now perform a NTP sync to <code>pool.ntp.org</code> one time after initial startup when called. | ||
** This feature will auto-fix issues with SSL handshakes breaking due to time de-synchronization. | ** This feature will auto-fix issues with SSL handshakes breaking due to time de-synchronization. | ||
** | ** New <code>Auto NTP Sync</code> toggle in the <code>Settings > Miscellaneous</code> menu for disabling this feature. | ||
* | * New <code>Page Recall</code> and <code>Launch Recall</code> toggles in <code>Settings > Miscellaneous</code>. | ||
** <code>Page Recall</code> | ** <code>Page Recall</code> preserves memory of what item you were on on page left / right for proper recall back to that item (on by default). | ||
** <code>Launch Recall</code> | ** <code>Launch Recall</code> takes you back to the exact overlay / package you used a launch combo to enter on the main menu when you click such combo again (on by default). | ||
*** When turned off, combo returns simply return to Ultrahand cold (like before). | *** When turned off, combo returns simply return to Ultrahand cold (like before). | ||
*** '''Side-note:''' | *** '''Side-note:''' This function only works with overlays compiled with >=<code>libultrahand v2.4.0</code>. | ||
* Max overlay / package sort priority has been increased from 20 to 25. | * Max overlay / package sort priority has been increased from 20 to 25. | ||
* Critical bug fixes for page swapping / swapTo | * Critical bug fixes for page swapping / swapTo in <code>libultrahand</code>. | ||
** There was an issue where rapid tapping of page left / right could trigger a broken GUI pointer (crash). | ** There was an issue where rapid tapping of page left / right could trigger a broken GUI pointer (crash). | ||
*** This issue is now resolved. | *** This issue is now resolved. | ||
| Line 172: | Line 269: | ||
** Both sound and haptics now use their own threads for improved reliability with event synchronization for improved performance. | ** Both sound and haptics now use their own threads for improved reliability with event synchronization for improved performance. | ||
* Numerous additional tweaks and unmentioned bug fixes. | * Numerous additional tweaks and unmentioned bug fixes. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/7df15c9...v2.4.0 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/7df15c9...v2.4.0 Full Changelog: 7df15c9...v2.4.0] | ||
'''Version 2.3.0''' | '''Version 2.3.0''' | ||
* Numerous improvements to the notifications implementation. | * Numerous improvements to the notifications implementation. | ||
** Notification options have been moved to the Notifications Menu (in System Settings). | ** Notification options have been moved to the Notifications Menu (in System Settings). | ||
** Multiple notifications can be shown at once (up to | ** Multiple notifications can be shown at once (up to the <code>Max Slots</code> value). | ||
*** When using 4MB overlay memory, max slots is capped at 4, otherwise it is capped at 8. (default value 4) | *** When using 4MB overlay memory, max slots is capped at 4, otherwise it is capped at 8. (default value 4) | ||
** API Notifications (formerly known | ** API Notifications (formerly known as <code>External Notifications</code>) are formatted as follows: | ||
<pre> { | <pre> { | ||
"text": "This is an example notification.", | "text": "This is an example notification.", | ||
| Line 190: | Line 287: | ||
"priority": 20, #optional (ideally not modified) | "priority": 20, #optional (ideally not modified) | ||
}</pre> | }</pre> | ||
*** Stored | *** Stored in <code>/config/ultrahand/notifications/{APP_ID}-{UNIQUE_ID}.notify</code> (JSON format) | ||
*** API Notifications can be filtered with the existence | *** API Notifications can be filtered with the existence of <code>/config/ultrahand/flags/notifications/{APP_ID}.flag</code>. | ||
** Notification icons are now supported and must be 50x50 RGBA format | ** Notification icons are now supported and must be 50x50 RGBA format with <code>{APP_ID}</code> matching the notification json. | ||
*** <code>/config/ultrahand/assets/notifications/{APP_ID}.rgba</code> | *** <code>/config/ultrahand/assets/notifications/{APP_ID}.rgba</code> | ||
** Package | ** Package command <code>notify</code> / <code>notification</code> and <code>notify-now</code> / <code>notification-now</code> has been expanded. | ||
*** <code>notify <MESSAGE> [FONT_SIZE] [TEXT_ALIGNMENT] [SPLIT_TYPE] [DURATION_MS] [TITLE] [SHOW_TIME] [APP_NAME]</code> | *** <code>notify <MESSAGE> [FONT_SIZE] [TEXT_ALIGNMENT] [SPLIT_TYPE] [DURATION_MS] [TITLE] [SHOW_TIME] [APP_NAME]</code> | ||
**** <code><MESSAGE></code>: the main notification message text. (only 4 lines can be displayed) | **** <code><MESSAGE></code>: the main notification message text. (only 4 lines can be displayed) | ||
**** <code>[FONT_SIZE]</code>: an integer value in range 8 to 48 (24 by default with a title, 26 without a title). | **** <code>[FONT_SIZE]</code>: an integer value in range 8 to 48 (24 by default with a title, 26 without a title). | ||
**** <code>[TEXT_ALIGNMENT]</code>: | **** <code>[TEXT_ALIGNMENT]</code>: either <code>left</code>, <code>center</code>, or <code>right</code>. | ||
***** By default, without a title it | ***** By default, without a title it is <code>center</code> and with one it is <code>left</code>. | ||
**** <code>[SPLIT_TYPE]</code>: | **** <code>[SPLIT_TYPE]</code>: either <code>word</code> or <code>char</code>. | ||
**** <code>[DURATION_MS]</code>: the duration for the prompt in milliseconds. (500 min, 4000 by default) | **** <code>[DURATION_MS]</code>: the duration for the prompt in milliseconds. (500 min, 4000 by default) | ||
***** A duration value of 0 will keep the prompt displayed indefinitely until dismissal. | ***** A duration value of 0 will keep the prompt displayed indefinitely until dismissal. | ||
**** <code>[TITLE]</code>: a title for the notification. | **** <code>[TITLE]</code>: a title for the notification. | ||
**** <code>[SHOW_TIME]</code>: | **** <code>[SHOW_TIME]</code>: a <code>true</code>/<code>false</code> value for showing the timestamp alongside the title. (requires a title) | ||
**** <code>[APP_NAME]</code>: allows the notification command to use an icon (used if present) | **** <code>[APP_NAME]</code>: allows the notification command to use an icon (used if present) | ||
***** To use an app name without a title, title must be an empty string (<code>""</code>). | ***** To use an app name without a title, title must be an empty string (<code>""</code>). | ||
*** <code>notify-now</code> | *** <code>notify-now</code> follows the same pattern as <code>notify</code> but always displays in slot 0 with immediate priority. | ||
*** '''Sidenote:''' | *** '''Sidenote:''' All <code>[]</code> parameters are optional and are interpreted based upon their value and order. | ||
** New notification sound | ** New notification sound effect <code>/config/ultrahand/sounds/notification.wav</code>. | ||
*** Users may need to re-apply the default theme for this new sound effect to load. | *** Users may need to re-apply the default theme for this new sound effect to load. | ||
*** | *** The <code>Silence Notifications</code> toggle disables notification sound effects. | ||
** Notifications can be dismissed | ** Notifications can be dismissed with <code>KEY_MINUS</code> clicks, as well as via direct touch. | ||
** API toggle hotkey ( | ** API toggle hotkey (hold <code>KEY_MINUS</code> for 4s) allows disabling API Notifications on demand easily. | ||
*** The API toggle hotkey can be enabled / disabled in the Notifications Menu. | *** The API toggle hotkey can be enabled / disabled in the Notifications Menu. | ||
* New theme | * New theme colors <code>notification_title_color</code>, <code>notification_time_color</code>, and <code>unfocused_color</code>. | ||
** <code>notification_title_color</code> | ** <code>notification_title_color</code> is the color for the notification titles. | ||
** <code>notification_time_color</code> | ** <code>notification_time_color</code> is the color for the notification timestamps. | ||
** <code>unfocused_color</code> | ** <code>unfocused_color</code> is the color <code>KEY_A</code>+" OK" is displayed with at the bottom of the overlay when no items are in focus. | ||
* New package | * New package command <code>touch</code>, called <code>touch <PATH_TO_FILE></code>. | ||
** Command creates an empty text file according to the file path if the file does not exist. | ** Command creates an empty text file according to the file path if the file does not exist. | ||
* | * New <code>Packages Menu</code> toggle (in Miscellaneous) for hiding the packages menu completely. | ||
* Timestamp | * Timestamp placeholder <code>{timestamp()}</code> (with no formatting parameter) can now also be called as <code>{timestamp}</code>. | ||
* <code>System RAM</code> | * <code>System RAM</code> previews now automatically change with <code>Overlay Memory</code> adjustments in the System Settings menu. | ||
* Sound effects can now | * Sound effects can now use <code>8000 Hz</code>, <code>11025 Hz</code>, <code>16000 Hz</code>, <code>22050 Hz</code>, <code>32000 Hz</code>, and <code>44100 Hz</code> 16-bit PCM wav files in addition to <code>48000 Hz</code>. | ||
* Feedback (haptics + sound) is now processed on its own background thread for improved performance and reliability. | * Feedback (haptics + sound) is now processed on its own background thread for improved performance and reliability. | ||
* Improvements to haptics in handheld mode. | * Improvements to haptics in handheld mode. | ||
| Line 231: | Line 328: | ||
* Various list class corrections / improvements. | * Various list class corrections / improvements. | ||
* Various code optimizations, bug fixes, and improvements. | * Various code optimizations, bug fixes, and improvements. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/f580fd9...v2.3.0 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/f580fd9...v2.3.0 Full Changelog: f580fd9...v2.3.0] | ||
Quick Update: | Quick Update: | ||
* JSON placeholder parsing bug fix (for allowing numerical / boolean conversions to strings). - 03/12/2026 11:26 PM PST | * JSON placeholder parsing bug fix (for allowing numerical / boolean conversions to strings). - 03/12/2026 11:26 PM PST | ||
| Line 240: | Line 337: | ||
'''Version 2.2.9''' | '''Version 2.2.9''' | ||
* Overlay freeze bug fix triggered when entering the packages menu | * Overlay freeze bug fix triggered when entering the packages menu with '''GDB debugging''' enabled in Atmosphere. | ||
** | ** When <code>enable_htc = u8!0x0</code> and <code>enable_standalone_gdbstub = u8!0x1</code> are present in the <code>system_settings.ini</code>, prior versions can freeze / become unresponsive when entering the packages menu (or any package in general) while within an application / game. | ||
** This was | ** This was because <code>getBuildIdAsString</code> (updated among the general placeholders) was relying on <code>dmnt:cht</code> which conflicts directly with the standalone GDB stub. | ||
* <code>libnx</code> | * <code>libnx</code> has been updated to latest. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/c6a9c08...v2.2.9 Full Changelog: c6a9c08...v2.2.9] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/c6a9c08...v2.2.9 Full Changelog: c6a9c08...v2.2.9] | ||
Quick update: | Quick update: | ||
* Build ID value correction (was pulled from wrong index). - 02/22/2026 12:49 PM PST<br /> | * Build ID value correction (was pulled from wrong index). - 02/22/2026 12:49 PM PST<br /> | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.2.9...f580fd9 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.2.9...f580fd9 Full Changelog: v2.2.9...f580fd9] | ||
'''Version 2.2.8''' | '''Version 2.2.8''' | ||
| Line 295: | Line 392: | ||
'''Version 2.2.7''' | '''Version 2.2.7''' | ||
* Critical bug fix for touch navigation (crash fix). | * Critical bug fix for touch navigation (crash fix). | ||
** Touch navigation redirection for direct touch on list items | ** Touch navigation redirection for direct touch on list items utilizing <code>swapTo</code> (in <code>libultrahand</code> v2.2.3 -> v2.2.5) could trigger crashes randomly (pointer still referenced after deconstruction). | ||
* New settings toggle for startup notifications (<code>Startup Notifications</code>; on by default). | * New settings toggle for startup notifications (<code>Startup Notifications</code>; on by default). | ||
** New restart notification | ** New restart notification for <code>nx-ovlloader</code> memory settings changes. | ||
** Proper restart vs startup condition isolations. | ** Proper restart vs startup condition isolations. | ||
* Notifications toggle has been renamed | * Notifications toggle has been renamed to <code>External Notifications</code> and will only be applied to JSON based notifications. | ||
* The "hold A to execute" behavior now works via touch. | * The "hold A to execute" behavior now works via touch. | ||
** Hold duration has been reduced to 4 seconds. | ** Hold duration has been reduced to 4 seconds. | ||
* Package | * Package command <code>pchtxt2cheat</code> now accepts names for the cheats being converted (fix). | ||
** | ** Called <code>pchtxt2cheat <SOURCE_PATH> [CHEAT_NAME]</code>. | ||
* Table scrolling | * Table scrolling with <code>KEY_UP</code> / <code>KEY_DOWN</code> clicks have been slightly refined. | ||
* Touch feedback refinements. | * Touch feedback refinements. | ||
* Socket is now initialized and exited per download. | * Socket is now initialized and exited per download. | ||
| Line 310: | Line 407: | ||
* Software updates now automatically reload Ultrahand on exit from the update menu (rather than on exits from the settings menu). | * Software updates now automatically reload Ultrahand on exit from the update menu (rather than on exits from the settings menu). | ||
* Multiple list corrections, focus resuming, touch related bug fixes, and more. | * Multiple list corrections, focus resuming, touch related bug fixes, and more. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.2.6...v2.2.7 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.2.6...v2.2.7 Full Changelog: v2.2.6...v2.2.7] | ||
Quick Update: | Quick Update: | ||
* Table scrolling bug fix. - 1/11/2026 1:03 AM PST | * Table scrolling bug fix. - 1/11/2026 1:03 AM PST | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.2.7...e6e825d Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.2.7...e6e825d Full Changelog: v2.2.7...e6e825d] | ||
'''Version 2.2.6''' | '''Version 2.2.6''' | ||
* Sequential placeholder replacement bug fixes (for package commands). | * Sequential placeholder replacement bug fixes (for package commands). | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.2.5...v2.2.6 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.2.5...v2.2.6 Full Changelog: v2.2.5...v2.2.6] | ||
'''Version 2.2.5''' | '''Version 2.2.5''' | ||
* Critical bug fix for crashes on the packages / package menu | * Critical bug fix for crashes on the packages / package menu when '''not connected to a network'''. | ||
* <code>unpackDeviceInfo</code> | * <code>unpackDeviceInfo</code> sequencing correction. | ||
* | * Added <code>curl_global_cleanup</code> to <code>exitServices</code> (to cleanup curl global resources on app exit). | ||
* Buffer initialization correction for download / unzip functions. | * Buffer initialization correction for download / unzip functions. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/f4978f0...v2.2.5 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/f4978f0...v2.2.5 Full Changelog: f4978f0...v2.2.5] | ||
'''Version 2.2.4''' | '''Version 2.2.4''' | ||
* OverlayFrame titles now auto-scroll when too long or covered by the widget (just like subtitles). | * OverlayFrame titles now auto-scroll when too long or covered by the widget (just like subtitles). | ||
* Copy, move, and delete wildcard commands now | * Copy, move, and delete wildcard commands now support <code>-filter <PATH_TO_TXT></code> (path to a text file containing a list of files / folders to be filtered from pattern resolution). | ||
* <code>-filter</code> | * <code>-filter</code> now properly resolves <code>./</code> and <code>../</code> paths and no longer require hardcoded <code>sdmc:/</code> in the file / folder paths. | ||
* Bug fix for the ScriptOverlay on track-bars (was improperly utilizing the index / value). | * Bug fix for the ScriptOverlay on track-bars (was improperly utilizing the index / value). | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/8bc9e73...v2.2.4 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/8bc9e73...v2.2.4 Full Changelog: 8bc9e73...v2.2.4] | ||
Quick update: | Quick update: | ||
* Removal | * Removal of <code>;mode=</code>, <code>;grouping=</code>, and <code>;system=</code> pattern values from being cached in the package <code>config.ini</code> metadata and loaded (was unnecessary). - 12/15/2025 8:21 AM PST | ||
* Slight tweak to json placeholder replacements to, when the key does not exist, assume the key | * Slight tweak to json placeholder replacements to, when the key does not exist, assume the key is <code>null</code>. - 12/15/2025 12:56 PM PST | ||
* Command footer highlight loading bug fix (when defined in | * Command footer highlight loading bug fix (when defined in the <code>config.ini</code> but not the <code>package.ini</code> command). - 12/15/2025 1:35 PM PST | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.2.4...f4978f0 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.2.4...f4978f0 Full Changelog: v2.2.4...f4978f0] | ||
'''Version 2.2.3''' | '''Version 2.2.3''' | ||
* Improvements to | * Improvements to the <code>List</code> class in <code>libultrahand</code>. | ||
** No more pointer caching (less memory usage, faster openings / list to list transitions, more consistent behavior). | ** No more pointer caching (less memory usage, faster openings / list to list transitions, more consistent behavior). | ||
** Proper "wall" handling for initial clicks that select the first / last ListItems (no instant wrap around until subsequent clicks). | ** Proper "wall" handling for initial clicks that select the first / last ListItems (no instant wrap around until subsequent clicks). | ||
** Theme | ** Theme variable <code>trackbar_color</code> is now <code>scrollbar_color</code> + new color <code>scrollbar_wall_color</code> (triggered when tapping ends of the list). | ||
*** Updates | *** Updates to <code>ultra.ini</code> and <code>ultra-blue.ini</code> themes (as well as <code>default</code>). | ||
**** Themes will need to be re-applied for changes to be applied. | **** Themes will need to be re-applied for changes to be applied. | ||
** Fixes to the "immediate focus" implementation introduced in v2.2.2. | ** Fixes to the "immediate focus" implementation introduced in v2.2.2. | ||
* New package command | * New package command header <code>;footer=</code> and <code>;footer_highlight=</code>. | ||
** <code>;footer=</code> | ** <code>;footer=</code> allows users to pre-define a default footer value for a package command (to be used, stored, and set when no footer exists in the <code>config.ini</code> for the package. | ||
** <code>;footer_highlight=</code> | ** <code>;footer_highlight=</code> is a <code>true</code> / <code>false</code> parameter that will draw the footer with the highlight color when on. | ||
*** <code>footer_highlight</code> | *** <code>footer_highlight</code> is also a new key to be used in the <code>config.ini</code> for manually configuring the footer highlight for the command. | ||
* Hold | * Hold mode <code>;mode=hold</code> is no longer a command mode and can now be set for <code>default</code>, <code>option</code>, and <code>slot</code> commands via <code>;hold=true</code>. | ||
** The default | ** The default generated <code>package.ini</code> now uses this command header. | ||
*** Users may want to delete | *** Users may want to delete their <code>/switch/.packages/package.ini</code> and have Ultrahand re-generate it if they are still using the old <code>package.ini</code>. | ||
** '''Side-note:''' | ** '''Side-note:''' If using <code>;mode=hold</code>, users will need to update their commands to leverage <code>;hold=true</code> instead. | ||
* Fixes to the placeholder parsing implementation. | * Fixes to the placeholder parsing implementation. | ||
** Proper handling and resolution sequencing of unresolved placeholders. | ** Proper handling and resolution sequencing of unresolved placeholders. | ||
** Placeholder methods before | ** Placeholder methods before the <code>_source</code> definitions are now carried over to the rest of the commands (rather than reset). | ||
* Touch improvements to track-bars. | * Touch improvements to track-bars. | ||
* Optimizations to command menu drawings. | * Optimizations to command menu drawings. | ||
| Line 367: | Line 464: | ||
* Footer package command header bug fixes (now to allow spaces). - 12/11/2025 3:57 PM PST | * Footer package command header bug fixes (now to allow spaces). - 12/11/2025 3:57 PM PST | ||
** Bug fix from prior changes. - 12/11/2025 5:20 PM PST | ** Bug fix from prior changes. - 12/11/2025 5:20 PM PST | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.2.3...8bc9e73 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.2.3...8bc9e73 Full Changelog: v2.2.3...8bc9e73] | ||
'''Version 2.2.2''' | '''Version 2.2.2''' | ||
* Proper fix for default combo initializations (on fresh installs). | * Proper fix for default combo initializations (on fresh installs). | ||
** Launch combo is first checked and loaded | ** Launch combo is first checked and loaded from <code>/config/tesla/config.ini</code>. | ||
** If the Tesla combo does not exist, and no combo | ** If the Tesla combo does not exist, and no combo in <code>/config/ultrahand/config.ini</code> exists, users can use the default Tesla combo (<code>L+DDOWN+RS</code>) or the default Ultrahand combo (<code>ZL+ZR+DDOWN</code>) for initializing their default combo. | ||
*** Once initialized, Ultrahand will assume the combo the user used until changed in the Settings menu. | *** Once initialized, Ultrahand will assume the combo the user used until changed in the Settings menu. | ||
* Bug fix for returning from an overlay while touch is still in progress (multiple cursors). | * Bug fix for returning from an overlay while touch is still in progress (multiple cursors). | ||
** If foreground is in focus and a button is clicked while touch is in progress, input will now be prevented (with button click feedback). | ** If foreground is in focus and a button is clicked while touch is in progress, input will now be prevented (with button click feedback). | ||
* Bug fix for returning to the overlay menu after using an overlay launch combo and exiting the overlay (<code>KEY_B</code> | * Bug fix for returning to the overlay menu after using an overlay launch combo and exiting the overlay (<code>KEY_B</code> click). | ||
** Before | ** Before the <code>jumpToItem</code> implementation would kick in on the next launch of Ultrahand after closing the overlay, causing the cursor to shift unnecessarily to the last open overlay title on the overlay menu. | ||
* Bug fix for widget settings not auto-loading on first fresh install launch. | * Bug fix for widget settings not auto-loading on first fresh install launch. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.2.1...v2.2.2 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.2.1...v2.2.2 Full Changelog: v2.2.1...v2.2.2] | ||
Quick update: | Quick update: | ||
| Line 469: | Line 566: | ||
'''Version 2.1.8''' | '''Version 2.1.8''' | ||
* AMS 1.10.0+ and HOS 21 support. | * AMS 1.10.0+ and HOS 21 support. | ||
** Overlays not recompiled with | ** Overlays not recompiled with latest <code>libnx</code> no longer work without manual force enabling (potentially dangerous). | ||
** Unsupported overlays can now be hidden (toggle is within the settings menu). | ** Unsupported overlays can now be hidden (toggle is within the settings menu). | ||
*** '''Important:''' | *** '''Important:''' All homebrew on <code>AMS 1.10+</code> must to be recompiled with latest <code>libnx</code> for properly ensured support. | ||
* Anti-aliasing is now applied to rounded rects, uniform rounded rects, bordered rounded rects, and circles. | * Anti-aliasing is now applied to rounded rects, uniform rounded rects, bordered rounded rects, and circles. | ||
** Overall smoother, less pixelated / jagged edges. | ** Overall smoother, less pixelated / jagged edges. | ||
| Line 478: | Line 575: | ||
* Initial state bug fix for main settings menu toggles. | * Initial state bug fix for main settings menu toggles. | ||
* Bug fix for ini file saving. (buffer was too large) | * Bug fix for ini file saving. (buffer was too large) | ||
** This fixes | ** This fixes the <code>open</code> overlay command in Ultrahand packages. | ||
* Bug fix for ini file parsing not | * Bug fix for ini file parsing not returning <code>null</code> on failed parsings. | ||
* Fixed Chinese font selection to ensure all glyphs display correctly on Traditional Chinese systems. | * Fixed Chinese font selection to ensure all glyphs display correctly on Traditional Chinese systems. | ||
** Special thanks | ** Special thanks to [https://github.com/BadFish-HSrui @BadFish-HSrui]. | ||
* <code>nx-ovlloader</code>/<code>nx-ovlloader+</code> | * <code>nx-ovlloader</code>/<code>nx-ovlloader+</code> has now been updated (v1.1.2) for AMS 1.10+ support. | ||
** '''Important:''' | ** '''Important:''' Double check that you are on v1.1.2 BEFORE updating AMS (if you choose to). | ||
* <code>libnx</code> | * <code>libnx</code> has been manually recompiled with <code>-Os</code> as well as several other code generation optimizations. | ||
* Various minor bug fixes and corrections. | * Various minor bug fixes and corrections. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.1.7...v2.1.8 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.1.7...v2.1.8 Full Changelog: v2.1.7...v2.1.8] | ||
Quick Update: | Quick Update: | ||
* Removal of pre-release status. - 11/15/2025 6:04 PM PST | * Removal of pre-release status. - 11/15/2025 6:04 PM PST | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.1.8...e84de59 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.1.8...e84de59 Full Changelog: v2.1.8...e84de59] | ||
'''Version 2.1.7''' | '''Version 2.1.7''' | ||
* Bug fix for notification text being drawn transparent when hidden (related to the global alpha limiter). | * Bug fix for notification text being drawn transparent when hidden (related to the global alpha limiter). | ||
* Bug fix for | * Bug fix for toggling <code>Memory Expansion</code> preventing users from exiting the Ultrahand settings menu. | ||
* Ini method optimizations (faster loading). | * Ini method optimizations (faster loading). | ||
* Proper menu return to last selected overlay / package when version labels are hidden. | * Proper menu return to last selected overlay / package when version labels are hidden. | ||
| Line 518: | Line 615: | ||
'''Version 2.1.5''' | '''Version 2.1.5''' | ||
* New haptic feedback and sound effects options | * New haptic feedback and sound effects options in <code>Features</code> under <code>Miscellaneous</code> in the settings menu. | ||
** Haptic feedback is off by default. | ** Haptic feedback is off by default. | ||
** Sound effects are on by default, but | ** Sound effects are on by default, but require [https://github.com/ppkantorski/Ultrahand-Overlay/tree/main/sounds sound files] to be added to <code>/config/ultrahand/sounds/</code>. | ||
*** Users updating to v2.1.5 must | *** Users updating to v2.1.5 must run <code>Update</code> from the <code>Software Update</code> page one more time after updating for the included sound effects to be properly installed. | ||
*** Users can manually disable updates of the sound effect files by adding a file | *** Users can manually disable updates of the sound effect files by adding a file named <code>NO_SOUND_EFFECTS_UPDATES.flag</code> into <code>/config/ultrahand/flags/</code>. | ||
** Sound effects are only enabled | ** Sound effects are only enabled on <code>nx-ovlloader+</code>, not regular <code>nx-ovloader</code>. | ||
** '''Sidenote:''' | ** '''Sidenote:''' | ||
*** Sounds and haptics will also be applied to every overlay compiled | *** Sounds and haptics will also be applied to every overlay compiled with <code>libultrahand v2.1.5+</code>. | ||
*** Sound files must be relatively small to prevent memory related issues and keep latency low. | *** Sound files must be relatively small to prevent memory related issues and keep latency low. | ||
** Special thanks | ** Special thanks to [https://github.com/sskyNS @sskyNS] for help with identifying the correct audio services implementation. | ||
* Transition bug fixes for | * Transition bug fixes for cached <code>List</code> frames. | ||
** These fixes ensure the overlay list changes are synchronized with the top and bottom parts of the OverlayFrame during menu transitions. | ** These fixes ensure the overlay list changes are synchronized with the top and bottom parts of the OverlayFrame during menu transitions. | ||
* Various refinements and bug fixes to the download file command. | * Various refinements and bug fixes to the download file command. | ||
** Buffer sizes have been tweaked, memory related improvements applied, and boundary case crashes resolved. | ** Buffer sizes have been tweaked, memory related improvements applied, and boundary case crashes resolved. | ||
* Memory related improvements | * Memory related improvements for <code>copy</code> and <code>move</code> commands running on the interpreter thread. | ||
* The "Selection is empty!" message is now properly centered, and applied to the overlay menu when no overlays have been added. | * The "Selection is empty!" message is now properly centered, and applied to the overlay menu when no overlays have been added. | ||
** This ensures that translations are properly centered text instead of drawing text misaligned. | ** This ensures that translations are properly centered text instead of drawing text misaligned. | ||
| Line 546: | Line 643: | ||
'''Version 2.1.4''' | '''Version 2.1.4''' | ||
* | * New <code>sdout.zip</code> distribution, bundled with all components and dependencies (up-to-date) for easier SD card installations. | ||
** | ** Installs <code>nx-ovlloader+</code> by default, but users can toggle off <code>Memory Expansion</code> after installing for regular <code>nx-ovlloader</code>. | ||
* New build ID placeholder | * New build ID placeholder variable <code>{build_id}</code>. | ||
* New system region setting | * New system region setting command <code>set-region <REGION></code>. | ||
** <code><REGION></code> | ** <code><REGION></code> is either <code>JPN</code>, <code>USA</code>, <code>EUR</code>, <code>AUS</code>, <code>HTK</code>, or <code>CHN</code>. | ||
** '''Side-note:''' | ** '''Side-note:''' Reboot is required for changes to apply. | ||
* Bug fix | * Bug fix for <code>refresh wallpaper</code>. | ||
* Various code optimizations and restructurings. | * Various code optimizations and restructurings. | ||
* Stability related bug fixes. | * Stability related bug fixes. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.1.3...v2.1.4 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v2.1.3...v2.1.4 Full Changelog: v2.1.3...v2.1.4] | ||
'''Version 2.1.3''' | '''Version 2.1.3''' | ||
* Bug fixes for regular toggles (state was not being preserved | * Bug fixes for regular toggles (state was not being preserved in <code>config.ini</code>). | ||
* Bug fixes for toggles in the root package (<code>/switch/.packages/package.ini</code>). | * Bug fixes for toggles in the root package (<code>/switch/.packages/package.ini</code>). | ||
* Restoration of | * Restoration of the <code>{index}</code> source function placeholder (was accidentally removed at some point over time). | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/855f0d1...v2.1.3 Full Changelog: 855f0d1...v2.1.3] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/855f0d1...v2.1.3 Full Changelog: 855f0d1...v2.1.3] | ||
'''Version 2.1.2''' | '''Version 2.1.2''' | ||
* Rendering bug fix for | * Rendering bug fix for regular <code>TrackBar</code> objects / uniform rounded rects. | ||
** Uniform rounded rects in some circumstances when drawn off screen could cause crashes. | ** Uniform rounded rects in some circumstances when drawn off screen could cause crashes. | ||
** '''Side-note:''' | ** '''Side-note:''' Did not affect <code>StepTrackBar</code>/ <code>NamedStepTrackBar</code>. | ||
* Left / right sensitivity fix for value transitions on | * Left / right sensitivity fix for value transitions on regular <code>TrackBar</code> objects have been adjusted for precision. | ||
* Various method restructurings. | * Various method restructurings. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/7b8de7f...v2.1.2 Full Changelog: 7b8de7f...v2.1.2] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/7b8de7f...v2.1.2 Full Changelog: 7b8de7f...v2.1.2] | ||
| Line 591: | Line 688: | ||
* New system notifications implementation. | * New system notifications implementation. | ||
** There are 3 ways to interface with system notifications. | ** There are 3 ways to interface with system notifications. | ||
*** a. | *** a. '''Ultrahand Package''': <code>notify <MESSAGE> [FONT_SIZE]</code> or <code>notification <MESSAGE> [FONT_SIZE]</code> | ||
*** b. | *** b. '''Direct <code>libtesla</code> calls:''' <code>tsl::notification->show(<MESSAGE>, [FONT_SIZE], [PRIORITY]);</code> | ||
*** c. | *** c. '''External json calls''': <code>{"text": <MESSAGE>, "font_size": [FONT_SIZE], "priority": [PRIORITY]}</code> | ||
** Font size is an optional parameter, default | ** Font size is an optional parameter, default value <code>28</code>. | ||
** Priority is an optional, with jsons always assume | ** Priority is an optional, with jsons always assume priority <code>10</code> while Ultrahand packages / direct calls assume priority <code>20</code>. | ||
** Creation time for jsons is auto prioritized for everything within the same priority level. | ** Creation time for jsons is auto prioritized for everything within the same priority level. | ||
** For external json calls, jsons can be written | ** For external json calls, jsons can be written to <code>/config/ultrahand/notifications/<PROGRAM_ID>-<UNIQUE_ID>.notify</code>. | ||
*** This function allows any program, including sys modules, to interface with the notification prompts. | *** This function allows any program, including sys modules, to interface with the notification prompts. | ||
** New theme color for notification text: | ** New theme color for notification text: <code>notification_text_color</code> | ||
** '''Notice:''' | ** '''Notice:''' Overlays must be compiled with the latest <code>libultrahand</code> for system notifications within those overlays. | ||
* New overlay / package setting option to delete an overlay / package. (Hold A to Delete) | * New overlay / package setting option to delete an overlay / package. (Hold A to Delete) | ||
* | * New <code>Miscellaneous</code> options for toggling on / off notifications and show delete. | ||
* New notifications for startup, new version detection, and when reboot is required for changes to apply. | * New notifications for startup, new version detection, and when reboot is required for changes to apply. | ||
* New page for empty selection commands. | * New page for empty selection commands. | ||
* New placeholder variable for returning the current local ip address, | * New placeholder variable for returning the current local ip address, called <code>{local_ip}</code>. | ||
* New package header | * New package header option <code>;display_title=</code> for displaying an alternative in package display title. | ||
* Category headers now auto-scroll right to left for extended text. | * Category headers now auto-scroll right to left for extended text. | ||
* Improvements to package memory usage. | * Improvements to package memory usage. | ||
** Pages are no longer held up in memory for deeper menu navigation. | ** Pages are no longer held up in memory for deeper menu navigation. | ||
* Improvements | * Improvements to <code>dot-clean</code>, faster file processing completion. | ||
* Improvements package | * Improvements package item <code>jumpToItem</code> calls. | ||
** Full command names, including tags, are now properly utilized for specific item name isolations. | ** Full command names, including tags, are now properly utilized for specific item name isolations. | ||
* Package settings now groups various package options into | * Package settings now groups various package options into an <code>Options</code> category. | ||
* Command file / folder paths can now properly | * Command file / folder paths can now properly use <code>..</code> to specify the directory above a current folder. | ||
** i.e. './../test/' will return the folder | ** i.e. './../test/' will return the folder named <code>test</code> above the current directory the package ini is currently running from. | ||
* Settings and favorites buttons are now displayed on the menu within | * Settings and favorites buttons are now displayed on the menu within the <code>Packages</code> and <code>Overlays</code> category headers. | ||
* Bug fix for wallpaper alpha when hiding overlays. | * Bug fix for wallpaper alpha when hiding overlays. | ||
** Proper fading with alpha transitions. | ** Proper fading with alpha transitions. | ||
* Interpreter thread bug fixes for safer rapid launches. | * Interpreter thread bug fixes for safer rapid launches. | ||
* Bug fixes for the command parser; proper order of operation resolution for nested placeholder replacements. | * Bug fixes for the command parser; proper order of operation resolution for nested placeholder replacements. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/a3a4519...v2.1.0 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/a3a4519...v2.1.0 Full Changelog: a3a4519...v2.1.0] | ||
'''Version 2.0.1''' | '''Version 2.0.1''' | ||
* Overlay interaction (including button combinations) is now strictly limited to handheld mode controller as well as the player 1 controller. | * Overlay interaction (including button combinations) is now strictly limited to handheld mode controller as well as the player 1 controller. | ||
** In the past, when other controllers click buttons, because the overlay looked for all controller inputs the sum of all buttons being clicked could trigger the menu or launch a combo unintentionally. | ** In the past, when other controllers click buttons, because the overlay looked for all controller inputs the sum of all buttons being clicked could trigger the menu or launch a combo unintentionally. | ||
** This fix was set | ** This fix was set in <code>libultrahand</code>, so all overlays compiled with it will now include this fix. | ||
* Underscan and "right-side mode" bug fixes and adjustments. | * Underscan and "right-side mode" bug fixes and adjustments. | ||
** Users no longer need to exit the overlay for the underscan fix to correct the overlay dimensions (auto-corrections). | ** Users no longer need to exit the overlay for the underscan fix to correct the overlay dimensions (auto-corrections). | ||
** Right-side mode is auto applied now when clicked in the settings menu with no need to reload. | ** Right-side mode is auto applied now when clicked in the settings menu with no need to reload. | ||
** Fix is also | ** Fix is also in <code>libultrahand</code>, so it will apply to all newly compiled overlays. | ||
* Launch combo mode settings is now rendered within its own dropdown instead of being drawn directly within the root of overlay setting's menu (when specified). | * Launch combo mode settings is now rendered within its own dropdown instead of being drawn directly within the root of overlay setting's menu (when specified). | ||
* Various minor corrections. | * Various minor corrections. | ||
| Line 638: | Line 735: | ||
* New combo package launcher (similar to the overlay launcher). | * New combo package launcher (similar to the overlay launcher). | ||
** Users can set any package to key combos. | ** Users can set any package to key combos. | ||
** | ** New <code>Quick Launch</code> package setting (for disabling <code>Boot Commands</code> for the package during combo launches). | ||
** More button combinations have also been added to the list. | ** More button combinations have also been added to the list. | ||
* New | * New command <code>open</code> for opening overlays (with or without launch arguments) from the package menu. | ||
** | ** Called <code>open /path/to/overlay.ovl {LAUNCH_ARGUMENT_1} {LAUNCH_ARGUMENT_2} {...}</code> | ||
** Overlays can now be compiled to handle specific tasks for Ultrahand packages. | ** Overlays can now be compiled to handle specific tasks for Ultrahand packages. | ||
* | * Buttons <code>ZL</code> and <code>ZR</code> will now skip the menu exactly one viewport's distance up or down. | ||
** Multiple clicks and hold will trigger rapid page skipping. | ** Multiple clicks and hold will trigger rapid page skipping. | ||
** This should allow for quicker and easier menu navigation, as well as table scrolling. | ** This should allow for quicker and easier menu navigation, as well as table scrolling. | ||
* New atmosphere updater functionality. | * New atmosphere updater functionality. | ||
** To use, copy / move / unzip files into place as you would expect (overwriting stratosphere and package3 | ** To use, copy / move / unzip files into place as you would expect (overwriting stratosphere and package3 in <code>/atmosphere/</code>). | ||
*** Instead of being overwritten, the files will be assigned | *** Instead of being overwritten, the files will be assigned a <code>.ultra</code> extension. | ||
** After files have been moved into place, | ** After files have been moved into place, any <code>reboot</code> command will automatically trigger the Ultrahand Updater payload. | ||
*** This payload is downloaded once the | *** This payload is downloaded once the moment <code>reboot</code> is ran after installing Atmosphere as well as during software updates. | ||
*** Users must reboot from Ultrahand Overlay itself for changes to apply. | *** Users must reboot from Ultrahand Overlay itself for changes to apply. | ||
* <code>libultrahand</code> | * <code>libultrahand</code> detection for overlays compiled with <code>libultrahand</code>. | ||
** Highlight colors for overlays | ** Highlight colors for overlays with <code>libultrahand</code> functionality. | ||
** Recompilation of | ** Recompilation of all <code>libultrahand</code> overlays is needed with the new Ultrahand signature added (see <code>Makefile</code>). | ||
* New | * New command <code>dot-clear</code>, called <code>dot-clear <PATH_TO_BE_CLEARED></code>. | ||
** This command will remove all metadata files that begin | ** This command will remove all metadata files that begin with <code>._</code> from any specified directory (as well as all subdirectories). | ||
** This is useful for users who transfer files and mods over to their SD card from macOS. | ** This is useful for users who transfer files and mods over to their SD card from macOS. | ||
*** '''Side-note:''' | *** '''Side-note:''' These metadata files can cause issues with mods, so clearing them can be quite useful. | ||
* New theme color configurations and updates to the default theme as well | * New theme color configurations and updates to the default theme as well as <code>ultra.ini</code> and <code>ultra-blue.ini</code>. | ||
** <code>banner_version_text_color</code>: Default color of the version label below the Ultrahand title. | ** <code>banner_version_text_color</code>: Default color of the version label below the Ultrahand title. | ||
** <code>overlay_text_color</code>: Default color for overlay titles. | ** <code>overlay_text_color</code>: Default color for overlay titles. | ||
| Line 671: | Line 768: | ||
** <code>text_separator_color</code>: Default color for text separator symbols. | ** <code>text_separator_color</code>: Default color for text separator symbols. | ||
** <code>selection_value_text_color</code>: Default color for the selection value. | ** <code>selection_value_text_color</code>: Default color for the selection value. | ||
*** '''Side-note:''' | *** '''Side-note:''' Users may want to re-apply the default theme once for some of the changes to apply. | ||
* Proper input isolation so menu navigation buttons do not interfere with combos and vise versa. | * Proper input isolation so menu navigation buttons do not interfere with combos and vise versa. | ||
* Thread safe ini, hexing, file operations, and page swapping. | * Thread safe ini, hexing, file operations, and page swapping. | ||
** New libultrahand | ** New libultrahand command <code>swapTo</code> to safely handle swapping between pages (goBack / pop + changeTo). | ||
* | * The <code>Miscellaneous</code> settings menu has been re-organized and now includes <code>Theme Settings</code>. | ||
** Theme settings includes options that allows you to toggle on and off various theme configurations. | ** Theme settings includes options that allows you to toggle on and off various theme configurations. | ||
* On return from within package dropdowns / forwarders, the page is now automatically refreshed. | * On return from within package dropdowns / forwarders, the page is now automatically refreshed. | ||
** All command footers and tables will automatically redrawn. | ** All command footers and tables will automatically redrawn. | ||
* Package headers can now | * Package headers can now utilize <code>;show_widget=true</code> for rendering the widget. | ||
* Dropdown menu commands can now | * Dropdown menu commands can now utilize <code>;mode=slot</code> for changing the dropdown symbol to the option symbol. | ||
* Software update now | * Software update now installs <code>nx-ovlloader / nx-ovlloader+ v1.1.1</code> (latest release). | ||
** Bug fixes for rapid overlay swapping, reduced file io calls, better memory mapping, and slight optimizations. | ** Bug fixes for rapid overlay swapping, reduced file io calls, better memory mapping, and slight optimizations. | ||
* Language changes are now instantly applied to the menu from within the language selection. | * Language changes are now instantly applied to the menu from within the language selection. | ||
* Faster menu drawing. | * Faster menu drawing. | ||
* Buffer sizes | * Buffer sizes for <code>nx-ovlloader+</code> (memory expansion) are now loaded immediately during overlay launch. | ||
** Slight buffer size tweaks for base loader. | ** Slight buffer size tweaks for base loader. | ||
* Slight improvements | * Slight improvements to <code>Swipe To Open</code>. | ||
* Slight redesigns to various text components within the overlay. | * Slight redesigns to various text components within the overlay. | ||
* Rendering related fixes and improvements. | * Rendering related fixes and improvements. | ||
* Fixes to file list generation from copy and move to include subdirectories. | * Fixes to file list generation from copy and move to include subdirectories. | ||
** This functionality | ** This functionality allows <code>Mod Alchemist</code> to properly handle the removal of folders when appropriate for toggling content mods. | ||
* Numerous bug fixes, memory optimizations, navigational fixes and alignment corrections. | * Numerous bug fixes, memory optimizations, navigational fixes and alignment corrections. | ||
** Significantly reduced memory pressure throughout numerous methods. | ** Significantly reduced memory pressure throughout numerous methods. | ||
| Line 698: | Line 795: | ||
** Touch related fixes (long touch and release). | ** Touch related fixes (long touch and release). | ||
** Dangerous pattern bug fixes. | ** Dangerous pattern bug fixes. | ||
** <code>json_file</code> | ** <code>json_file</code> / <code>json_file_source</code> bug fixes. | ||
** Many other fixes not mentioned. | ** Many other fixes not mentioned. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/2602970...v2.0.0 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/2602970...v2.0.0 Full Changelog: 2602970...v2.0.0] | ||
Quick update: | Quick update: | ||
| Line 708: | Line 805: | ||
* Expansion of the overlay key combo launcher implementation. | * Expansion of the overlay key combo launcher implementation. | ||
** New launch argument modes implementation. | ** New launch argument modes implementation. | ||
*** Users can add launch argument modes to overlay entries | *** Users can add launch argument modes to overlay entries in <code>/config/ultrahand/overlays.ini</code>. | ||
*** For example, | *** For example, for <code>mini</code> and <code>micro</code> entry points on my [https://github.com/ppkantorski/Status-Monitor-Overlay/releases/tag/v1.1.9%2Br4 Status Monitor fork], users can add <code>mode_args=(-mini, -micro)</code> as well as <code>mode_labels=(Mini, Micro)</code> for labeling them. | ||
*** After | *** After adding <code>mode_args</code> (or <code>mode_args</code> and <code>mode_labels</code>) new mode options will appear within the overlay settings menu (<code>Y</code> on an overlay). | ||
** | ** All <code>libultrahand</code> compiled overlays (compiled with v1.10.0+) now allow for quick launches. | ||
*** This means you can jump from one overlay / overlay mode to another without ever returning | *** This means you can jump from one overlay / overlay mode to another without ever returning to <code>ovlmenu.ovl</code>. | ||
** Pressing the combo used to launch the overlay will now also return users back | ** Pressing the combo used to launch the overlay will now also return users back to <code>ovlmenu.ovl</code>. | ||
** Setting combos will now also instantly be applied (no need to exit the menu). | ** Setting combos will now also instantly be applied (no need to exit the menu). | ||
** You can now also be anywhere within Ultrahand and trigger an instant jump to any overlay / overlay mode using key combos. | ** You can now also be anywhere within Ultrahand and trigger an instant jump to any overlay / overlay mode using key combos. | ||
* | * New <code>Launch Combos</code> global toggle in the <code>Miscellaneous</code> settings menu. | ||
** This will disable all overlay launch combos from working. | ** This will disable all overlay launch combos from working. | ||
** Can be useful if you are playing a game that demands lots of button combinations. | ** Can be useful if you are playing a game that demands lots of button combinations. | ||
* Critical bug fixes for menu navigation. | * Critical bug fixes for menu navigation. | ||
** | ** The <code>ScriptOverlay</code> was actually still broken in v1.9.10 on certain menus. | ||
** These fixes address a lot of potential mishandling of pointers | ** These fixes address a lot of potential mishandling of pointers in <code>main.cpp</code>. | ||
* Unzip commands have been improved and are now less prone to errors. | * Unzip commands have been improved and are now less prone to errors. | ||
* Commands in progress will now properly hit 100% instead of going from 99% to complete. | * Commands in progress will now properly hit 100% instead of going from 99% to complete. | ||
* Cursor center focus has been slightly lowered. | * Cursor center focus has been slightly lowered. | ||
** This | ** This prevents ''slight'' scrolling from kicking in after hitting the 4th item on the list. | ||
* Slight re-organization of | * Slight re-organization of the <code>Miscellaneous</code> settings menu. | ||
* The overlay / package settings menu now displays the version, with slight formatting improvements. | * The overlay / package settings menu now displays the version, with slight formatting improvements. | ||
* Changing the sort priority for overlays / packages now triggers an immediate jump to the item being sorted upon return. | * Changing the sort priority for overlays / packages now triggers an immediate jump to the item being sorted upon return. | ||
* Various alignment corrections and bug fixes. | * Various alignment corrections and bug fixes. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.9.10...2602970 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.9.10...2602970 Full Changelog: v1.9.10...2602970] | ||
'''Version 1.9.10 Quick patch (stability update)''' | '''Version 1.9.10 Quick patch (stability update)''' | ||
* Restoration of | * Restoration of the <code>ScriptOverlay</code> (minus on a command). | ||
** There was a lingering issue within | ** There was a lingering issue within the <code>List</code> class that was causing mis-handlings of the cached items for certain menus upon return. | ||
*** This issue should be resolved now. | *** This issue should be resolved now. | ||
* Potential memory leak bug fix for | * Potential memory leak bug fix for aborted <code>unzip</code>/<code>download</code> commands. | ||
* Smoother text scrolling (for list items with long text). | * Smoother text scrolling (for list items with long text). | ||
* Slightly improved color sampling for the cursor blink effect. | * Slightly improved color sampling for the cursor blink effect. | ||
* Slight optimizations to | * Slight optimizations to the <code>handleRunningInterpreter</code> input handler. | ||
* Removal of unused variable declarations in | * Removal of unused variable declarations in the <code>MainMenu</code> class. | ||
* Slight alignment corrections to the table background. | * Slight alignment corrections to the table background. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/8ee2844...v1.9.10 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/8ee2844...v1.9.10 Full Changelog: 8ee2844...v1.9.10] | ||
* More widget options have been added to the settings menu. | * More widget options have been added to the settings menu. | ||
** New toggle for disabling dynamic temperature colors. | ** New toggle for disabling dynamic temperature colors. | ||
| Line 758: | Line 855: | ||
** <code>battery_charging_color</code>: color for the power indicator on the widget with the battery charging. | ** <code>battery_charging_color</code>: color for the power indicator on the widget with the battery charging. | ||
** <code>battery_low_color</code>: color for the power indicator on the widget when battery is below 20%. | ** <code>battery_low_color</code>: color for the power indicator on the widget when battery is below 20%. | ||
** Propagation | ** Propagation of <code>version_text_color</code> to apply to overlay and package versions on the menu (in addition to the <code>Ultrahand</code> / <code>nx-ovlloader</code> version displayed below the logo). | ||
* Improved dynamic logo with higher resolution color sampling (smoother gradient color progression). | * Improved dynamic logo with higher resolution color sampling (smoother gradient color progression). | ||
* New alpha fix for screenshots taken | * New alpha fix for screenshots taken with <code>Opaque Screenshots</code> set to off. | ||
** This sets the alpha for certain elements to 14, others to 15 to make screenshots with transparency look more accurate. | ** This sets the alpha for certain elements to 14, others to 15 to make screenshots with transparency look more accurate. | ||
* Slight changes to default theme. | * Slight changes to default theme. | ||
** Table background has been reset to a darker shade of gray. | ** Table background has been reset to a darker shade of gray. | ||
** '''Side-note:''' | ** '''Side-note:''' Default theme must be re-applied for changes to occur. | ||
* Various alignment corrections and bug fixes. | * Various alignment corrections and bug fixes. | ||
* '''Notice:''' | * '''Notice:''' Next version is currently planned to be v1.9.10, so don't get your hopes up for v2.0.0 quite yet. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/3c6125a...v1.9.9 Full Changelog: 3c6125a...v1.9.9] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/3c6125a...v1.9.9 Full Changelog: 3c6125a...v1.9.9] | ||
| Line 773: | Line 870: | ||
* Script overlay has been temporarily disabled to prevent issues. ~ 7/6/2025 10:25 AM PST | * Script overlay has been temporarily disabled to prevent issues. ~ 7/6/2025 10:25 AM PST | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.9.9...8ee2844 Full Changelog: v1.9.9...8ee2844] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.9.9...8ee2844 Full Changelog: v1.9.9...8ee2844] | ||
* '''Warning:''' | * '''Warning:''' The script overlay is currently not working right (minus on a command). I am working on a fix. For now do not use this function. | ||
'''Version 1.9.8''' | '''Version 1.9.8''' | ||
* Important bug fix | * Important bug fix for <code>pchtxt2ips</code> conversion not properly naming the ips files. | ||
** This issue came up because of | ** This issue came up because of the <code>NO_FSTREAM</code> directive change in v1.9.7 (was not properly handled). | ||
** '''Side-note:''' | ** '''Side-note:''' Conversion of pchtxt's in v1.9.7 is bugged so v1.9.8 is recommended (for usage with <code>Mod Alchemist</code>). | ||
* Various UI improvements to the widget. | * Various UI improvements to the widget. | ||
** Widget text are now centered instead of aligned to the right. | ** Widget text are now centered instead of aligned to the right. | ||
** New widget backdrop implementation for highlighting the widget region with a uniform rounded rectangle. | ** New widget backdrop implementation for highlighting the widget region with a uniform rounded rectangle. | ||
*** This makes the widget easier to see with certain wallpapers, or transparencies. | *** This makes the widget easier to see with certain wallpapers, or transparencies. | ||
*** Located | *** Located in <code>UI Settings > Widget</code> (on by default). | ||
*** New theme color | *** New theme color settings <code>widget_backdrop_color</code> and <code>widget_backdrop_alpha</code>. | ||
* The default theme has some new color changes. | * The default theme has some new color changes. | ||
** For changes to be applied, users must re-apply the default theme in the settings menu. | ** For changes to be applied, users must re-apply the default theme in the settings menu. | ||
** There are also a couple minor changes | ** There are also a couple minor changes in <code>ultra.ini</code>. | ||
* Screenshot opacity implementation has been cleaned up. | * Screenshot opacity implementation has been cleaned up. | ||
** Longer opacity delay as well as cleaner click and release state handling. | ** Longer opacity delay as well as cleaner click and release state handling. | ||
| Line 805: | Line 902: | ||
'''Version 1.9.7''' | '''Version 1.9.7''' | ||
* | * Improved <code>download</code> and <code>unzip</code> commands. | ||
** | ** Library <code>zzip</code> has been migrated to <code>minizip</code> for improved compatibility (as well as z64 support). | ||
** Tested with near 4 GB downloads (FAT32 limit) as well as files within zips. | ** Tested with near 4 GB downloads (FAT32 limit) as well as files within zips. | ||
*** Also tested with zips containing thousands of files. | *** Also tested with zips containing thousands of files. | ||
* Buffer calibrations | * Buffer calibrations for <code>download</code>, <code>unzip</code>, <code>copy</code>, and <code>hex</code> functions. | ||
** Calibrations have been set | ** Calibrations have been set for <code>nx-ovlloader</code> and <code>nx-ovlloader+</code> based upon available heap memory. | ||
** <code>nx-ovlloader</code>: | ** <code>nx-ovlloader</code>: | ||
*** '''Download:''' | *** '''Download:''' 128 KB read, 32 KB write | ||
*** '''Unzip:''' | *** '''Unzip:''' 128 KB read, 32 KB write | ||
*** '''Copy:''' | *** '''Copy:''' 64 KB read / write | ||
*** '''Hex:''' | *** '''Hex:''' 64 KB read | ||
** <code>nx-ovlloader+</code>: | ** <code>nx-ovlloader+</code>: | ||
*** '''Download:''' | *** '''Download:''' 256 KB read, 128 KB write | ||
*** '''Unzip:''' | *** '''Unzip:''' 256 KB read, 128 KB write | ||
*** '''Copy:''' | *** '''Copy:''' 256 KB read / write | ||
*** '''Hex:''' | *** '''Hex:''' 256 KB read | ||
** The result is faster downloads / unzips / copying / hexing and less memory issues. | ** The result is faster downloads / unzips / copying / hexing and less memory issues. | ||
*** Optimizations in this revision have lead to more heap memory available overall. | *** Optimizations in this revision have lead to more heap memory available overall. | ||
* The selection overlay (sourced commands) has been optimized. | * The selection overlay (sourced commands) has been optimized. | ||
** Improved memory management for usage | ** Improved memory management for usage with <code>nx-ovlloader</code> (base loader). | ||
*** Base loader will now only draw up to 250 list items to prevent crashes. | *** Base loader will now only draw up to 250 list items to prevent crashes. | ||
**** '''Side-note:''' | **** '''Side-note:''' Keep in mind that if you have more than 250 items on the page, you will not be seeing everything. | ||
**** <code>nx-ovlloader+</code> | **** <code>nx-ovlloader+</code> however has this draw limit uncapped. | ||
* Library migration | * Library migration for <code>jansson</code> to <code>cJSON</code>. | ||
** <code>cJSON</code> | ** <code>cJSON</code> compiles smaller and should be faster for the use cases within Ultrahand. | ||
* Now compiled | * Now compiled without <code>fstream</code> (<code>NO_FSTREAM</code> directive), utilizing <code>stdio.h</code> instead. | ||
** This should be faster and help keep compilation size smaller. | ** This should be faster and help keep compilation size smaller. | ||
* Optimizations and fixes to various rendering methods. | * Optimizations and fixes to various rendering methods. | ||
** The result is very slightly faster rendering than v1.9.6 with less potential issues. | ** The result is very slightly faster rendering than v1.9.6 with less potential issues. | ||
* Across the board optimizations to | * Across the board optimizations to all <code>libultra</code> methods. | ||
** Improved ini, hex, path, and json functions. | ** Improved ini, hex, path, and json functions. | ||
** Bug fixes | ** Bug fixes for <code>NO_FSTREAM</code> directive. | ||
* Slight cleanup of lingering visual annoyances within | * Slight cleanup of lingering visual annoyances within the <code>List</code> class. | ||
** This fixes the menu not returning all the way to the top after scrolling. | ** This fixes the menu not returning all the way to the top after scrolling. | ||
** Fix for menu auto jumping to top / bottom when pressing into a table at the very bottom / top instead of scrolling to the end. | ** Fix for menu auto jumping to top / bottom when pressing into a table at the very bottom / top instead of scrolling to the end. | ||
| Line 845: | Line 942: | ||
* Bottom touch regions have been properly aligned based upon the text. | * Bottom touch regions have been properly aligned based upon the text. | ||
** This should keep the touch regions clean and uniform regardless of language changes. | ** This should keep the touch regions clean and uniform regardless of language changes. | ||
* New flag option for disabling the auto update | * New flag option for disabling the auto update of <code>nx-ovlloader</code>/<code>nx-ovlloader+</code> during the software update command. | ||
** To use this, add a file (can be empty) | ** To use this, add a file (can be empty) named <code>NO_LOADER_UPDATES.flag</code> into <code>/config/ultrahand/flags/</code>. | ||
** '''Side-note:''' | ** '''Side-note:''' Be cautious of using this, because once the flag has been added, Ultrahand will not be updating <code>nx-ovlloader</code>. | ||
* For interpreter in progress with downloads / unzips / large copies, the bottom menu bar will now | * For interpreter in progress with downloads / unzips / large copies, the bottom menu bar will now display <code>Hide</code> and <code>Cancel</code> with proper touch integration. | ||
* Cleanup | * Cleanup of <code>unique</code> and <code>shared</code> pointers in <code>main.cpp</code> to now purely utilize raw pointers instead. | ||
* The glyph cache will now be cleared automatically when you enter Ultrahand packages as well as the selection overlay. | * The glyph cache will now be cleared automatically when you enter Ultrahand packages as well as the selection overlay. | ||
** This prevents the glyph cache from getting too large after entering tons of pages. (potential memory leak) | ** This prevents the glyph cache from getting too large after entering tons of pages. (potential memory leak) | ||
* | * The <code>Script Overlay</code> now displays the package forwarder commands. | ||
* New language variable for | * New language variable for abbreviated <code>Overlays</code>, for drawing on the bottom touch region. | ||
** This will be helpful for languages with large translations of this word. | ** This will be helpful for languages with large translations of this word. | ||
* Faster wallpaper loading. | * Faster wallpaper loading. | ||
* Removal of | * Removal of all <code>.reserve</code> declarations throughout the project. | ||
** From extensive testing, it appears that memory reservations have been contributing to heap overload and memory leaks. | ** From extensive testing, it appears that memory reservations have been contributing to heap overload and memory leaks. | ||
* Revert of | * Revert of all <code>__builtin_</code> memory related methods back to their <code>std</code> counterpart. | ||
** For the use cases within the project, the builtin appears to be less ideal since in many circumstances size is not determined during compilation. | ** For the use cases within the project, the builtin appears to be less ideal since in many circumstances size is not determined during compilation. | ||
* Bug fix for memory expansion toggle. | * Bug fix for memory expansion toggle. | ||
** <code>nx-ovlloader+</code> | ** <code>nx-ovlloader+</code> was not auto-applying upon the first click (with no expansion zips initially installed). | ||
* Bug fix for favoriting / starring overlays not properly utilizing jump menu navigation. | * Bug fix for favoriting / starring overlays not properly utilizing jump menu navigation. | ||
* Various alignment corrections and bug fixes. | * Various alignment corrections and bug fixes. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/907f143...v1.9.7 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/907f143...v1.9.7 Full Changelog: 907f143...v1.9.7] | ||
'''Version 1.9.6''' | '''Version 1.9.6''' | ||
* New | * New commands <code>set-json-val</code>/<code>set-json-value</code> and <code>set-json-key</code> (similar to <code>set-ini-val</code> and <code>set-ini-key</code>). | ||
** <code>set-json-val <JSON_PATH> <JSON_KEY> <JSON_VALUE></code> | ** <code>set-json-val <JSON_PATH> <JSON_KEY> <JSON_VALUE></code> | ||
*** This will set a value in a json according to a key. | *** This will set a value in a json according to a key. | ||
| Line 876: | Line 973: | ||
* Cleanup of all lingering visual glitches during menu navigation. | * Cleanup of all lingering visual glitches during menu navigation. | ||
** No more cursor flicker as pages transition. | ** No more cursor flicker as pages transition. | ||
** Proper isolation / cleanup | ** Proper isolation / cleanup of <code>jumpToItem</code> execution. | ||
** | ** The '''Language Menu''' will now also return to the last selected item after a language change (with translations properly applied). | ||
* Updating Ultrahand from | * Updating Ultrahand from the <code>Software Update</code> page will now also update the version label stored in the HBAppStore's <code>info.json</code>. | ||
** This will prevent "new update" flags from appearing on the HBAppStore after updating Ultrahand from within itself. | ** This will prevent "new update" flags from appearing on the HBAppStore after updating Ultrahand from within itself. | ||
*** '''Side-note:''' | *** '''Side-note:''' If you don't see the version label on the update command footer before clicking it, the version label will not be updated. | ||
**** If HBAppStore does not have the latest version, the store will still say that there is an update available. | **** If HBAppStore does not have the latest version, the store will still say that there is an update available. | ||
* Various alignment corrections (tables, scrollbar, list height corrections, | * Various alignment corrections (tables, scrollbar, list height corrections, internal <code>List</code> corrections, etc). | ||
* Various scrolling related fixes and improvements. | * Various scrolling related fixes and improvements. | ||
* Various bug fixes and code optimizations. | * Various bug fixes and code optimizations. | ||
| Line 888: | Line 985: | ||
Quick update: | Quick update: | ||
* Lingering memory leak fixed for rapid language changes. - 6/23/2025 6:12 AM | * Lingering memory leak fixed for rapid language changes. - 6/23/2025 6:12 AM PST '''(UPDATE IS RECOMMENDED)''' | ||
* Last minor bug fix: | * Last minor bug fix: | ||
** Table drawer wasn't properly updating colors on the main menu. - 6/23/2025 7:55 AM PST | ** Table drawer wasn't properly updating colors on the main menu. - 6/23/2025 7:55 AM PST | ||
| Line 896: | Line 993: | ||
** This was causing a crash because of my renderer optimizations. Should all be good now. | ** This was causing a crash because of my renderer optimizations. Should all be good now. | ||
*** Alignments will be corrected in the next version. | *** Alignments will be corrected in the next version. | ||
*** [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.9.6...907f143 Full Changelog: | *** [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.9.6...907f143 Full Changelog: v1.9.6...907f143] | ||
'''Version 1.9.5''' | '''Version 1.9.5''' | ||
| Line 912: | Line 1,009: | ||
* Table wrapping alignments have been corrected. | * Table wrapping alignments have been corrected. | ||
* Various bug fixes and corrections. | * Various bug fixes and corrections. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/6d027f9...v1.9.5 Full Changelog: | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/6d027f9...v1.9.5 Full Changelog: 6d027f9...v1.9.5] | ||
'''Version 1.9.4''' | '''Version 1.9.4''' | ||
| Line 920: | Line 1,017: | ||
** The prior frame caching implementation needed to be reworked / revised. | ** The prior frame caching implementation needed to be reworked / revised. | ||
*** Potential broken / dangling pointers not properly being managed / cleared. | *** Potential broken / dangling pointers not properly being managed / cleared. | ||
*** Backwards caching works fine, but forward caching of prior frames | *** Backwards caching works fine, but forward caching of prior frames with <code>jumpToItem</code> needs to be revised in the next release to prevent the menu from briefly flickering into view. | ||
** Directory path caching has been completely removed (an | ** Directory path caching has been completely removed (an unnecessary "old" implementation). | ||
** Various tweaks | ** Various tweaks to <code>libultra</code> functions for improved reliability. | ||
* Implementation of | * Implementation of a <code>Font Manager</code> class in <code>tsl::gfx</code> with a universal glyph cache for better memory management across <code>drawString</code> and <code>calculateStringWidth</code> methods. | ||
** | ** All <code>drawString</code> methods and have been reconsolidated. | ||
** Fixes for alternative fonts were also implemented. | ** Fixes for alternative fonts were also implemented. | ||
* Complete rework of the prior scrolling implementation for smoother scrolling navigation. | * Complete rework of the prior scrolling implementation for smoother scrolling navigation. | ||
** Table scrolling for subsequent tables has been fixed (was not working properly in v1.9.3). | ** Table scrolling for subsequent tables has been fixed (was not working properly in v1.9.3). | ||
** Table scrolling is also a lot smoother than before, with proper velocity interpolation. | ** Table scrolling is also a lot smoother than before, with proper velocity interpolation. | ||
* (NEW) | * (NEW) Dropdown commands (normally empty command blocks) can now be written with <code>;mini=true</code> for making mini dropdown menus command forwarders. | ||
* Various alignment corrections, selection text color corrections, method optimizations and bug fixes. | * Various alignment corrections, selection text color corrections, method optimizations and bug fixes. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/a592584...v1.9.4 Full Changelog: a592584...v1.9.4] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/a592584...v1.9.4 Full Changelog: a592584...v1.9.4] | ||
| Line 935: | Line 1,032: | ||
* Ini placeholder bug fix. | * Ini placeholder bug fix. | ||
** Certain ini placeholders replacements were not being properly handled within the source replacement functions. | ** Certain ini placeholders replacements were not being properly handled within the source replacement functions. | ||
** This likely | ** This likely affected <code>Reboot To</code> for certain entry names in <code>hekate_ipl.ini</code>. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.9.4...6d027f9 Full Changelog: v1.9.4...6d027f9] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.9.4...6d027f9 Full Changelog: v1.9.4...6d027f9] | ||
'''Version 1.9.3''' | '''Version 1.9.3''' | ||
* Menu navigation has been significantly cleaned up utilizing the new jump to item implementations. | * Menu navigation has been significantly cleaned up utilizing the new jump to item implementations. | ||
** Returning to the exact overlay entry you launched on the menu (on both | ** Returning to the exact overlay entry you launched on the menu (on both the <code>Overlays</code> and <code>Hidden Overlays</code> pages). | ||
** Auto navigation to the checkmark on dropdown selections. | ** Auto navigation to the checkmark on dropdown selections. | ||
** Page caching for smoother page to page transitions. | ** Page caching for smoother page to page transitions. | ||
** Left to right page swaps now have seamless transitions. | ** Left to right page swaps now have seamless transitions. | ||
* | * New <code>Show Hidden</code> toggle in <code>Settings > UI Settings > Miscellaneous > Menu Items</code>. | ||
** This will hide your hidden tabs on | ** This will hide your hidden tabs on the <code>Overlays</code> and <code>Packages</code> pages. | ||
** Hidden overlays | ** Hidden overlays with <code>Show Hidden</code> set to off will also have their launch combos blacklisted. | ||
** This should be useful for giving your device to a kid to play without having them mess-up something critical. | ** This should be useful for giving your device to a kid to play without having them mess-up something critical. | ||
* Numerous across the board code optimizations. | * Numerous across the board code optimizations. | ||
| Line 952: | Line 1,049: | ||
* Tables will now only poll new values when placeholders are present. | * Tables will now only poll new values when placeholders are present. | ||
* Complete cleanup of alignments (including table alignments). | * Complete cleanup of alignments (including table alignments). | ||
* Complete cleanup/rewrite of | * Complete cleanup/rewrite of the <code>List</code> class in <code>libtesla</code> for seamless menu navigation. | ||
* Various touch scrolling bug fixes (especially for touch scrolling on tables, then resuming with controller input). | * Various touch scrolling bug fixes (especially for touch scrolling on tables, then resuming with controller input). | ||
* Jump menu navigation can now be used in packages (expansion | * Jump menu navigation can now be used in packages (expansion of <code>refresh</code> command). | ||
** <code>refresh <ITEM_NAME> [ITEM_VALUE]</code> | ** <code>refresh <ITEM_NAME> [ITEM_VALUE]</code> will auto-return the cursor to the item that fits the match. | ||
** <code>ITEM_VALUE</code> | ** <code>ITEM_VALUE</code> is '''optional''' and does not have to be defined. | ||
** <code>ITEM_NAME</code> | ** <code>ITEM_NAME</code> is only optional with a blank string as its value, i.e. <code>''</code>. | ||
* Numerous bug fixes and corrections. | * Numerous bug fixes and corrections. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.9.2...v1.9.3 Full Changelog: v1.9.2...v1.9.3] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.9.2...v1.9.3 Full Changelog: v1.9.2...v1.9.3] | ||
Update: (Users should run update again for proper polling isolation.) | Update: (Users should run update again for proper polling isolation.) | ||
* | * New <code>;polling=</code> table header (<code>true</code>/<code>false</code>) for placeholder polling. (<code>false</code> by default) | ||
** This will make it easier for users to manually specify when placeholder polling should be enabled. | ** This will make it easier for users to manually specify when placeholder polling should be enabled. | ||
** '''Notice:''' | ** '''Notice:''' Projects leveraging placeholder polling will need to set <code>;polling=true</code> on their table commands. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.9.3...a592584 Full Changelog: v1.9.3...a592584] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.9.3...a592584 Full Changelog: v1.9.3...a592584] | ||
'''Version 1.9.2''' | '''Version 1.9.2''' | ||
* Restoring of debug logging. | * Restoring of debug logging. | ||
** This caused issues in rare test cases, using | ** This caused issues in rare test cases, using the <code>USING_LOGGING_DIRECTIVE</code> set to 0 (off). | ||
** Debug logging needs to be consolidated more (later). | ** Debug logging needs to be consolidated more (later). | ||
* Opacity bug fix. | * Opacity bug fix. | ||
** This caused wallpapers to hit opacity before the rest of the items, making screenshots look weird. All fixed now. | ** This caused wallpapers to hit opacity before the rest of the items, making screenshots look weird. All fixed now. | ||
* Jump menu navigation from clicking up at the top of the list bug fix. | * Jump menu navigation from clicking up at the top of the list bug fix. | ||
** This caused multiple "up" clicks to get stuck on the last item on the list initially for the | ** This caused multiple "up" clicks to get stuck on the last item on the list initially for the second <code>up</code> click. Also fixed. | ||
* Slight refinement to | * Slight refinement to the <code>up</code> / <code>down</code> jump menu navigation. | ||
* Threshold for successive clicks has been set from 150ms to 100ms for smoother navigation. | * Threshold for successive clicks has been set from 150ms to 100ms for smoother navigation. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.9.1...v1.9.2 Full Changelog: v1.9.1...v1.9.2] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.9.1...v1.9.2 Full Changelog: v1.9.1...v1.9.2] | ||
'''Version 1.9.1''' | '''Version 1.9.1''' | ||
* Significant rendering improvements | * Significant rendering improvements in <code>libultrahand</code> / <code>libtesla</code> (again). | ||
** Faster string rendering (with safeguards) as well as rendering of other objects. | ** Faster string rendering (with safeguards) as well as rendering of other objects. | ||
** Faster glyph lookup (for drawing strings). | ** Faster glyph lookup (for drawing strings). | ||
| Line 987: | Line 1,084: | ||
*** 612 Mhz CPU without wallpapers is now very close to 60fps with it rendering 60fps on certain menus. | *** 612 Mhz CPU without wallpapers is now very close to 60fps with it rendering 60fps on certain menus. | ||
* Bug fixes for left to right scrolling text (long ListItem text) not returning to its original position before restarting. | * Bug fixes for left to right scrolling text (long ListItem text) not returning to its original position before restarting. | ||
* Rewrite of | * Rewrite of the <code>List</code> class in <code>libtesla</code> to properly allow jump menu navigation. | ||
** When at the top of the menu | ** When at the top of the menu and <code>up</code> is pressed, the cursor will now automatically go to the bottom most item. | ||
** When at the bottom of the menu | ** When at the bottom of the menu and <code>down</code> is pressed, the cursor will now automatically go back to the top. | ||
** | ** When <code>L</code> is pressed, the cursor will jump to the top of the menu. | ||
** | ** When <code>R</code> is pressed, the cursor will jump to the bottom of the menu. | ||
*** All jump menu implementations works on menus with ListItems and tables, or even just tables. | *** All jump menu implementations works on menus with ListItems and tables, or even just tables. | ||
** Complete rewrite of the table scrolling implementation for smoother scrolling and less potential issues. | ** Complete rewrite of the table scrolling implementation for smoother scrolling and less potential issues. | ||
* Fixes to table drawing implementations. | * Fixes to table drawing implementations. | ||
** All tables are | ** All tables are now <code>;scrollable=true</code> by default with proper scrolling implemented. | ||
*** This property will eventually be removed, as well as the other scrollable properties. | *** This property will eventually be removed, as well as the other scrollable properties. | ||
* Download commands now have a 10s timeout. | * Download commands now have a 10s timeout. | ||
* <code>Software Update</code> | * <code>Software Update</code> now removes the version label if it cannot pull the latest version details from GitHub. | ||
** This will prevent people thinking an older version of the overlay is the latest. | ** This will prevent people thinking an older version of the overlay is the latest. | ||
* Slight cleanup of | * Slight cleanup of debug <code>logging</code>. | ||
* Beta | * Beta for [https://github.com/ppkantorski/nx-ovlloader/releases/tag/v1.1.1 nx-ovlloader+ v1.1.1] is now live (not linked to <code>Update</code> for now for testing). | ||
What's Changed: | What's Changed: | ||
* Tweak for dist target | * Tweak for dist target by [https://github.com/impeeza @impeeza] in [https://github.com/ppkantorski/Ultrahand-Overlay/pull/232 *232] | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/215e878...v1.9.1 Full Changelog: 215e878...v1.9.1] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/215e878...v1.9.1 Full Changelog: 215e878...v1.9.1] | ||
| Line 1,133: | Line 1,230: | ||
'''Version 1.8.2''' | '''Version 1.8.2''' | ||
* | * New <code>Page Swap</code> toggle for swapping the overlays and packages page locations. | ||
** Located | ** Located in <code>Settings > UI Settings > Miscellaneous > Effects > Page Swap</code>. | ||
** This feature will draw the packages menu on the left and the overlays menu on the right when enabled. | ** This feature will draw the packages menu on the left and the overlays menu on the right when enabled. | ||
* Fixes | * Fixes to <code>libultrahand</code> for preventing screenshots from occurring during capture event initializations. | ||
** This is particularly useful for isolating actual capture button events from initializations within projects | ** This is particularly useful for isolating actual capture button events from initializations within projects like [https://github.com/HookedBehemoth/bitmap-printer bitmap-printer] / [https://github.com/J-D-K/PNGShot PNGShot]. | ||
*** If | *** If using <code>bitmap-printer</code>, it is currently recommended to use a version built with pull request [https://github.com/HookedBehemoth/bitmap-printer/pull/25 *25] or else there will be dragons (unwanted screenshots in the <code>Bitmaps</code> directory generated every time a <code>libultrahand</code> compiled overlays is opened). | ||
*** If | *** If using <code>PNGShot</code>, it is currently recommended to use a version built with pull request [https://github.com/J-D-K/PNGShot/pull/5 *5], however builds from latest source code on the repo should now work as well without producing unwanted screenshots. | ||
** '''Notice:''' | ** '''Notice:''' | ||
*** All projects built | *** All projects built with <code>libultrahand</code> will need to be recompiled with latest <code>libultrahand</code> for this fix to apply. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.8.1...v1.8.2 Full Changelog: v1.8.1...v1.8.2] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.8.1...v1.8.2 Full Changelog: v1.8.1...v1.8.2] | ||
Update: | Update: | ||
* Fixes for returning to overlay menu after exiting overlay | * Fixes for returning to overlay menu after exiting overlay with <code>Page Swap</code>. - 11/05/2024 3:06 AM PST | ||
* Touch selection fixes for left / right page | * Touch selection fixes for left / right page with <code>Page Swap</code>. - 11/05/2024 3:33 AM PST | ||
* Dangerous pattern tweak for wildcard patterns within | * Dangerous pattern tweak for wildcard patterns within the <code>Album</code> folder. - 11/05/2024 6:42 PM PST | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.8.2...d448e61 Full Changelog: v1.8.2...d448e61] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.8.2...d448e61 Full Changelog: v1.8.2...d448e61] | ||
'''Version 1.8.1''' | '''Version 1.8.1''' | ||
* New package | * New package header <code>;show_version=</code> is an optional <code>true</code>/<code>false</code> option for forcing the menu to show the package version instead of the current section title under the package title. (<code>false</code> by default) | ||
* Various bug fixes. | * Various bug fixes. | ||
** Fix | ** Fix to <code>Software Update</code> command and <code>Memory Expansion</code> to download <code>nx-ovlloader</code>/<code>nx_ovlloader+</code> v1.0.8 instead of v1.0.9 if AMS version is < 1.8.0. | ||
** Fix for forwarder footers being updated when they should not be. | ** Fix for forwarder footers being updated when they should not be. | ||
** Fix for table | ** Fix for table with <code>null</code> value replacements not correctly aligning <code>Not available</code> / <code>UNAVAILABLE_SELECTION</code> text properly. | ||
** Fix for combo labels not being converted to their icon counterparts upon initialization. | ** Fix for combo labels not being converted to their icon counterparts upon initialization. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.8.0...v1.8.1 Full Changelog: v1.8.0...v1.8.1] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.8.0...v1.8.1 Full Changelog: v1.8.0...v1.8.1] | ||
| Line 1,161: | Line 1,258: | ||
'''Version 1.8.0''' | '''Version 1.8.0''' | ||
<ol> | <ol> | ||
<li><p>Introduction of | <li><p>Introduction of new <code>true</code> / <code>false</code> command options <code>;mini=</code> and <code>;selection_mini=</code> for usage of "mini" ListItems.</p> | ||
<ul> | <ul> | ||
<li><code>;mini=true</code> | <li><code>;mini=true</code> will enable mini mode for the ListItem. (<code>false</code> by default)</li> | ||
<li><code>;selection_mini=true</code> | <li><code>;selection_mini=true</code> will enable mini mode for the dropdown selection ListItems. (for <code>*</code> commands; <code>false</code> by default)</li></ul> | ||
</li> | </li> | ||
<li><p>Introduction of new | <li><p>Introduction of new command <code>volume</code> to control the system master volume level, called <code>volume <PERCENTAGE></code> where <code><PERCENTAGE></code> is an integer value from 0 to 150.</p> | ||
<ul> | <ul> | ||
<li><p>Users can create a volume level slider similarly to a brightness level slider.</p> | <li><p>Users can create a volume level slider similarly to a brightness level slider.</p> | ||
| Line 1,177: | Line 1,274: | ||
volume {value} | volume {value} | ||
</pre></li> | </pre></li> | ||
<li>'''Side-note:''' | <li>'''Side-note:''' Max volume scale has been capped at 150%. Will only scale the current active system volume level (not modify it).<br /> | ||
</li></ul> | </li></ul> | ||
</li> | </li> | ||
<li><p>Package forwarder commands will now update footer labels when modified from within the forwarder package.</p></li> | <li><p>Package forwarder commands will now update footer labels when modified from within the forwarder package.</p></li> | ||
<li><p>Option footers will now be automatically loaded from | <li><p>Option footers will now be automatically loaded from the <code>config.ini</code> upon command success instead of returning a checkmark.</p></li> | ||
<li><p>Expansion | <li><p>Expansion of <code>timestamp</code> placeholder argument to include <code>%f</code> for fractional seconds.</p> | ||
<ul> | <ul> | ||
<li><p>Basic timer example:</p> | <li><p>Basic timer example:</p> | ||
| Line 1,201: | Line 1,298: | ||
<ul> | <ul> | ||
<li>Max value bug fix for regular track-bars.</li> | <li>Max value bug fix for regular track-bars.</li> | ||
<li>Fixes | <li>Fixes to <code>math</code> placeholder operation parsing.</li> | ||
<li><code>set-footer</code> | <li><code>set-footer</code> for <code>null</code> values will now return a failed command.</li></ul> | ||
</li> | </li> | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/367a0bb...v1.8.0 Full Changelog: 367a0bb...v1.8.0]</ol> | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/367a0bb...v1.8.0 Full Changelog: 367a0bb...v1.8.0]</ol> | ||
'''Version 1.7.9''' | '''Version 1.7.9''' | ||
# Complete rework of | # Complete rework of the <code>Script Overlay</code> (<code>-</code> / <code>minus</code> on a command). | ||
#* Users can now preview command blocks and execute would be executed commands on | #* Users can now preview command blocks and execute would be executed commands on the <code>Script Overlay</code>. | ||
#* All command objects are now compatible. | #* All command objects are now compatible. | ||
# Package header routing has now been implemented. | # Package header routing has now been implemented. | ||
#* This will make it easier for users to tell where they are within the menu when navigating through packages. | #* This will make it easier for users to tell where they are within the menu when navigating through packages. | ||
# Ultrahand's overlay development libraries have now been moved | # Ultrahand's overlay development libraries have now been moved to [https://github.com/ppkantorski/libultrahand libultrahand]. | ||
#* Numerous improvements have been made | #* Numerous improvements have been made within <code>libultrahand</code> to make recompiling overlays easier. | ||
#* Users can also use these libraries for their own overlay development, or to rebuild other Tesla overlays with Ultrahand features. | #* Users can also use these libraries for their own overlay development, or to rebuild other Tesla overlays with Ultrahand features. | ||
#** A number of overlays have been rebuilt as examples. ( | #** A number of overlays have been rebuilt as examples. (see [https://github.com/ppkantorski/libultrahand?tab=readme-ov-file#build-examples Build Examples]) | ||
# Introduction of new theme colors. | # Introduction of new theme colors. | ||
#* <code>default_overlay_color</code> | #* <code>default_overlay_color</code> for specifying the default title color for overlays compiled with <code>libultrahand</code>. | ||
#* <code>default_script_color</code> | #* <code>default_script_color</code> for specifying the default title color for the <code>Script Overlay</code>. | ||
# Various fixes to track-bars. | # Various fixes to track-bars. | ||
#* Users can now also | #* Users can now also click <code>A</code> to apply track-bar settings. | ||
#* Users can | #* Users can hold <code>R</code> on top of an unlocked track bar to enable changing pages <code>left</code> / <code>right</code> (using D-Pad). | ||
#* Fixes to rapid left / right clicks. | #* Fixes to rapid left / right clicks. | ||
#* Fixes to text alignments. | #* Fixes to text alignments. | ||
| Line 1,227: | Line 1,324: | ||
#* Various touch related bug fixes. | #* Various touch related bug fixes. | ||
# New table drawing options and various improvements to table rendering. | # New table drawing options and various improvements to table rendering. | ||
#* <code>;wrapping_mode=</code> | #* <code>;wrapping_mode=</code> can be set to <code>none</code>, <code>char</code>, or <code>word</code> for tables. (default is <code>none</code>) | ||
#* <code>;wrapping_indent=</code> | #* <code>;wrapping_indent=</code> can be set to <code>true</code> or <code>false</code> for drawing an indent on the wrapped lines. | ||
#** '''Notice:''' | #** '''Notice:''' Wrapping modes will only be applied to the '''section''' text on the table. | ||
# Software update command now | # Software update command now updates <code>nx-ovlloader</code> / <code>nx-ovlloader+</code> as well as the included themes. | ||
#* [https://github.com/ppkantorski/nx-ovlloader/releases/tag/v1.0.9 nx-ovlloader+] | #* [https://github.com/ppkantorski/nx-ovlloader/releases/tag/v1.0.9 nx-ovlloader+] has been updated for HOS 19.0.0 support. | ||
#** '''Notice:''' | #** '''Notice:''' This update is required for proper reading of device FUSE data. | ||
# Fixes for drawing the overlays / packages menu for newly added overlays / packages. | # Fixes for drawing the overlays / packages menu for newly added overlays / packages. | ||
# Various UI corrections / improvements and code optimizations. | # Various UI corrections / improvements and code optimizations. | ||
| Line 1,240: | Line 1,337: | ||
Update: | Update: | ||
* Bug fix | * Bug fix for <code>nx-ovlloader+</code> / <code>nx-ovlloader</code> latest release URL. (was set to v1.0.8 instead of latest) - 10/19/2024 4:57 AM PST | ||
** If you already updated to v1.7.9 with the "Software Update" menu, you may want to click update 2x. (first update will pull the fixed ovlmenu, second update will pull the correct loader) | ** If you already updated to v1.7.9 with the "Software Update" menu, you may want to click update 2x. (first update will pull the fixed ovlmenu, second update will pull the correct loader) | ||
* Cleanup of package header route labels. - 10/19/2024 6:25 AM PST | * Cleanup of package header route labels. - 10/19/2024 6:25 AM PST | ||
| Line 1,249: | Line 1,346: | ||
<li><p>Fix for display underscanning in libtesla.</p> | <li><p>Fix for display underscanning in libtesla.</p> | ||
<ul> | <ul> | ||
<li>Overlays will need to be rebuilt with this fix for them to also have no issues with display underscan. ( | <li>Overlays will need to be rebuilt with this fix for them to also have no issues with display underscan. (see [https://github.com/ppkantorski/EdiZon-Overlay Edizon] as an example)</li></ul> | ||
</li> | </li> | ||
<li><p>New command expansion | <li><p>New command expansion for <code>backlight</code> called <code>backlight auto</code> (which takes parameter <code>on</code> / <code>off</code>) for controlling the <code>auto screen brightness</code> feature.</p> | ||
<ul> | <ul> | ||
<li><code>backlight auto on</code> | <li><code>backlight auto on</code> will turn on the auto brightness feature.</li> | ||
<li><code>backlight auto off</code> | <li><code>backlight auto off</code> will turn off the auto brightness feature.</li> | ||
<li>Example toggle:</li></ul> | <li>Example toggle:</li></ul> | ||
<pre>[Auto Brightness] | <pre>[Auto Brightness] | ||
| Line 1,263: | Line 1,360: | ||
backlight auto off | backlight auto off | ||
</pre></li> | </pre></li> | ||
<li><p>New placeholder | <li><p>New placeholder function <code>math</code> to resolve mathematical expressions.</p> | ||
<ul> | <ul> | ||
<li> | <li>Called <code>{math(MATH_EXPRESSION)}</code> where <code>MATH_EXPRESSION</code> is a mathematical expression like <code>1+1</code>, <code>(5+4)/9</code>, etc.</li> | ||
<li>Can also be | <li>Can also be called <code>{math(MATH_EXPRESSION, true)}</code> where <code>true</code> forces the output to always be an integer.</li> | ||
<li>Users can | <li>Users can use <code>+</code>, <code>-</code>, <code>/</code>, <code>*</code>, <code>%</code> as well as brackets <code>(</code> and <code>)</code> within their mathematical expressions.</li></ul> | ||
</li> | </li> | ||
<li><p>New placeholder | <li><p>New placeholder function <code>random</code> to generate a random integer.</p> | ||
<ul> | <ul> | ||
<li> | <li>Called <code>{random(START_VALUE,END_VALUE)}</code>.</li></ul> | ||
</li> | </li> | ||
<li><p>New placeholder | <li><p>New placeholder function <code>length</code> to compute the length of a provided string.</p> | ||
<ul> | <ul> | ||
<li> | <li>Called <code>{length(STRING)}</code>.</li> | ||
<li>Any white spaces on the left and right of the string will be trimmed.</li></ul> | <li>Any white spaces on the left and right of the string will be trimmed.</li></ul> | ||
</li> | </li> | ||
| Line 1,282: | Line 1,379: | ||
<li>Users can use nested placeholders called in any sequence now.</li></ul> | <li>Users can use nested placeholders called in any sequence now.</li></ul> | ||
</li> | </li> | ||
<li><p>Removal of | <li><p>Removal of old <code>progress animation</code> UI setting.</p> | ||
<ul> | <ul> | ||
<li>Mostly unused, and a bit out dated in terms of design preferences. I think it is better for now to remove this feature.</li></ul> | <li>Mostly unused, and a bit out dated in terms of design preferences. I think it is better for now to remove this feature.</li></ul> | ||
| Line 1,300: | Line 1,397: | ||
'''Version 1.7.7''' | '''Version 1.7.7''' | ||
* New table scrolling implementation. | * New table scrolling implementation. | ||
** <code>;scrollable=</code> | ** <code>;scrollable=</code> is a <code>true</code>/<code>false</code> table parameter for initializing a table with a scrollable property (<code>false</code> by default). | ||
** <code>;top_pivot=</code> | ** <code>;top_pivot=</code> is a <code>true</code>/<code>false</code> table parameter for making the top of the table have a selectable property (<code>false</code> by default). | ||
** <code>;bottom_pivot=</code> | ** <code>;bottom_pivot=</code> is a <code>true</code>/<code>false</code> table parameter for making the bottom of the table have a selectable property (<code>false</code> by default). | ||
** A variety of modifications were made to properly handle table scrolling (for touch / click both above and below scrollable tables). | ** A variety of modifications were made to properly handle table scrolling (for touch / click both above and below scrollable tables). | ||
* Tables can now | * Tables can now use <code>list_file_source</code> for reading raw text files directly into a table and displaying the text line by line. | ||
** | ** Called <code>list_file_source <PATH_TO_TEXT_FILE></code> | ||
** Text is drawn in the section portion and can | ** Text is drawn in the section portion and can utilize <code>;section_text_color=</code> for alternative coloring. | ||
* Various UI related tweaks and fixes. | * Various UI related tweaks and fixes. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/d016b6f...v1.7.7 Full Changelog: d016b6f...v1.7.7] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/d016b6f...v1.7.7 Full Changelog: d016b6f...v1.7.7] | ||
| Line 1,316: | Line 1,413: | ||
'''Version 1.7.6''' | '''Version 1.7.6''' | ||
* New symbol placeholder variables. | * New symbol placeholder variables. | ||
** '''<code>{A}</code>, | ** '''<code>{A}</code>, <code>{B}</code>, <code>{X}</code>, <code>{Y}</code>, <code>{L}</code>, <code>{R}</code>, <code>{ZL}</code>, <code>{ZR}</code>''': Button symbols for A, B, X, Y, L, R, ZL, and ZR. | ||
** '''<code>{DUP}</code>, | ** '''<code>{DUP}</code>, <code>{DDOWN}</code>, <code>{DLEFT}</code>, <code>{DRIGHT}</code>''': Directional pad (D-Pad) buttons symbols. | ||
** '''<code>{LS}</code>, | ** '''<code>{LS}</code>, <code>{RS}</code>''': Symbols for the left stick (LS) and right stick (RS) click buttons. | ||
** '''<code>{PLUS}</code>, | ** '''<code>{PLUS}</code>, <code>{MINUS}</code>''': Symbols for the Plus and Minus buttons. | ||
** '''<code>{UP_ARROW}</code>, | ** '''<code>{UP_ARROW}</code>, <code>{DOWN_ARROW}</code>, <code>{LEFT_ARROW}</code>, <code>{RIGHT_ARROW}</code>''': Arrow symbols pointing up, down, left, and right. | ||
** '''<code>{RIGHT_UP_ARROW}</code>, | ** '''<code>{RIGHT_UP_ARROW}</code>, <code>{RIGHT_DOWN_ARROW}</code>, <code>{LEFT_UP_ARROW}</code>, <code>{LEFT_DOWN_ARROW}</code>''': Diagonal arrow symbols indicating direction combinations. | ||
** '''<code>{POWER}</code>''': Power button symbol. | ** '''<code>{POWER}</code>''': Power button symbol. | ||
** '''<code>{HOME}</code>''': Home button symbol. | ** '''<code>{HOME}</code>''': Home button symbol. | ||
| Line 1,331: | Line 1,428: | ||
* Toggle-related bug fixes. (bug was introduced in v1.7.5) | * Toggle-related bug fixes. (bug was introduced in v1.7.5) | ||
** This should resolve issues a number of issues with toggles not retaining their state after being clicked. | ** This should resolve issues a number of issues with toggles not retaining their state after being clicked. | ||
* Storage capacity | * Storage capacity in <code>Device Info</code> has been corrected. (was previously showing free space instead of the amount of space being consumed) | ||
* Slight UI corrections. | * Slight UI corrections. | ||
* Various code optimizations. | * Various code optimizations. | ||
| Line 1,343: | Line 1,440: | ||
'''Version 1.7.5''' | '''Version 1.7.5''' | ||
* Introduction of | * Introduction of new <code>Swipe to Open</code> feature (an alternative to <code>Key Combo</code> for opening Ultrahand). | ||
** This feature is now on by default, but can be toggled off | ** This feature is now on by default, but can be toggled off in <code>Settings > UI Settings > Miscellaneous > Effects > Swipe to Open</code>. | ||
** To trigger a swipe launch, swipe your finger from off the screen inwards ~1.5cm from the side where the menu is being drawn (left by default or right) in < 150ms. | ** To trigger a swipe launch, swipe your finger from off the screen inwards ~1.5cm from the side where the menu is being drawn (left by default or right) in < 150ms. | ||
** '''Note:''' | ** '''Note:''' It should be relatively hard to trigger by accident even if you play touch sensitive games, but still easy enough to launch any time you try. | ||
* Introduction of new placeholder | * Introduction of new placeholder variable <code>{title_id}</code> for returning the title ID of the currently running game / application. | ||
** Will | ** Will return <code>null</code> if a game / application is not open. | ||
** This placeholder should allow some more complex packages to be made. | ** This placeholder should allow some more complex packages to be made. | ||
* Root package | * Root package folder <code>exit_package.ini</code> will now have command <code>exit</code> only ran when Ultrahand (and any other running overlay) is completely closed. | ||
* More bug fixes and code optimizations. | * More bug fixes and code optimizations. | ||
** Clean-up of progress percentage implementation. | ** Clean-up of progress percentage implementation. | ||
| Line 1,357: | Line 1,454: | ||
Update: | Update: | ||
* Slight tweak | * Slight tweak to <code>Swipe to Open</code>. - 09/09/2024 03:19 AM PST | ||
* <code>lang.zip</code> | * <code>lang.zip</code> translations update. - 09/09/2024 05:24 AM PST | ||
* Bug fix for update languages (menu was triggering unnecessary reload). - 09/09/2024 05:36 AM PST | * Bug fix for update languages (menu was triggering unnecessary reload). - 09/09/2024 05:36 AM PST | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.7.5...3801fca Full Changelog: v1.7.5...3801fca] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.7.5...3801fca Full Changelog: v1.7.5...3801fca] | ||
'''Version 1.7.4''' | '''Version 1.7.4''' | ||
* Introduction | * Introduction of <code>exit_package.ini</code> (similar to <code>boot_package.ini</code> but with command name <code>exit</code> instead of <code>boot</code>). | ||
** <code>Exit Commands</code> | ** <code>Exit Commands</code> are now a toggle-able option for package settings. (on by default) | ||
*** | *** The <code>Boot Package</code> toggle has been renamed to <code>Boot Commands</code>. | ||
** <code>exit_package.ini</code> | ** <code>exit_package.ini</code> can go in <code>/switch/.packages/</code> or be used in <code>/switch/.packages/<YOUR_PACKAGE_NAME>/</code>. | ||
** When present in package root path, exit commands will be ran every time you close Ultrahand. | ** When present in package root path, exit commands will be ran every time you close Ultrahand. | ||
** When present in an Ultrahand package, exit commands will be ran every time you close the package. | ** When present in an Ultrahand package, exit commands will be ran every time you close the package. | ||
* Temperature widget calls are now read directly | * Temperature widget calls are now read directly from <code>i2c</code> instead of <code>ts</code>/<code>tc</code> services. | ||
** This should help prevent any conflicts that may have arrises from usage | ** This should help prevent any conflicts that may have arrises from usage with <code>ts</code>/<code>tc</code> in prior versions. | ||
* Refinement of tap and hold functions. | * Refinement of tap and hold functions. | ||
** Holding on a package/overlay for > 0.3s, <= 1.0s then releasing will trigger the Settings key. | ** Holding on a package/overlay for > 0.3s, <= 1.0s then releasing will trigger the Settings key. | ||
** Holding on a package/overlay for > 1.0s then releasing will trigger the Star key (favorites key). | ** Holding on a package/overlay for > 1.0s then releasing will trigger the Star key (favorites key). | ||
* Introduction | * Introduction of <code>Right-side Mode</code>. (located in <code>Settings > UI Settings > Miscellaneous > Effects</code>) | ||
** This feature will draw the Ultrahand menu on the right side of the screen instead of the left. | ** This feature will draw the Ultrahand menu on the right side of the screen instead of the left. | ||
* Updating Ultrahand will now auto-reload the newly installed version when returning to the main menu after. | * Updating Ultrahand will now auto-reload the newly installed version when returning to the main menu after. | ||
* New table command | * New table command options <code>;start_gap=</code> and <code>;end_gap=</code> (same as <code>;gap=</code>) for manual aligning of tables. | ||
* More details have been added to | * More details have been added to the [https://github.com/ppkantorski/Ultrahand-Overlay/wiki/Command-Reference Commands Documentation]. | ||
* Various UI tweaks / corrections. | * Various UI tweaks / corrections. | ||
* Various bug fixes and code optimizations / cleanups. | * Various bug fixes and code optimizations / cleanups. | ||
| Line 1,385: | Line 1,482: | ||
Update: | Update: | ||
* Software update menu bug fix. - 09/07/2024 6:23 AM PST | * Software update menu bug fix. - 09/07/2024 6:23 AM PST | ||
* <code>Right-side Mode</code> | * <code>Right-side Mode</code> touch fixes. - 09/07/2024 7:48 AM PST | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.7.4...0ef1c3a Full Changelog: v1.7.4...0ef1c3a] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.7.4...0ef1c3a Full Changelog: v1.7.4...0ef1c3a] | ||
| Line 1,391: | Line 1,488: | ||
* Long tap (touch > 0.5s) of an overlay / package on the main menu will now open the overlay / package settings menu upon release. | * Long tap (touch > 0.5s) of an overlay / package on the main menu will now open the overlay / package settings menu upon release. | ||
* Fuse data is now reloaded / re-dumped upon boot. | * Fuse data is now reloaded / re-dumped upon boot. | ||
** | ** New <code>true</code> / <code>false</code> option <code>disable_reload</code> is now stored in <code>fuse.ini</code> for manual disabling of the fuse data reload function. | ||
* More corrections and improvements to the wallpaper swapping feature. | * More corrections and improvements to the wallpaper swapping feature. | ||
* Interpreter relevant bug fixes (especially with handing | * Interpreter relevant bug fixes (especially with handing large <code>boot_package.ini</code> files). | ||
** These fixes should make | ** These fixes should make opening <code>OC Toolkit</code> faster as well as fix the <code>Backup</code> and <code>Restore</code> functions when used with wallpapers. | ||
* Few additional minor bug fixes. | * Few additional minor bug fixes. | ||
* '''Important:''' | * '''Important:''' Fuse data has new key names, so you may need to reboot once or delete <code>sdmc:/config/ultrahand/fuse.ini</code> after updating from v1.7.2.<br> | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/9ff96ba...v1.7.3 Full Changelog: 9ff96ba...v1.7.3] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/9ff96ba...v1.7.3 Full Changelog: 9ff96ba...v1.7.3] | ||
| Line 1,403: | Line 1,500: | ||
* Various services cleanup. - 09/05/2024 9:35 PM PST | * Various services cleanup. - 09/05/2024 9:35 PM PST | ||
** Temperature calls now only initialize the temperature service when the temperature widgets are enabled. | ** Temperature calls now only initialize the temperature service when the temperature widgets are enabled. | ||
** <code>Reboot To</code> | ** <code>Reboot To</code> bug fix introduced from prior modification. - 09/05/2024 10:40 PM PST | ||
** Another bug fix (for toggling on widgets). - 09/06/2024 3:30 AM PST | ** Another bug fix (for toggling on widgets). - 09/06/2024 3:30 AM PST | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.7.3...28e239f Full Changelog: v1.7.3...28e239f] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.7.3...28e239f Full Changelog: v1.7.3...28e239f] | ||
'''Version 1.7.2''' | '''Version 1.7.2''' | ||
* Continued expansion | * Continued expansion of <code>Device Info</code> to now include local IP, eMMC storage, CPU/GPU/SOC Speedo + IDDQ and more. | ||
** Fuse related data is auto-dumped | ** Fuse related data is auto-dumped to <code>sdmc:/config/ultrahand/fuse.ini</code> if <code>fuse.ini</code> is missing. | ||
** Special thanks to Masagrator. | ** Special thanks to Masagrator. | ||
* Slight reorganization | * Slight reorganization of <code>Settings Menu</code>. | ||
* More renderer related tweaks and bug fixes. (faster pixel rendering / more FPS) | * More renderer related tweaks and bug fixes. (faster pixel rendering / more FPS) | ||
* Package settings menu now includes a toggle | * Package settings menu now includes a toggle for <code>Boot Package</code> and <code>Error Logging</code>. | ||
** Error logging will now only occur for packages | ** Error logging will now only occur for packages when <code>Error Logging</code> is set to an <code>On</code> state. (off by default) | ||
** Logs will be generated within the package folder | ** Logs will be generated within the package folder in <code>log.txt</code>. | ||
** Root package / root boot package logging will only work with | ** Root package / root boot package logging will only work with command <code>logging</code>. | ||
** Calls | ** Calls of <code>logging</code> command will always bypass <code>Error Logging</code> and log errors and commands to the designated <code>log.txt</code>. | ||
* New placeholder | * New placeholder variables <code>{cpu_speedo}</code>, <code>{cpu_iddq}</code>, <code>{gpu_speedo}</code>, <code>{gpu_iddq}</code>, <code>{soc_speedo}</code> and <code>{soc_iddq}</code>. | ||
* New progress indicator bar for visualizing download, unzip, and copy percentages. | * New progress indicator bar for visualizing download, unzip, and copy percentages. | ||
** New theme color | ** New theme color settings <code>progress_color</code> and <code>progress_alpha</code>. | ||
* Return | * Return of <code>shutdown controllers</code> for manually powering off all connected bluetooth controllers. | ||
** This feature still does not work | ** This feature still does not work with <code>Mission Control</code>. Just a heads up. | ||
* New language variables. | * New language variables. | ||
** Alternate languages may still need translations done to the | ** Alternate languages may still need translations done to the updated <code>.json</code> files. | ||
* Updates to | * Updates to libraries <code>devkitA64</code> and <code>libnx</code>. | ||
* Numerous code optimizations for smaller compilation size and slightly faster commands. | * Numerous code optimizations for smaller compilation size and slightly faster commands. | ||
* Various bug fixes. | * Various bug fixes. | ||
| Line 1,439: | Line 1,536: | ||
* Live wallpaper swapping bug fix. - (09/03/2024 3:21 AM PST) | * Live wallpaper swapping bug fix. - (09/03/2024 3:21 AM PST) | ||
* More live wallpaper swapping bug fixes. - (09/03/2024 4:15 AM PST) | * More live wallpaper swapping bug fixes. - (09/03/2024 4:15 AM PST) | ||
** Tighter/stricter timing for swapping wallpapers to prevent | ** Tighter/stricter timing for swapping wallpapers to prevent more ''random'' crashes. - (09/03/2024 6:28 AM PST) | ||
* Placeholder replacement order of operations bug fix. - (09/03/2024 6:00 PM PST) | * Placeholder replacement order of operations bug fix. - (09/03/2024 6:00 PM PST) | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.7.2...9ff96ba Full Changelog: v1.7.2...9ff96ba] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.7.2...9ff96ba Full Changelog: v1.7.2...9ff96ba] | ||
'''Version 1.7.1''' | '''Version 1.7.1''' | ||
* | * Expanded <code>System</code> page to include various device related information. | ||
** This table currently includes device firmware, bootloader version, hardware type, memory information, and storage information. | ** This table currently includes device firmware, bootloader version, hardware type, memory information, and storage information. | ||
** Special thanks | ** Special thanks to ComplexNarrative. | ||
* New command placeholder | * New command placeholder variables <code>{ram_vendor}</code>, <code>{ram_model}</code>, <code>{ams_version}</code>, and <code>{hos_version}</code>. | ||
* Expansion | * Expansion of <code>refresh</code> command to include <code>wallpaper</code> for the ability to reload <code>wallpaper.rgba</code>, | ||
** | ** Called <code>refresh wallpaper</code>. | ||
* Improved scrolling implementation. (proper time-synced speed interpolation) | * Improved scrolling implementation. (proper time-synced speed interpolation) | ||
* Complete recalibration of character width map. | * Complete recalibration of character width map. | ||
| Line 1,456: | Line 1,553: | ||
** More memory leaks have been fixed, which should result in less heap overloads / crashes. | ** More memory leaks have been fixed, which should result in less heap overloads / crashes. | ||
* Language replacements are now performed on every ListItem and CategoryHeader upon initialization. | * Language replacements are now performed on every ListItem and CategoryHeader upon initialization. | ||
** This fixed entries like, for example, | ** This fixed entries like, for example, <code>Reboot To</code> and <code>Shutdown</code> from not being properly translated. | ||
** Language json's may still need some translations for the new words that have been included. | ** Language json's may still need some translations for the new words that have been included. | ||
* Removal | * Removal of <code>shutdown controllers</code> for space conservation. (commented out) | ||
** Did not want to remove this function, but because it only works with Nintendo controllers (and not Mission Control) it does seem somewhat redundant since | ** Did not want to remove this function, but because it only works with Nintendo controllers (and not Mission Control) it does seem somewhat redundant since the <code>sync button</code> on Nintendo controllers effectively turns off the controller as well. | ||
** If it is highly desirable, I may include this command again in future revisions. But for size stability, I could not get it to fit properly this time around. | ** If it is highly desirable, I may include this command again in future revisions. But for size stability, I could not get it to fit properly this time around. | ||
* Numerous code optimizations and bug fixes. | * Numerous code optimizations and bug fixes. | ||
| Line 1,465: | Line 1,562: | ||
Update: | Update: | ||
* Placeholder bug fix for new variables + bug fix | * Placeholder bug fix for new variables + bug fix for <code>refresh</code> command. - 08/28/2024 4:40 PM PST | ||
* TrackBar highlight width adjustment / fix. - 08/29/2024 5:05 AM PST | * TrackBar highlight width adjustment / fix. - 08/29/2024 5:05 AM PST | ||
* Rename hardware | * Rename hardware model <code>Nx</code> to <code>Icosa</code> and <code>x1</code> to <code>X1</code>. (correction) - 08/29/2024 5:28 AM PST | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.7.1...d959363 Full Changelog: v1.7.1...d959363] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.7.1...d959363 Full Changelog: v1.7.1...d959363] | ||
| Line 1,498: | Line 1,595: | ||
'''Version 1.6.9''' | '''Version 1.6.9''' | ||
* Dropdown and forwarder commands can now use custom labels/footers by | * Dropdown and forwarder commands can now use custom labels/footers by using <code>footer=</code> with a value other than <code>null</code> in the package's <code>config.ini</code>. | ||
* Custom name and version labels for overlays and packages can now be set | * Custom name and version labels for overlays and packages can now be set in <code>/config/ultrahand/overlays.ini</code> and <code>/config/ultrahand/packages.ini</code> by using options <code>custom_name=</code> and <code>custom_version=</code>. | ||
** Overlays will only be renamed when displayed on the menu. Direct modification of the overlay is still required for any re-naming of the overlay modules themselves. | ** Overlays will only be renamed when displayed on the menu. Direct modification of the overlay is still required for any re-naming of the overlay modules themselves. | ||
** Packages will now assume names in the following priorities.<br /> | ** Packages will now assume names in the following priorities.<br /> | ||
i. Priority 0: Custom names and versions written | i. Priority 0: Custom names and versions written in <code>packages.ini</code>.<br /> | ||
ii. Priority 1: Package name stated in the header in | ii. Priority 1: Package name stated in the header in the <code>package.ini</code> file for the Ultrahand package.<br /> | ||
iii. Priority 2: If none of the above, it will assume the name based upon the Ultrahand package folder. | iii. Priority 2: If none of the above, it will assume the name based upon the Ultrahand package folder. | ||
** If left empty, custom name and version parameters will be unused. | ** If left empty, custom name and version parameters will be unused. | ||
* New option for | * New option for table <code>;header_indent=</code> for drawing a single header indent on left side of the line. | ||
** This is meant to be used on one line "header-like" tables. | ** This is meant to be used on one line "header-like" tables. | ||
* New table text color options | * New table text color options for <code>info_text_color</code> and <code>section_text_color</code>. | ||
** <code>text</code> | ** <code>text</code> : Ultrahand theme text color used for default text. | ||
** <code>header</code> | ** <code>header</code> : Ultrahand theme text color used for headers. | ||
** <code>on_value</code> | ** <code>on_value</code> : Ultrahand theme color for <code>On</code> values / values. | ||
** <code>off_value</code> | ** <code>off_value</code> : Ultrahand theme color for <code>Off</code> values / version labels. | ||
* Key combo string representations in packages will now return their symbolic representation. | * Key combo string representations in packages will now return their symbolic representation. | ||
* Software update menu will now pull an indicator for the latest Ultrahand Overlay version from the GitHub API. | * Software update menu will now pull an indicator for the latest Ultrahand Overlay version from the GitHub API. | ||
* | * Themes <code>classic.ini</code> and <code>ultra.ini</code> will now be auto-downloaded when opening the Theme manager if they do not exist. | ||
* Downloads are now stored in a temporary state until completion. After completion, they are then moved into place. | * Downloads are now stored in a temporary state until completion. After completion, they are then moved into place. | ||
** This should help with failed downloads and files being removed/replaced after a failed download to an existing filepath. | ** This should help with failed downloads and files being removed/replaced after a failed download to an existing filepath. | ||
* The packages menu commands section now utilizes the same core logic as the packages themselves. (code optimization) | * The packages menu commands section now utilizes the same core logic as the packages themselves. (code optimization) | ||
* Improvements | * Improvements to <code>Reboot To</code> pre-generated command in root package. (<code>/switch/.packages/package.ini</code>) | ||
** If you are missing this feature, you may need to | ** If you are missing this feature, you may need to delete <code>/switch/.packages/package.ini</code>. | ||
* Various subtle UI positioning corrections and bug fixes. | * Various subtle UI positioning corrections and bug fixes. | ||
** Bug fix for cursor jumping/sliding after using hotkeys (with a d-pad down button) in games. | ** Bug fix for cursor jumping/sliding after using hotkeys (with a d-pad down button) in games. | ||
| Line 1,526: | Line 1,623: | ||
'''Version 1.6.8''' | '''Version 1.6.8''' | ||
* Introduction | * Introduction of <code>ini_file_source</code> function and expansion of <code>ini_file</code> function. | ||
** Dropdown selections can now | ** Dropdown selections can now use <code>ini_file_source <PATH_TO_INI></code> which will return a list of ini section name. | ||
** Introduction of new placeholder index replacements selections<code>{ini_file(<INDEX>)}</code> | ** Introduction of new placeholder index replacements selections<code>{ini_file(<INDEX>)}</code> / <code>{ini_file_source(*)}</code> for returning section names. (regular usage of <code>ini_file</code> placeholder calls will still function the same way, as well as <code>ini_file_source</code>) | ||
* Named step-trackbars can now use | * Named step-trackbars can now use standard <code>json_source</code>, <code>json_file_source</code>, and <code>ini_file_source</code> source functions and placeholder replacements. | ||
* Expansion | * Expansion of <code>filter</code> to non-path type entries in dropdown selections. | ||
** | ** Called <code>filter <NAME_OF_ENTRY></code>. | ||
* Expansion | * Expansion of <code>exit</code> command to exit directly to the overlays menu or packages menu. | ||
** | ** Called <code>exit overlays</code> / <code>exit packages</code>. | ||
* Expansion | * Expansion of <code>refresh</code> command. | ||
** <code>refresh theme</code>: reload/refresh the current current loaded theme (<code>/config/ultrahand/theme.ini</code>) | ** <code>refresh theme</code>: reload/refresh the current current loaded theme (<code>/config/ultrahand/theme.ini</code>) | ||
** <code>refresh package</code>: reload/refresh the current working package (redraws menu) | ** <code>refresh package</code>: reload/refresh the current working package (redraws menu) | ||
* Introduction | * Introduction of <code>compare</code> function to compare two text file lists and output a duplicate files list. | ||
** | ** Called <code>compare <PATH_TO_TXT_1> <PATH_TO_TXT_2> <OUTPUT_TXT_PATH></code>. | ||
* New | * New option <code>-copy_filter</code> / <code>-cp_filter</code> for <code>move</code> / <code>mv</code> commands utilizing <code>-src</code> + <code>-dest</code>. | ||
** | ** Called <code>move -src <SRC_TXT> -dest <DEST_TXT> -copy_filter <FILTER_TXT></code>. | ||
** This will run a copy instead of move for files in the filter list text file. | ** This will run a copy instead of move for files in the filter list text file. | ||
* Introduction of new placeholder | * Introduction of new placeholder function <code>split</code> for splitting strings. | ||
** | ** Called <code>{split(<STRING>,<PATTERN>,<INDEX>)}</code>. | ||
** For example, if the string | ** For example, if the string is <code>Test - String</code>, the pattern is <code>" - "</code>, and the index is <code>0</code>, the output would be <code>Test</code>. | ||
* Updates to the pre- | * Updates to the pre-generated <code>/switch/.packages/package.ini</code> root package file to include <code>Reboot To</code> (for booting directly into <code>/bootloader/hekate_ipl.ini</code> boot entries. | ||
** '''Notice:''' | ** '''Notice:''' Users may need to delete <code>/switch/.packages/package.ini</code> for it to generate a new one. | ||
* Various optimizations to the command interpreter, file manipulation logging, bulk execution implementations, and | * Various optimizations to the command interpreter, file manipulation logging, bulk execution implementations, and to <code>move</code> / <code>mv</code> operations. | ||
* Additional tweaks to the dangerous pattern detection function. | * Additional tweaks to the dangerous pattern detection function. | ||
* Update | * Update to [https://github.com/ppkantorski/Mod-Alchemist Mod Alchemist] now at v0.4.7. | ||
** Bug fixes for toggling content mods with duplicate files ( | ** Bug fixes for toggling content mods with duplicate files (utilizing <code>-copy_filter</code> and <code>compare</code>). | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.6.7...v1.6.8 Full Changelog: v1.6.7...v1.6.8] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.6.7...v1.6.8 Full Changelog: v1.6.7...v1.6.8] | ||
Update: | Update: | ||
* Filter bug fix. ( | * Filter bug fix. (affected <code>Reboot To</code>) - 07/22/2024 2:53 PM PST | ||
* Addition | * Addition of <code>-filter <FILTER_TXT></code> command option for <code>move</code>, <code>copy</code>, and <code>delete</code>. - 07/22/2024 8:35 PM PST | ||
** This allows for filtering of bulk executions (<code>-src</code> | ** This allows for filtering of bulk executions (<code>-src</code> / <code>-dest</code>). | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.6.8...cc7afad Full Changelog: v1.6.8...cc7afad] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.6.8...cc7afad Full Changelog: v1.6.8...cc7afad] | ||
'''Version 1.6.7''' | '''Version 1.6.7''' | ||
<ol> | <ol> | ||
<li><p>New optional command parameters | <li><p>New optional command parameters for <code>copy</code>/<code>cp</code>, <code>move</code>/<code>mv</code>, and <code>delete</code>/<code>del</code> commands for transfer logging and bulk executions.</p> | ||
<p>a. File manipulation logging: | <p>a. File manipulation logging: <code>-log_src</code> / <code>-log_dest</code> (outputs a text list for source file and destination file locations)</p> | ||
<ul> | <ul> | ||
<li><code>copy <source_file_path> <destination_file_path> -log_src <src_output_txt_file_path> -log_dest <dest_output_txt_file_path></code></li> | <li><code>copy <source_file_path> <destination_file_path> -log_src <src_output_txt_file_path> -log_dest <dest_output_txt_file_path></code></li> | ||
<li><code>move <source_file_path> <destination_file_path> -log_src <src_output_txt_file_path> -log_dest <dest_output_txt_file_path></code></li> | <li><code>move <source_file_path> <destination_file_path> -log_src <src_output_txt_file_path> -log_dest <dest_output_txt_file_path></code></li> | ||
<li><code>delete <source_file_path> -log_src <src_output_txt_file_path></code></li></ul> | <li><code>delete <source_file_path> -log_src <src_output_txt_file_path></code></li></ul> | ||
<p>b. Bulk execution: | <p>b. Bulk execution: <code>-src</code> / <code>-dest</code> (utilizes text lists to perform transfer operations on all entries)</p> | ||
<ul> | <ul> | ||
<li><code>copy -src <src_input_txt_file_path> -dest <dest_input_txt_file_path></code></li> | <li><code>copy -src <src_input_txt_file_path> -dest <dest_input_txt_file_path></code></li> | ||
| Line 1,573: | Line 1,670: | ||
<li><code>delete -src <src_input_txt_file_path></code></li></ul> | <li><code>delete -src <src_input_txt_file_path></code></li></ul> | ||
</li> | </li> | ||
<li><p>Improvements and fixes | <li><p>Improvements and fixes to <code>file_source</code> toggle functions.</p></li> | ||
<li><p>Improved handling | <li><p>Improved handling of <code>null</code> placeholder replacements.</p></li> | ||
<li><p>Corrections | <li><p>Corrections to <code>isDangerousCombination</code> (the dangerous pattern combination detection function).</p> | ||
<ul> | <ul> | ||
<li>The following paths are now ultra-protected (unable to delete or move files from): | <li>The following paths are now ultra-protected (unable to delete or move files from): | ||
| Line 1,586: | Line 1,683: | ||
<li>Slight improvements to dangerous pattern detection.</li></ul> | <li>Slight improvements to dangerous pattern detection.</li></ul> | ||
</li> | </li> | ||
<li><p>Updates | <li><p>Updates to [https://github.com/ppkantorski/Mod-Alchemist Mod Alchemist] (now v0.4.6, requires Ultrahand v1.6.7+).</p> | ||
<ul> | <ul> | ||
<li>Now utilizes the new command options for managing "Contents" mods.</li></ul> | <li>Now utilizes the new command options for managing "Contents" mods.</li></ul> | ||
| Line 1,594: | Line 1,691: | ||
'''Version 1.6.6''' | '''Version 1.6.6''' | ||
* Major memory leak has been fixed. | * Major memory leak has been fixed. | ||
** This issue was present for a while now, but | ** This issue was present for a while now, but until <code>Mod Alchemist</code> was never as concerning. Since <code>Mod Alchemist</code> can draw extremely long menus, memory overflow problems became more apparent. | ||
** Has been resolved and should result in better memory handling across all Ultrahand packages/commands. | ** Has been resolved and should result in better memory handling across all Ultrahand packages/commands. | ||
* Slight tweaks to the displayed version label formatting for overlays and packages. | * Slight tweaks to the displayed version label formatting for overlays and packages. | ||
| Line 1,603: | Line 1,700: | ||
'''Version 1.6.5''' | '''Version 1.6.5''' | ||
* Introduction of root-layer boot package implementation for executing commands upon startup. | * Introduction of root-layer boot package implementation for executing commands upon startup. | ||
** | ** Command <code>[boot]</code> located within <code>/switch/.packages/boot_package.ini</code> (if it exists) will be now be auto-ran once on startup. | ||
** This feature can be useful for Switch Android users if they wanted to remove the auto-generated Android folders (for instance). | ** This feature can be useful for Switch Android users if they wanted to remove the auto-generated Android folders (for instance). | ||
* Introduction of new | * Introduction of new command <code>pchtxt2cheat</code> (called <code>pchtxt2cheat /path/to/file.pchtxt</code>). | ||
** This function will | ** This function will convert <code>pchtxt</code> files and load them into the correct directory for the game's cheat. | ||
** '''Important:''' | ** '''Important:''' The game's title ID must be present somewhere within the pchtxt for this function to work. | ||
* Various bug fixes | * Various bug fixes to <code>pchtxt2ips</code>'s IPS generation. | ||
* Expansion | * Expansion of <code>shutdown</code> command to turn off all bluetooth controllers. | ||
** This function is | ** This function is called <code>shutdown controllers</code>. | ||
** '''Notice:''' | ** '''Notice:''' I have heard that this command may fail (return a red X) with <code>MissionControl</code> due to conflicting services, so just a heads up. | ||
* Source | * Source function <code>file_source</code> can now be chained (called one after another) for combining multiple sources into a single list. | ||
* Source function definitions can now also utilize | * Source function definitions can now also utilize an <code>ini_file</code> placeholder replacement (with the <code>ini_file</code> specified before the definition). | ||
* Various bug fixes | * Various bug fixes to <code>file_source</code> toggles. | ||
** Subsequent clicks | ** Subsequent clicks to <code>file_source</code> toggles are now handled properly with alternating path replacements according to the last line <code>move {file_source} /destination/path/</code> (must be present for <code>file_source</code> toggles). | ||
* Various bug fixes | * Various bug fixes to <code>ini_file</code> placeholder replacements. | ||
** Failed replacements now | ** Failed replacements now return <code>null</code> again instead of <code>Not available</code> (the <code>UNAVAILABLE_SELECTION</code> language variable). | ||
** When a value | ** When a value is <code>null</code> on a table info section, it is now auto replaced with <code>UNAVAILABLE_SELECTION</code>. | ||
* Language selections in | * Language selections in the <code>Settings Menu</code> now state their full names in their translated language with their abbreviations listed as footers. | ||
** This included updates to | ** This included updates to all <code>/config/ultrahand/lang/</code> files. | ||
* Additional key | * Additional key combo <code>LS+RS</code> has been added to the combos list. | ||
** This includes a correction to | ** This includes a correction to the <code>LS</code> button icon. | ||
* | * Commands <code>mirror_copy</code> and <code>mirror_delete</code> can now accept wildcard patterns. | ||
* Introduction of new Ultrahand | * Introduction of new Ultrahand Package [https://github.com/ppkantorski/Mod-Alchemist <code>Mod Alchemist</code>] designed for managing, converting, and installing game mods. (formerly the <code>Mod Master</code> example package) | ||
** '''Notice:''' | ** '''Notice:''' This package requires Ultrahand Overlay v1.6.5+. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.6.4...v1.6.5 Full Changelog: v1.6.4...v1.6.5] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.6.4...v1.6.5 Full Changelog: v1.6.4...v1.6.5] | ||
| Line 1,636: | Line 1,733: | ||
** Freed up a little more memory to prevent some potential memory related bugs. | ** Freed up a little more memory to prevent some potential memory related bugs. | ||
* Json replacement failure fall back value bug fix. - 07/08/2024 1:10 AM PST | * Json replacement failure fall back value bug fix. - 07/08/2024 1:10 AM PST | ||
** This includes fall | ** This includes fall back <code>null</code> related bug fixes as well as fixes to table drawing with <code>null</code> values. | ||
* Transfer memory correction. - 07/09/2024 05:07 AM PST | * Transfer memory correction. - 07/09/2024 05:07 AM PST | ||
** Issues noticed after freeing up a bit too much of the transfer memory, so corrections needed to be made. | ** Issues noticed after freeing up a bit too much of the transfer memory, so corrections needed to be made. | ||
* IPS generation bug fix. - 07/09/2024 06:16 AM PST | * IPS generation bug fix. - 07/09/2024 06:16 AM PST | ||
** Offsets were improperly being applied | ** Offsets were improperly being applied during <code>pchtxt2ips</code> generation. Corrections have been made. | ||
* [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.6.5...1c08f0f Full Changelog: v1.6.5...1c08f0f] | * [https://github.com/ppkantorski/Ultrahand-Overlay/compare/v1.6.5...1c08f0f Full Changelog: v1.6.5...1c08f0f] | ||
'''Version 1.6.4''' | '''Version 1.6.4''' | ||
* Optimizations to | * Optimizations to the <code>;on_every_tick=</code> implementation for track-bars. | ||
** Faster on every tick command execution. | ** Faster on every tick command execution. | ||
* New table option | * New table option additions <code>;section_text_color=</code> and <code>;info_text_color=</code>. | ||
** Both section and info text color are optional parameters that can be set to: | ** Both section and info text color are optional parameters that can be set to: | ||
*** <code>default</code> | *** <code>default</code> (normally <code>default</code> when unspecified) | ||
*** <code>warning</code> | *** <code>warning</code> (new built-in theme color <code>warning_text_color</code>) | ||
*** or any specified RGB888 hex color string | *** or any specified RGB888 hex color string | ||
* Forwarder package versions and title colors are now inherited from the layer 0 package (package.ini) if left unspecified within the forwarder package. | * Forwarder package versions and title colors are now inherited from the layer 0 package (package.ini) if left unspecified within the forwarder package. | ||
** Users no longer need to specify forwarder package versions and colors on every forwarder package ini. | ** Users no longer need to specify forwarder package versions and colors on every forwarder package ini. | ||
* Bottom buttons and settings menu touch functions now utilize theme | * Bottom buttons and settings menu touch functions now utilize theme colors <code>click_color</code> and <code>click_alpha</code> for drawing highlights on the touch regions. | ||
* Various touch interaction bug fixes. (touching "OK" on top of a track-bar, bottom regions for touch adjusted to language text size, etc.) | * Various touch interaction bug fixes. (touching "OK" on top of a track-bar, bottom regions for touch adjusted to language text size, etc.) | ||
* Slight tweaks to pixel blender for drawn strings during hiding. | * Slight tweaks to pixel blender for drawn strings during hiding. | ||
| Line 1,662: | Line 1,759: | ||
List of changes: | List of changes: | ||
<ol> | <ol> | ||
<li><p>'''IMPORTANT:''' | <li><p>'''IMPORTANT:''' Tables in v1.6.3 no longer utilize <code>;header=</code> pattern and no longer draw headers. Tables also no longer require a <code>$</code> in the command name.</p> | ||
<ul> | <ul> | ||
<li>To define a header, use an empty package command (like how they are defined normally).</li></ul> | <li>To define a header, use an empty package command (like how they are defined normally).</li></ul> | ||
</li> | </li> | ||
<li><p>Introduction of 3 track-bar command mode implementations.<br /> | <li><p>Introduction of 3 track-bar command mode implementations.<br /> | ||
i. Regular track-bar is called | i. Regular track-bar is called utilizing <code>;mode=trackbar</code>.</p> | ||
<ul> | <ul> | ||
<li><code>;min_value=</code> | <li><code>;min_value=</code> sets the minimum integer value</li> | ||
<li><code>;max_value=</code> | <li><code>;max_value=</code> sets the maximum integer value</li> | ||
<li><code>;units=</code> | <li><code>;units=</code> sets the display units</li> | ||
<li><code>;unlocked=</code> | <li><code>;unlocked=</code> is an optional true/false parameter for unlocked track-bars (locked by default) | ||
<ul> | <ul> | ||
<li>At least one track-bar must first be clicked (A) for all track-bars to be editable (unless unlocked).</li></ul> | <li>At least one track-bar must first be clicked (A) for all track-bars to be editable (unless unlocked).</li></ul> | ||
</li> | </li> | ||
<li><code>;on_every_tick=</code> | <li><code>;on_every_tick=</code> is an optional true/false parameter for executing listed commands on every track-bar tick (off by default) | ||
<ul> | <ul> | ||
<li>By default, commands are executed the moment the interactions with the slider stop.</li></ul> | <li>By default, commands are executed the moment the interactions with the slider stop.</li></ul> | ||
</li></ul> | </li></ul> | ||
<p>ii. Step track-bar is called | <p>ii. Step track-bar is called utilizing <code>;mode=step_trackbar</code>.</p> | ||
<ul> | <ul> | ||
<li><code>;steps=</code> | <li><code>;steps=</code> is an optional integer parameter for directly specifying the number of steps utilized with the step track-bar.</li></ul> | ||
<p>iii. Named step track-bar is called | <p>iii. Named step track-bar is called utilizing <code>;mode=named_step_trackbar</code>.</p> | ||
<ul> | <ul> | ||
<li>Requires | <li>Requires a <code>list_source</code> definition or a <code>list_file_source</code> definition (for loading the names).</li> | ||
<li>Does not | <li>Does not use <code>;min_value=</code>, <code>;max_value=</code>, <code>;units=</code>, nor <code>;steps=</code>.</li></ul> | ||
<p>All track-bars commands can be used with | <p>All track-bars commands can be used with placeholders <code>{value}</code> for returning the value and <code>{index}</code> for returning the index. Both value and index are also stored within the package config.ini file according to the track-bar entry.</p></li> | ||
<li><p>Introduction of 5 new placeholder commands.<br /> | <li><p>Introduction of 5 new placeholder commands.<br /> | ||
i. | i. <code>{slice(<ANY_STRING>,<START_INDEX>,<END_INDEX>)}</code> slices any string according to a start and end index.<br /> | ||
ii. | ii. <code>{decimal_to_hex(<DECIMAL>)}</code> converts a decimal string into a hex string.<br /> | ||
iii. | iii. <code>{ascii_to_hex(<ASCII>)}</code> converts an ascii string into a hex string.<br /> | ||
iv. | iv. <code>{hex_to_rhex(<HEX>)}</code> inverts the endian of a hex string.<br /> | ||
v. | v. <code>{hex_to_decimal(<HEX>)}</code> converts a hex string into a decimal string.</p> | ||
<p>Bug fix: All variable placeholders no longer require a specified order for operations.</p></li> | <p>Bug fix: All variable placeholders no longer require a specified order for operations.</p></li> | ||
<li><p>Optimized input handling for smoother / faster menu item traversal.</p></li> | <li><p>Optimized input handling for smoother / faster menu item traversal.</p></li> | ||
<li><p>New theme colors and updates to | <li><p>New theme colors and updates to theme [https://github.com/ppkantorski/Ultrahand-Overlay/blob/main/themes/ultra.ini <code>ultra.ini</code>].<br /> | ||
i. | i. <code>header_text_color</code> is the text color for category headers.<br /> | ||
ii. | ii. <code>header_separator_color</code> is the separator rectangle color for category headers.<br /> | ||
iii. | iii. <code>star_color</code> is the color of the favorites star when unselected.<br /> | ||
iv. | iv. <code>selection_star_color</code> is the color of the favorites star when selected.<br /> | ||
v. | v. <code>bottom_button_color</code> is the color of the buttons displayed at the bottom of the window.<br /> | ||
vi. | vi. <code>bottom_separator_color</code> is the color of the separator drawn near the bottom of the window.<br /> | ||
vii. | vii. <code>bottom_text_color</code> is the color of the text drawn at the bottom of the window next to the buttons.<br /> | ||
viii. | viii. <code>trackbar_slider_color</code> is the color of the trackbar slider.<br /> | ||
ix. | ix. <code>trackbar_slider_malleable_color</code> is the color of the trackbar slider when it is in a modifiable mode (unlocked / press A).<br /> | ||
x. | x. <code>trackbar_slider_border_color</code> is the color of the thin border around the slider.<br /> | ||
xi. | xi. <code>trackbar_full_color</code> is the color of the trackbar for the filled portion.<br /> | ||
x. | x. <code>trackbar_empty_color</code> is the color of the trackbar for the empty portion.<br /> | ||
xi. | xi. <code>default_package_color</code> is the default color for package titles (used if none is specified in the package header).</p> | ||
<p>'''IMPORTANT''': All colors with | <p>'''IMPORTANT''': All colors with word <code>seperator</code> are now spelt correctly <code>separator</code>. (grammer typo fix)</p></li> | ||
<li><p>Expansion | <li><p>Expansion of <code>backlight</code> command.</p> | ||
<ul> | <ul> | ||
<li>In addition | <li>In addition to <code>on</code> and <code>off</code>, backlight can now take an integer percentage value for precise backlight modifications.</li> | ||
<li><code>backlight <PERCENTAGE></code></li></ul> | <li><code>backlight <PERCENTAGE></code></li></ul> | ||
</li> | </li> | ||
<li><p>Bug fix | <li><p>Bug fix for <code>refresh</code> command.</p> | ||
<ul> | <ul> | ||
<li><code>refresh</code> | <li><code>refresh</code> should now behave on the level / page it is called upon.</li></ul> | ||
</li> | </li> | ||
<li><p>Improved touch scrolling implementation. (cursor no longer is redrawn as touch scrolling is initiated)</p></li> | <li><p>Improved touch scrolling implementation. (cursor no longer is redrawn as touch scrolling is initiated)</p></li> | ||
<li><p> | <li><p>Updated <code>libnx</code> from <code>v4.6.0</code> to <code>v4.7.0</code>.</p></li> | ||
<li><p>Page left / right traversal now works with joysticks in addition to the d-pad.</p></li> | <li><p>Page left / right traversal now works with joysticks in addition to the d-pad.</p></li> | ||
<li><p>Various bug fixes and command optimizations.</p></li></ol> | <li><p>Various bug fixes and command optimizations.</p></li></ol> | ||
| Line 1,736: | Line 1,833: | ||
'''Version 1.6.2'''<br/> | '''Version 1.6.2'''<br/> | ||
List of changes:<br/> | List of changes:<br/> | ||
* New | * New methods <code>list_file</code> and <code>list_file_source</code> for reading lines from a text file. | ||
** They are | ** They are defined <code>list_file <path_to_text_file></code> / <code>list_file_source <path_to_text_file></code>. | ||
** Their behavior is similar to a regular list with | ** Their behavior is similar to a regular list with placeholders <code>{list_file(<index>)}</code> and <code>{list_file_source(<index>)}</code>. | ||
* Bug fixes for nested package dropdown selections. | * Bug fixes for nested package dropdown selections. | ||
* Opaque screenshots will now be turned on by default upon initialization. | * Opaque screenshots will now be turned on by default upon initialization. | ||
** To disable, enter | ** To disable, enter the <code>Miscellaneous</code> menu and click the toggle item. | ||
* Bug fixes for Tesla combo persistence. | * Bug fixes for Tesla combo persistence. | ||
* Addition of a couple more default Tesla combos as well as fixes for reading alternate user specified combos. | * Addition of a couple more default Tesla combos as well as fixes for reading alternate user specified combos. | ||
* Settings menu code revision. (for smaller compilation) | * Settings menu code revision. (for smaller compilation) | ||
* | * Various <code>libtesla</code> alignment corrections. | ||
Update: | Update: | ||
| Line 1,753: | Line 1,850: | ||
'''Version 1.6.1''' | '''Version 1.6.1''' | ||
* New command | * New command mode <code>;mode=slot</code> for slot commands. | ||
** <code>slot</code> | ** <code>slot</code> commands are similar to <code>default</code>, but with the ability to set footers (similar to an <code>option</code> command). | ||
* Various placeholder replacement bug fixes. | * Various placeholder replacement bug fixes. | ||
** Preservation | ** Preservation of <code>null</code> arg with default to <code>Not available</code> upon final replacement. | ||
** Placeholder replacements now no longer contribute to command success/failure. (determined now solely by commands themselves.) | ** Placeholder replacements now no longer contribute to command success/failure. (determined now solely by commands themselves.) | ||
** <code>{file_name}</code> | ** <code>{file_name}</code> replacements no longer include file extensions. | ||
* Hex edits will now be unprocessed | * Hex edits will now be unprocessed for <code>null</code> arguments and still return successful. (bug fix) | ||
* New | * New placeholder <code>{timestamp(<strftime>)}</code> for logging time as a variable. | ||
** <code>strftime</code> | ** <code>strftime</code> are datetime formats like <code>"%Y-%m-%d"</code>. | ||
* Nested layers bug fix (for nested layers beyond layer 1). | * Nested layers bug fix (for nested layers beyond layer 1). | ||
* Package forwarder bug fixes. | * Package forwarder bug fixes. | ||
| Line 1,772: | Line 1,869: | ||
** Improvements to string/character length computations. | ** Improvements to string/character length computations. | ||
** Slightly improved cursor and menu layout. | ** Slightly improved cursor and menu layout. | ||
* New themes | * New themes values <code>selection_bg_alpha</code> and <code>table_bg_alpha</code> for blended transparency. | ||
** Updates | ** Updates to <code>default</code> + <code>ultra</code> themes. | ||
* New effect | * New effect option <code>Opaque Screenshots</code> (located in Settings > UI Settings > Miscellaneous) for removing overlay transparency from screenshots for Ultrahand. | ||
* Slight improvements to | * Slight improvements to the <code>unzip</code> command method. (boundary case bug fixes) | ||
'''Version 1.5.9''' | '''Version 1.5.9''' | ||
* More improvements and optimizations to the tables implementation. | * More improvements and optimizations to the tables implementation. | ||
** New | ** New option <code>;background=</code> which is a <code>true</code>/<code>false</code> value for drawing the table background. | ||
** New configurable theme | ** New configurable theme color <code>table_bg_color</code> for configuring table background colors. | ||
* More refinements and optimizations to libTesla. | * More refinements and optimizations to libTesla. | ||
** Slightly faster rendering + cleanup of various implementations. | ** Slightly faster rendering + cleanup of various implementations. | ||
* Update | * Update to <code>default</code> and [https://github.com/ppkantorski/Ultrahand-Overlay/blob/main/themes/ultra.ini ultra] themes. | ||
* Bug fix for Ultrahand starting opened after shutting down within an overlay. (only present in v1.5.8) | * Bug fix for Ultrahand starting opened after shutting down within an overlay. (only present in v1.5.8) | ||
* Bug fix for nested package pages. | * Bug fix for nested package pages. | ||
| Line 1,789: | Line 1,886: | ||
* Numerous across the board optimizations and bug fixes. (Significant memory/speed improvements from v1.5.7.) | * Numerous across the board optimizations and bug fixes. (Significant memory/speed improvements from v1.5.7.) | ||
** Improved code structure and memory consumption. | ** Improved code structure and memory consumption. | ||
** Optimized menu item sorting. (for drawing | ** Optimized menu item sorting. (for drawing the <code>overlays</code> / <code>packages</code> menu) | ||
** Improved themes loading implementation. | ** Improved themes loading implementation. | ||
** New hiding overlay implementation. (animations + widget throttling correction) | ** New hiding overlay implementation. (animations + widget throttling correction) | ||
** <code>set-ini-value</code> | ** <code>set-ini-value</code> now will create folders if necessary when initializing new ini's. | ||
** Bug fixes | ** Bug fixes for <code>move</code> and <code>delete</code> commands. | ||
** CURL global initialization. (fix for random crashes using download function) | ** CURL global initialization. (fix for random crashes using download function) | ||
** Bug fixes for default key combo initialization. (for fresh setups) | ** Bug fixes for default key combo initialization. (for fresh setups) | ||
* New table implementation for drawing information. | * New table implementation for drawing information. | ||
** Table commands must start | ** Table commands must start with <code>$</code> in the command name and include <code>;mode=table</code>. | ||
** Additional options for configuring tables: | ** Additional options for configuring tables: | ||
*** <code>;header=</code> | *** <code>;header=</code> is a <code>true</code>/<code>false</code> option for drawing the section header with the table. | ||
*** <code>;alignment=</code> | *** <code>;alignment=</code> is a string value <code>left</code>, <code>right</code>, or <code>center</code> for controlling the value column alignment. (default value is <code>right</code>). | ||
*** <code>;offset=</code> | *** <code>;offset=</code> is an integer value for configuring the values column offset with a <code>left</code> / <code>center</code> alignment. (default value is <code>160</code>) | ||
*** <code>;spacing=</code> | *** <code>;spacing=</code> is an integer value for configuring the newline spacings for drawing the table. (default value is <code>0</code>) | ||
*** <code>;gap=</code> | *** <code>;gap=</code> is an integer value for configuring the post-table gap. (default value is <code>3</code>) | ||
** Placeholders are fully functional for drawing tables with parsed values. (json, hex, list, etc.) | ** Placeholders are fully functional for drawing tables with parsed values. (json, hex, list, etc.) | ||
** New theme color | ** New theme color options <code>table_section_text_color</code> and <code>table_info_text_color</code>. | ||
* New unzip + copy progress indicator. | * New unzip + copy progress indicator. | ||
* Progress animation. ( | * Progress animation. (see <code>Settings > UI Settings > Miscellaneous > Effects > Progress Animation</code>) | ||
* Various subtle UI improvements and corrections. | * Various subtle UI improvements and corrections. | ||
Latest revision as of 04:14, 29 May 2026
| Ultrahand Overlay | |
|---|---|
| General | |
| Author | ppkantorski |
| Type | Overlays |
| Version | 2.4.4 |
| License | Mixed |
| Last Updated | 2026/05/28 |
| Links | |
| Download | |
| Website | |
| Source | |
| Support Author | |
Ultrahand Overlay is a fully scriptable overlay menu ecosystem for the Nintendo Switch.
Accessible instantly via hotkey from any game or application, it provides a powerful custom command language for managing files, configurations, and system settings. Built on libultrahand (an enhanced fork of libtesla), Ultrahand is a full drop-in replacement for Tesla Menu.
Every existing Tesla overlay (.ovl) works without modification.
Features
For Users
- Instantly accessible from any game via hotkey or swipe gesture - no game suspension required.
- Launch and manage overlays and packages with assignable per-item key combos.
- Install and run community packages from Ultrahand Packages.
- Control volume (up to 150% via bundled audio patch), backlight, and system settings on the fly.
- Real-time progress feedback for downloads, copies, and installs.
- Full touch support - scrolling, tapping, long-tap, and swipe gestures work throughout the entire UI.
- Customizable themes, wallpapers, sound packs, and UI layout.
- Browser-based Wallpaper Designer - crop, adjust, and export ready-to-drop
.rgbawallpapers (448×720). - Toast notification system - packages and external sysmodules/apps can push notifications to the overlay via JSON
.notifyfiles. - A growing ecosystem of libultrahand-based overlays is available, all launchable and manageable directly from Ultrahand:
- UltraGB - Game Boy / GBC emulator running on top of any game.
- Tetris - Fully playable Tetris running as an overlay.
- sys-tune - Background music player.
- Status Monitor - Real-time CPU/GPU/RAM, temps, battery, and frequency stats.
- FPSLocker - Custom FPS targets and display refresh rates for retail games.
- sys-clk - Per-game CPU/GPU/memory overclocking and underclocking.
- ovl-sysmodules - Toggle system modules and monitor memory usage on the fly.
- QuickNTP - One-tap NTP time sync.
- Fizeau - Color temperature, saturation, gamma, and contrast adjustment.
- NX-FanControl - Custom fan curve control.
- For a fuller list, see Ultrahand Overlays.
For Package Devs
A rich INI-based GUI scripting environment with:
- Launch integration - assignable hotkey combos per package, hide/star state, and boot/exit package hooks (
boot_package.ini/exit_package.ini) - Overlay control - launch overlays, execute package sections, navigate back, exit to menu
- Dynamic UI - toggles, sliders, dropdowns, tables (drawn directly or loaded from a text file), rich toast notifications (title, duration, alignment, icon),
set-footer, and page/theme/wallpaperrefresh - Status bar widget - opt-in clock, temperature, and battery overlay widget
- Language translations - package UI strings are automatically translated at render time based on the active system language
- Notifications -
notify/notify-nowcommands push inline toast messages from scripts; dropping a.notifyJSON file to/config/ultrahand/notifications/queues a persistent API notification that displays until dismissed - Placeholders - INI, JSON, hex, list, file, and timestamp sources; hardware info (
{ams_version},{hos_version},{title_id},{build_id},{ram_vendor},{local_ip},{volume},{backlight}, fuse data, and more); math and string transforms - Conditional logic -
try:blocks,path_exists,erista:/mariko:hardware guards, version comparisons - File operations - copy, move, delete, rename, mkdir, touch, mirror, compare, flag, dot-clean
- Download & extraction - download with retry, unzip; performs a one-time NTP sync to
pool.ntp.orgon first download to prevent SSL handshake failures - INI editing - get/set values and keys, add/rename/remove sections and keys, pattern-matched bulk edits
- JSON editing - get/set values and keys
- Hex editing - edit by offset, swap, string, decimal, reversed decimal, custom pattern offset, and hex pattern replacement
- Mod conversion -
.pchtxtto.ipsor Atmosphere cheat format - System control - reboot (Hekate boot/ini/UMS/payload targets), shutdown, volume, backlight, region
See the Wiki for full documentation.
For Overlay Devs
Overlays built on libultrahand get access to the full libultra utility suite plus first-class Ultrahand integration:
- Tesla compatibility - full drop-in replacement for libtesla; existing overlays work without modification
- Improved rendering - enhanced rendering performance and expanded shape primitives compared to libtesla
- Bug fixes - title ID change foreground bug, underscan bug, and screenshot transparency bug all resolved versus stock libtesla
- Full touch support - complete touch input handling with proper scrolling, tap, long-tap, and swipe gesture support (a significant improvement over libtesla's limited touch implementation)
- Launch integration - assignable combos, hide/star state, and boot/exit package hooks
- Per-overlay themes - independent theme overrides scoped to your overlay
- Per-overlay wallpapers - custom wallpaper support with automatic heap-aware fallback
- Status bar widget - opt-in clock, temperature, and battery overlay widget
- Language translations - automatic string translation at render time based on the active language
- Notifications - call
tsl::notification->show()ortsl::notification->showNow()to push toast messages from overlay code, with configurable text, font size, priority, duration, alignment, and icon - File & path utilities - copy, move, delete, mkdir, wildcard matching, and directory traversal
- Download & extraction - curl-based file downloads and zip extraction; performs a one-time NTP sync to
pool.ntp.orgon first download to prevent SSL handshake failures - INI, JSON & hex utilities - full read/write access to INI files, JSON files, and binary hex data
- Mod conversion -
.pchtxtto.ipsor Atmosphere cheat format - String utilities - trim, split, format, version parsing, placeholder resolution
- Audio & haptics - WAV sound playback with volume control and rumble feedback
See libultrahand for full documentation.
Installation
Quick Install (Recommended):
- Download the latest
sdout.zipand extract it to the root of your SD card. It includes everything needed:nx-ovlloader,ovlmenu.ovl, language files, themes, sound packs, and the required folder structure. Boot / reboot and launch Ultrahand with the default hotkey (ZL+ZR+DDOWN) or any Tesla-compatible combo.
Manual Install:
- Download and install the latest nx-ovlloader.
- Place
ovlmenu.ovlat/switch/.overlays/ovlmenu.ovl. - Warning: This will replace Tesla Menu if it is installed.
- Boot / reboot and launch Ultrahand with the default hotkey (
ZL+ZR+DDOWN) or any Tesla-compatible combo. - On first launch, Ultrahand creates
/config/ultrahand/and generates a starterpackage.iniat/switch/.packages/. - If a package does not appear in the menu, try running "Fix Bit Archive" in Hekate.
For available community packages, see Ultrahand Packages.
Settings Overview
Access the Settings menu by pressing PLUS from the main screen.
- Key Combo - Configure the hotkey used to open Ultrahand
- Language - Select UI language (loaded from
/config/ultrahand/lang/) - Notifications - Toast behavior and API notification settings
- Silence notifications, set max slots, toggle startup notification
- External sysmodules/apps can push notifications via
.notifyJSON files in/config/ultrahand/notifications/; per-app filtering and 50×50 RGBA icons supported - API Toggle Hotkey - hold
MINUS~4s to enable/disable API notifications on the fly
- System - View device info and adjust overlay memory heap size (4 / 6 / 8 MB)
- Software Update - Check for and install updates from within the overlay
- Theme - Select a theme from
/config/ultrahand/themes/ - Sounds - Select a sound-effect pack from
/config/ultrahand/.sounds/ - Wallpaper - Set a background wallpaper (requires 6 MB+ heap;
.rgbaformat, 448×720 px) - Widget - Toggle individual status bar elements:
- Clock, SOC temperature, PCB temperature, battery
- Backdrop, extended backdrop, border
- Miscellaneous - Granular toggles including:
- Swipe-to-open, haptic feedback, auto NTP sync
- Page recall, launch recall
- Packages menu, user guide, show/hide delete, show/hide unsupported overlays
- Overlay and package version display
Per-overlay and per-package launch combos can be assigned independently via the overlay/package settings menu (Y).
Writing Packages
Packages live in /switch/.packages/<YOUR_PACKAGE_NAME>/ and are configured with a package.ini file. A minimal example:
;title='My Package' ;version=1.0.0 ;creator=YourName [Copy Config] copy /switch/.packages/package.ini /config/mypackage/ [Reboot to Hekate] ;hold=true reboot hekate
For complete documentation on the package format, all available commands, placeholder variables, and command modes, see the Wiki:
- Package Reference - Package structure, headers, pages, boot/exit hooks, and configuration
- Command Reference - All commands, modes, source functions, and placeholder variables
For real-world package examples, see the examples/ directory.
Controls
A - Execute the selected command
Minus - View and run individual command lines (Script Overlay); tap to dismiss the frontmost notification
Hold Minus (~4s) - Toggle API Notifications on/off (when API Toggle Hotkey is enabled in Notification Settings)
Long-tap (touch) - Open command line view or overlay/package settings
X - Star/favorite an overlay or package
Y - Open overlay/package settings
Plus - Open Ultrahand Settings from the main menu
L/R - Jump to top / bottom of the current list
ZL/ZR - Page up / down (hold for rapid scrolling)
R during command - Abort the running operation
B during command - Dismiss the overlay without canceling
Swipe inward from edge - Open Ultrahand (alternative to key combo)
Tap notification (touch) - Dismiss that notification directly
Screenshots
Changelog
Version 2.4.4
- Quick bug fix for the
exit packagecommand.- In the prior version triggering
exit packagewas preventing the package header from being properly cached for forwarder packages until Ultrahand exits.- This broke things like package versions, titles, and info sections in package forwarders from being properly cached after triggering (now resolved).
- In the prior version triggering
- Side-note: Compiled with
libultrahand v2.4.3(v2.4.4will be skipped on this release; no changes).
Version 2.4.3
- Sleep halting of the background event poller in
libultrahand(to prevent all polling activity during shallow sleep).- This makes the CPU load contribution from the overlay 0% during shallow sleep.
Version 2.4.2
- New package command option header
;ram_size_gb=for conditionally drawing commands based on detected system RAM.;ram_size_gb=4will only apply on 4GB systems,;ram_size_gb=8on 8GB systems.- RAM size is detected at fuse data write time and cached.
- Older fuse files without this key are updated automatically on next startup.
- New package placeholders:
{ram_size_gb},{hekate_version},{ovlloader_version},{ultrahand_version}, and{ovl_version(<PATH_TO_OVL>)}.{ram_size_gb}: returns4or8based on detected system RAM (read from fuse data).{hekate_version}: reads fromsdmc:/bootloader/update.binand is cached at startup.{ovlloader_version}: reads from the running loader info and is cached at startup.{ultrahand_version}: returns the currently running Ultrahand version.{ovl_version(<PATH_TO_OVL>)}: dynamically reads the version of any overlay by path.
- Expanded
exitcommand with new destination arguments.exit packageinstantly returns to the packages menu from anywhere in the package nav stack (including nested menus and script overlays) with the cursor positioned on the originating package.exit overlaysandexit packageshave been renamed toexit to_overlaysandexit to_packages.exit ovlloadertriggers a complete exit ofnx-ovlloader.
- Expanded
rebootcommandreboot ovlloadercommand using the same reload flag mechanism asexit ovlloader.- Triggers an nx-ovlloader reload on demand without requiring a heap size change.
nx-ovlloaderversion is now compared before and after a Software Update.- If a version change is detected, Ultrahand automatically triggers a reload so the new loader takes effect immediately without a manual reboot.
- New
force_failurecommand.- Explicitly marks command execution as failed (useful for
try:logic in packages).
- Explicitly marks command execution as failed (useful for
- Scope fix for
execcommands.executeIniCommandsnow correctly derives the package path from the ini file's actual location rather than always defaulting to the calling package's path.
- Bug fix for
;mode=optiondrop-down losing the option symbol on back when no value has been set.- Footer now correctly restores to
OPTION_SYMBOLas the default rather than an empty/null string.
- Footer now correctly restores to
- Name split footer normalization fix for option-mode checkmark matching.
- Footers written by
boot_package(e.g."0 - (default)") now correctly restored inSelectionOverlayafter subsequent value changes.
- Footers written by
- Table fixes / improvements.
- Lines beginning with
;are now skipped (comment-out support for table rows). - Rows where a placeholder resolves to
""now correctly shift columns instead of rendering a blank first column (bug fix). - The section and info columns now wrap independently to their own available widths, with rows aligned pairwise so multi-line entries in either column don't go out of sync.
- Creator field text wrapping mode corrected from
"none"to word wrapping.
- Lines beginning with
- Bug fix for
PROTECTED_FILES(atmosphere/package3,atmosphere/stratosphere.romfs) not being correctly staged to.ultraduringcopy,move, andunzipoperations.- These changes fix updating AMS from Ultrahand via reboot payload in more test cases.
- IDDQ fuse calibration values now correctly scaled on write (
cpu_iddqx4,soc_iddqx4,gpu_iddqx5) to matchhekate. - Scroll bar object rendering corrections in
libultrahand. atmosphere.rgbawallpaper is now bundled insdout.zip.- New master volume IPS patch included (
d1e98d469...ips) for latest HOS support. - Now packaged with nx-ovlloader v2.0.2.
- Full Changelog: 59b531c...v2.4.2
Version 2.4.1
- Widget now has an optional border (on by default).
- New theme color
widget_border_color. - New toggle for
BorderinSettings > Widget. - Themes
ultra.iniandultra_blue.inihave been updated.
- New theme color
- Improved audio event handling (for simultaneous sound effect playbacks) in
libultrahand. - Improved combo input isolation and button event handling.
- Home event system tick flag storing in
libultrahand(for devs only). - Slight alignment corrections.
- Full Changelog: v2.4.0...v2.4.1
Quick Update:
- Slight widget alignment correction for the 100% battery case. - 04/20/2026 5:02 AM PST
hide_widget_bordervariable loading bug fix inlibultrahand. -04/20/2026 7:45 AM PST- Full Changelog: v2.4.1...59b531c
Version 2.4.0
- Across the board performance optimizations to rendering methods in
libultrahand.- Significantly improved wallpaper rendering performance (60FPS on 612 MHz cpu under-clock).
- Across the board optimizations to all
libultrafunctions inlibultrahand.- Now compiling back to pre-
Ultrahand Overlay v1.1.7sizes.
- Now compiling back to pre-
- Overlay memory mode features have been expanded.
- 6MB overlay heap now supports wallpapers and higher buffer sizes (faster copy, downloads, unzip, etc).
- 4MB overlay heap now supports sound effects and slightly higher buffer sizes.
- Improved table drawing (significantly better performance + various bug fixes).
- Download commands now perform a NTP sync to
pool.ntp.orgone time after initial startup when called.- This feature will auto-fix issues with SSL handshakes breaking due to time de-synchronization.
- New
Auto NTP Synctoggle in theSettings > Miscellaneousmenu for disabling this feature.
- New
Page RecallandLaunch Recalltoggles inSettings > Miscellaneous.Page Recallpreserves memory of what item you were on on page left / right for proper recall back to that item (on by default).Launch Recalltakes you back to the exact overlay / package you used a launch combo to enter on the main menu when you click such combo again (on by default).- When turned off, combo returns simply return to Ultrahand cold (like before).
- Side-note: This function only works with overlays compiled with >=
libultrahand v2.4.0.
- Max overlay / package sort priority has been increased from 20 to 25.
- Critical bug fixes for page swapping / swapTo in
libultrahand.- There was an issue where rapid tapping of page left / right could trigger a broken GUI pointer (crash).
- This issue is now resolved.
- There was an issue where rapid tapping of page left / right could trigger a broken GUI pointer (crash).
- Improvements to feedback (sound + haptics).
- Both sound and haptics now use their own threads for improved reliability with event synchronization for improved performance.
- Numerous additional tweaks and unmentioned bug fixes.
- Full Changelog: 7df15c9...v2.4.0
Version 2.3.0
- Numerous improvements to the notifications implementation.
- Notification options have been moved to the Notifications Menu (in System Settings).
- Multiple notifications can be shown at once (up to the
Max Slotsvalue).- When using 4MB overlay memory, max slots is capped at 4, otherwise it is capped at 8. (default value 4)
- API Notifications (formerly known as
External Notifications) are formatted as follows:
{
"text": "This is an example notification.",
"font_size": 24, #optional
"split_type": "word" #optional, word by default
"alignment": "left", #optional, center by default without a title
"duration": 4000, #optional duration in ms
"title": "Example App", #optional, allows show_time
"show_time": "true", #optional, true by default
"priority": 20, #optional (ideally not modified)
}
- Stored in
/config/ultrahand/notifications/{APP_ID}-{UNIQUE_ID}.notify(JSON format) - API Notifications can be filtered with the existence of
/config/ultrahand/flags/notifications/{APP_ID}.flag.
- Stored in
- Notification icons are now supported and must be 50x50 RGBA format with
{APP_ID}matching the notification json./config/ultrahand/assets/notifications/{APP_ID}.rgba
- Package command
notify/notificationandnotify-now/notification-nowhas been expanded.notify <MESSAGE> [FONT_SIZE] [TEXT_ALIGNMENT] [SPLIT_TYPE] [DURATION_MS] [TITLE] [SHOW_TIME] [APP_NAME]<MESSAGE>: the main notification message text. (only 4 lines can be displayed)[FONT_SIZE]: an integer value in range 8 to 48 (24 by default with a title, 26 without a title).[TEXT_ALIGNMENT]: eitherleft,center, orright.- By default, without a title it is
centerand with one it isleft.
- By default, without a title it is
[SPLIT_TYPE]: eitherwordorchar.[DURATION_MS]: the duration for the prompt in milliseconds. (500 min, 4000 by default)- A duration value of 0 will keep the prompt displayed indefinitely until dismissal.
[TITLE]: a title for the notification.[SHOW_TIME]: atrue/falsevalue for showing the timestamp alongside the title. (requires a title)[APP_NAME]: allows the notification command to use an icon (used if present)- To use an app name without a title, title must be an empty string (
"").
- To use an app name without a title, title must be an empty string (
notify-nowfollows the same pattern asnotifybut always displays in slot 0 with immediate priority.- Sidenote: All
[]parameters are optional and are interpreted based upon their value and order.
- New notification sound effect
/config/ultrahand/sounds/notification.wav.- Users may need to re-apply the default theme for this new sound effect to load.
- The
Silence Notificationstoggle disables notification sound effects.
- Notifications can be dismissed with
KEY_MINUSclicks, as well as via direct touch. - API toggle hotkey (hold
KEY_MINUSfor 4s) allows disabling API Notifications on demand easily.- The API toggle hotkey can be enabled / disabled in the Notifications Menu.
- New theme colors
notification_title_color,notification_time_color, andunfocused_color.notification_title_coloris the color for the notification titles.notification_time_coloris the color for the notification timestamps.unfocused_coloris the colorKEY_A+" OK" is displayed with at the bottom of the overlay when no items are in focus.
- New package command
touch, calledtouch <PATH_TO_FILE>.- Command creates an empty text file according to the file path if the file does not exist.
- New
Packages Menutoggle (in Miscellaneous) for hiding the packages menu completely. - Timestamp placeholder
{timestamp()}(with no formatting parameter) can now also be called as{timestamp}. System RAMpreviews now automatically change withOverlay Memoryadjustments in the System Settings menu.- Sound effects can now use
8000 Hz,11025 Hz,16000 Hz,22050 Hz,32000 Hz, and44100 Hz16-bit PCM wav files in addition to48000 Hz. - Feedback (haptics + sound) is now processed on its own background thread for improved performance and reliability.
- Improvements to haptics in handheld mode.
- Cleanup of language json's (removal of unused / unnecessary variables).
- Bug fix for internet connection checks in download calls.
- Various list class corrections / improvements.
- Various code optimizations, bug fixes, and improvements.
- Full Changelog: f580fd9...v2.3.0
Quick Update:
- JSON placeholder parsing bug fix (for allowing numerical / boolean conversions to strings). - 03/12/2026 11:26 PM PST
- Script Overlay no longer removes tags from ListItem commands (bug fix). - 03/12/2026 11:26 PM PST
- Notification timestamp positioning bug fix (for notifications with no icons). - 03/12/2026 11:42 PM PST
- Separator symbol coloring for notification text. - 03/13/2026 12:01 AM PST
- Notification touch dismissal in right-side mode bug fix. - 03/13/2026 1:12 AM PST
Version 2.2.9
- Overlay freeze bug fix triggered when entering the packages menu with GDB debugging enabled in Atmosphere.
- When
enable_htc = u8!0x0andenable_standalone_gdbstub = u8!0x1are present in thesystem_settings.ini, prior versions can freeze / become unresponsive when entering the packages menu (or any package in general) while within an application / game. - This was because
getBuildIdAsString(updated among the general placeholders) was relying ondmnt:chtwhich conflicts directly with the standalone GDB stub.
- When
libnxhas been updated to latest.- Full Changelog: c6a9c08...v2.2.9
Quick update:
- Build ID value correction (was pulled from wrong index). - 02/22/2026 12:49 PM PST
- Full Changelog: v2.2.9...f580fd9
Version 2.2.8
- All language font glyphs are now accessible regardless of the specified language (
libultrahandfix).- Special thanks to @tomvita.
- Packages can now utilize language translation json's (similar to
libultrahandoverlay language translations).- Language json's go within the
langfolder within the package's main folder and are utilized based upon the current selected overlay language. - Translations are based upon
drawStringcalls with keys being the original text and values being the translations.
- Language json's go within the
- New package command option headers.
;state=works with valueshandheldordockedand will only draw the list item if in handheld or docked accordingly.;hos_version=works with version values or with comparison signs>=,<=,>,<+ the specified version directly after.;ams_version=works with version values or with comparison signs>=,<=,>,<+ the specified version directly after.- Both
;hos_version=and;ams_version=will only draw the command when the conditions are met.
- Both
- Side-note: All of these new command headers can be used in combination or isolation.
- New package placeholder variables.
{package_version}returns the current package version from which the command exists in (specified in the header).{backlight}returns the current handheld backlight level.{volume}returns the current master volume level.
- New command
!path_exists(similar topath_existsexcept it returns command failure if the specified path exists).- Called
!path_exists <SPECIFIED_PATH>.
- Called
- Changes to root package boot package behavior (
/switch/.packages/boot_package.ini).- The
on-bootentry now triggers specified commands once on system startup (similar to howbootused to function). - The
bootentry now triggers once when thePackages Menuis entered, as well as once on thePackages Menuafter overlay hiding has triggered.
- The
- New
Soundsmanager for selecting overlay system sound effects (bundled in .zip's).- Sound zip packs go in
/config/ultrahand/.sounds/(files must be around the same size as the default sounds pack). - The
Sound Effectstoggle has been removed from theFeaturespage. - The
NO_SOUND_EFFECTS_UPDATESupdate flag has now been removed (no longer necessary).
- Sound zip packs go in
- Update to
Overlay Info, with info properly translated in each supported language.- New project developer animation on the "Software Update" page.
- Languages update command in the
Software Updatemenu has been removed (now unnecessary).
- Text wrapping for tables has been significantly revised to properly handle asian characters on split as well as implement hyphens for other languages when split by character.
- Indent symbols for continued lines utilizing indents now properly indent their start position based upon the indentation of the previous line (for easier viewing of code).
- Scrolling category headers now properly resume scroll state during regular
goBackcalls (libultrahandfix). - Now including patches from Master Volume for unbounded volume sliding from 100% to 150% using the
volumecommand. - Download commands now verify internet access on network connection (to prevent hanging while on a network without internet access).
- The "hold A to execute" list item behavior has been reduced from 4s to 3s to trigger.
- TrackBar unlocking / locking feedback tweaks.
- Script overlay freeze bug fix (placeholder replacement infinite loop bug fix).
- Various boundary case fixes to the
Listclass inlibultrahand. - Bug fix for package version labels not being displayed clean with
Clean Versionsenabled. - Improvements to image rendering (
libultrhaand). - Various additional bug fixes and code optimizations.
Quick update:
- Sounds preservation on update bug fix. - 02/20/2026 2:14 AM PST
sdout.zipempty folder inclusion bug fix - 02/20/2026 2:52 AM PST- Master volume patch inclusion (was accidentally removed from the
sdout.zip). - 02/20/2026 9:12 PM PST
Version 2.2.7
- Critical bug fix for touch navigation (crash fix).
- Touch navigation redirection for direct touch on list items utilizing
swapTo(inlibultrahandv2.2.3 -> v2.2.5) could trigger crashes randomly (pointer still referenced after deconstruction).
- Touch navigation redirection for direct touch on list items utilizing
- New settings toggle for startup notifications (
Startup Notifications; on by default).- New restart notification for
nx-ovlloadermemory settings changes. - Proper restart vs startup condition isolations.
- New restart notification for
- Notifications toggle has been renamed to
External Notificationsand will only be applied to JSON based notifications. - The "hold A to execute" behavior now works via touch.
- Hold duration has been reduced to 4 seconds.
- Package command
pchtxt2cheatnow accepts names for the cheats being converted (fix).- Called
pchtxt2cheat <SOURCE_PATH> [CHEAT_NAME].
- Called
- Table scrolling with
KEY_UP/KEY_DOWNclicks have been slightly refined. - Touch feedback refinements.
- Socket is now initialized and exited per download.
- This should free up more working memory / reduce memory pressure for packages and Ultrahand in general.
- Software updates now automatically reload Ultrahand on exit from the update menu (rather than on exits from the settings menu).
- Multiple list corrections, focus resuming, touch related bug fixes, and more.
- Full Changelog: v2.2.6...v2.2.7
Quick Update:
- Table scrolling bug fix. - 1/11/2026 1:03 AM PST
- Full Changelog: v2.2.7...e6e825d
Version 2.2.6
- Sequential placeholder replacement bug fixes (for package commands).
- Full Changelog: v2.2.5...v2.2.6
Version 2.2.5
- Critical bug fix for crashes on the packages / package menu when not connected to a network.
unpackDeviceInfosequencing correction.- Added
curl_global_cleanuptoexitServices(to cleanup curl global resources on app exit). - Buffer initialization correction for download / unzip functions.
- Full Changelog: f4978f0...v2.2.5
Version 2.2.4
- OverlayFrame titles now auto-scroll when too long or covered by the widget (just like subtitles).
- Copy, move, and delete wildcard commands now support
-filter <PATH_TO_TXT>(path to a text file containing a list of files / folders to be filtered from pattern resolution). -filternow properly resolves./and../paths and no longer require hardcodedsdmc:/in the file / folder paths.- Bug fix for the ScriptOverlay on track-bars (was improperly utilizing the index / value).
- Full Changelog: 8bc9e73...v2.2.4
Quick update:
- Removal of
;mode=,;grouping=, and;system=pattern values from being cached in the packageconfig.inimetadata and loaded (was unnecessary). - 12/15/2025 8:21 AM PST - Slight tweak to json placeholder replacements to, when the key does not exist, assume the key is
null. - 12/15/2025 12:56 PM PST - Command footer highlight loading bug fix (when defined in the
config.inibut not thepackage.inicommand). - 12/15/2025 1:35 PM PST - Full Changelog: v2.2.4...f4978f0
Version 2.2.3
- Improvements to the
Listclass inlibultrahand.- No more pointer caching (less memory usage, faster openings / list to list transitions, more consistent behavior).
- Proper "wall" handling for initial clicks that select the first / last ListItems (no instant wrap around until subsequent clicks).
- Theme variable
trackbar_coloris nowscrollbar_color+ new colorscrollbar_wall_color(triggered when tapping ends of the list).- Updates to
ultra.iniandultra-blue.inithemes (as well asdefault).- Themes will need to be re-applied for changes to be applied.
- Updates to
- Fixes to the "immediate focus" implementation introduced in v2.2.2.
- New package command header
;footer=and;footer_highlight=.;footer=allows users to pre-define a default footer value for a package command (to be used, stored, and set when no footer exists in theconfig.inifor the package.;footer_highlight=is atrue/falseparameter that will draw the footer with the highlight color when on.footer_highlightis also a new key to be used in theconfig.inifor manually configuring the footer highlight for the command.
- Hold mode
;mode=holdis no longer a command mode and can now be set fordefault,option, andslotcommands via;hold=true.- The default generated
package.ininow uses this command header.- Users may want to delete their
/switch/.packages/package.iniand have Ultrahand re-generate it if they are still using the oldpackage.ini.
- Users may want to delete their
- Side-note: If using
;mode=hold, users will need to update their commands to leverage;hold=trueinstead.
- The default generated
- Fixes to the placeholder parsing implementation.
- Proper handling and resolution sequencing of unresolved placeholders.
- Placeholder methods before the
_sourcedefinitions are now carried over to the rest of the commands (rather than reset).
- Touch improvements to track-bars.
- Optimizations to command menu drawings.
- Various corrections, bug fixes, and improvements.
- Full Changelog: ec26959...v2.2.3
Quick update:
- Footer package command header bug fixes (now to allow spaces). - 12/11/2025 3:57 PM PST
- Bug fix from prior changes. - 12/11/2025 5:20 PM PST
- Full Changelog: v2.2.3...8bc9e73
Version 2.2.2
- Proper fix for default combo initializations (on fresh installs).
- Launch combo is first checked and loaded from
/config/tesla/config.ini. - If the Tesla combo does not exist, and no combo in
/config/ultrahand/config.iniexists, users can use the default Tesla combo (L+DDOWN+RS) or the default Ultrahand combo (ZL+ZR+DDOWN) for initializing their default combo.- Once initialized, Ultrahand will assume the combo the user used until changed in the Settings menu.
- Launch combo is first checked and loaded from
- Bug fix for returning from an overlay while touch is still in progress (multiple cursors).
- If foreground is in focus and a button is clicked while touch is in progress, input will now be prevented (with button click feedback).
- Bug fix for returning to the overlay menu after using an overlay launch combo and exiting the overlay (
KEY_Bclick).- Before the
jumpToItemimplementation would kick in on the next launch of Ultrahand after closing the overlay, causing the cursor to shift unnecessarily to the last open overlay title on the overlay menu.
- Before the
- Bug fix for widget settings not auto-loading on first fresh install launch.
- Full Changelog: v2.2.1...v2.2.2
Quick update:
- Overlay frame top/bottom synchronization bug fix (for invoking the script overlay). - 12/07/2025 4:01 AM PST
- Full Changelog: v2.2.2...ec26959
Version 2.2.1
- New command mode
;mode=holdfor triggering a "hold A to execute" type response (similar todefault).- The pre-generated
package.ininow utilizes;mode=holdfor its shutdown command.
- The pre-generated
- New commands
set-ini-val-matching-key,remove-ini-key-matching-key, andpath_exists.set-ini-val-matching-keywill set an ini value to all ini sections that include the matching pattern key.- Called
set-ini-val-matching-key <FILE_PATH> <PATTERN_KEY> <DESIRED_KEY> <DESIRED_VALUE>.
- Called
remove-ini-key-matching-keywill remove all key value pairs from an ini from sections that include a matching pattern key.- Called
remove-ini-key-matching-key <FILE_PATH> <PATTERN_KEY> <DESIRED_KEY>.
- Called
path_existswill return command success or failure based upon if the path provided exists or not.- Called
path_exists <PATH>. - Can be quite useful when chained within
try:blocks.
- Called
- Placeholder replacement improvements for chaining with a source command.
- In addition to
ini_file(like before), users can now use the full catalogue of placeholders and chain them with their_sourcemethod definition. - Various improvements to placeholder replacements.
- In addition to
- Slight refinements to
list_file_sourceto include newlines when chained with tables.- Slight formatting improvements for tables on the
ScriptOverlay.
- Slight formatting improvements for tables on the
- New package Memory Kit (latest revision of the old Memory Config package example; Ultrahand v2.2.1+ only).
- This package includes the
mesosphere.binmemory hack (1.85 MB+stripped).- Keep in mind that the
strippedversion will break the web browser, which will cause crashes on certain games and apps that utilize the web browser. - The
1.85 MBversion however should not have any issues.
- Keep in mind that the
- Regular users should not touch the
Configure Commandstab as it is strictly available for development and testing of memory configurations forlibultrahand.
- This package includes the
- New base64 decoding placeholder.
- Called
{base64_decode(<ENCODED_STRING>)}.
- Called
- Improvement to haptics (stronger and more consistent feedback).
- Bug fix for combos on forced
AMS v1.10+support overlays.- Combos were not working properly for overlays with forced support.
- Forced AMS v1.10+ support is not recommended, but can still be used with manual patching overlay binaries.
- It is highly recommended that all overlays get recompiled for proper AMS v1.10+ support.
- New unsupported warning notification displayed when trying to launch an unsupported overlay.
- All pages now get drawn with the cursor automatically set (no cursor flickering into view).
- Bug fix for sluggish table scrolling after triggering a jump / wrap to bottom.
- Bug fix for exit sound + haptics kicking in when combo launching an overlay during a notification.
- Bug fix for degrees symbol on Chinese fonts.
- Slight optimizations to
stbtt_FindGlyphIndex_impl. - Various additional tweaks, bug fixes and corrections.
Version 2.2.0
- New overlay heap size configurations with automatic reloads (in the
System Settingsmenu).- Default heap size for HOS 21+ is now set to 4MB (displayed as
nx-ovlloader-).- Although rare, some overlays may not work properly on 4MB (without a fix implemented).
- To fix some of these overlays, they should be using
socketInitializeinstead ofsocketInitializeDefault(if utilized). - Overlays should also not be utilizing a full 1280x720p framebuffer when on 4MB.
- To fix some of these overlays, they should be using
- Although rare, some overlays may not work properly on 4MB (without a fix implemented).
- Default heap size for HOS 20 is now set to 6MB (displayed as
nx-ovlloader). - Default heap size for HOS 19 and lower is now set to 8MB (displayed as
nx-ovlloader+). - Users can also add a 4th higher option by adding to
/config/ultrahand/config.inia new sectionmemorywith keycustom_overlay_memory_MBand an integer value (2MB intervals greater than 8MB only).- After adding that entry, a 4th memory option will appear (displayed as
nx-ovlloader×).
- After adding that entry, a 4th memory option will appear (displayed as
- If Ultrahand deems there is not enough memory (at least 5.3 MB free after potential changes), then changes will not be applied.
- Default heap size for HOS 21+ is now set to 4MB (displayed as
- Users can now completely exit the overlay system from the
System Settingsmenu.- This will recover all memory consumed by
nx-ovlloader/Ultrahand Overlay. - Users can then use
Ultrahand-Reload.nrofrom homebrew launcher (now bundled withnx-ovlloader) to restart / resetnx-ovlloaderwithout rebooting.
- This will recover all memory consumed by
- Commands
move,copy,delete, anddot-cleanmemory optimizations.- Larger deletes, moves, and copies than
v2.1.8are now possible (even on a 4MB heap). dot-cleannow also removes all.DS_Storefiles for the specified directory (and subdirectories).
- Larger deletes, moves, and copies than
- Now bundled with nx-ovlloader v2.0.0 (which includes the new helper module nx-ovlreloader).
nx-ovlloader+compilation has been discontinued (no longer necessary).- The
nx-ovloader+zip onv2.0.0is the same asnx-ovlloader.- It is provided for now during a grace period to ensure users can easily update from the system settings menu.
- In the future after
nx-ovlloader v2.0.0, if not on Ultrahand Overlay v2.2.0+, update methods might be broken.
- Side-note: Users no longer need the
/config/ultrahand/expansion/folder and can safely delete it after updating.
- Software updates now have the option to download a temporary
update.inicommand file (if provided on release) for micro managing the installation / update process.- Software updates instructions have also been slightly reworked for easier management.
- Command
execnow can be called with any package ini file (in addition toboot_package.inilike before).- Users can call this with
exec <ENTRY_NAME> [ULTRAHAND_INI_FILE_PATH].ULTRAHAND_INI_FILE_PATHin this case is an optional parameter, the path to the package ini file containing the command entry.- When not provided, it will assume commands from
boot_package.ini(just like before).
- Users can call this with
- Slight improvements to notifications (new
tsl::notification->showNowimplementation).- This allows instant display of the notification without waiting for the last notification to transition.
- Packages can also use
showNowvianotify-nowornotification-now(called the same way asnotify/notification).
- Sound effects now work on 6MB+ overlay heap sizes (disabled on 4MB).
- Improvements to TrackBar touch.
- Improvements to touch haptics (now to trigger on touch).
- Improvements rounded rects and circles (slightly more refined AA).
- Changes to socket initialization for improved memory usage (enables downloads on 4MB and improved memory).
- Bug fix for haptics becoming disabled after sleep.
- Bug fix for
;display_title=in packages interfering with proper returns to the last selected list item on the menu (as seen with returning fromAlchemist). - Various tweaks, optimizations, bug fixes, and corrections.
Update:
- Bug fix for software updates from v2.2.0 forwards. - 11/28/2025 8:36 PM PST
- New command
download-no-retryfor download commands with zero retry attempts. - More accurate failed download detections.
- New command
Version 2.1.8
- AMS 1.10.0+ and HOS 21 support.
- Overlays not recompiled with latest
libnxno longer work without manual force enabling (potentially dangerous). - Unsupported overlays can now be hidden (toggle is within the settings menu).
- Important: All homebrew on
AMS 1.10+must to be recompiled with latestlibnxfor properly ensured support.
- Important: All homebrew on
- Overlays not recompiled with latest
- Anti-aliasing is now applied to rounded rects, uniform rounded rects, bordered rounded rects, and circles.
- Overall smoother, less pixelated / jagged edges.
- Slightly improved wallpaper loading speed + menu opening speed.
- Memory expansion toggle / notification bug fix.
- Initial state bug fix for main settings menu toggles.
- Bug fix for ini file saving. (buffer was too large)
- This fixes the
openoverlay command in Ultrahand packages.
- This fixes the
- Bug fix for ini file parsing not returning
nullon failed parsings. - Fixed Chinese font selection to ensure all glyphs display correctly on Traditional Chinese systems.
- Special thanks to @BadFish-HSrui.
nx-ovlloader/nx-ovlloader+has now been updated (v1.1.2) for AMS 1.10+ support.- Important: Double check that you are on v1.1.2 BEFORE updating AMS (if you choose to).
libnxhas been manually recompiled with-Osas well as several other code generation optimizations.- Various minor bug fixes and corrections.
- Full Changelog: v2.1.7...v2.1.8
Quick Update:
- Removal of pre-release status. - 11/15/2025 6:04 PM PST
- Full Changelog: v2.1.8...e84de59
Version 2.1.7
- Bug fix for notification text being drawn transparent when hidden (related to the global alpha limiter).
- Bug fix for toggling
Memory Expansionpreventing users from exiting the Ultrahand settings menu. - Ini method optimizations (faster loading).
- Proper menu return to last selected overlay / package when version labels are hidden.
- A unique ID is now used to facilitate precise returns.
- Widget backdrop now utilizes the alpha limiter.
- Language config map (for the initial and repeated parsing of languages) is no longer static.
- This should free up more memory in the global heap.
- Slight improvements for haptics initializations (to prevent failed initializations that sometimes happen on first boot).
- Various minor code optimizations.
- Full Changelog: v2.1.6...v2.1.7
Version 2.1.6
- Proper return to the last selected item after changing settings in the main Ultrahand settings menu.
- Ultrahand settings menu can also now be entered from the hidden overlays / packages page.
- Improved shake highlight animation.
- Faster wallpaper loading.
- Various rendering optimizations.
- Global alpha limiter for glyph rendering.
- This will improve appearances when transitioning shown to hidden and vise versa.
- renderer->a is no longer needed for drawString calls in libultrahand.
- Bug fix for click animation not triggering on toggle list items.
- Various code optimizations (8kb smaller than v2.1.5).
Version 2.1.5
- New haptic feedback and sound effects options in
FeaturesunderMiscellaneousin the settings menu.- Haptic feedback is off by default.
- Sound effects are on by default, but require sound files to be added to
/config/ultrahand/sounds/.- Users updating to v2.1.5 must run
Updatefrom theSoftware Updatepage one more time after updating for the included sound effects to be properly installed. - Users can manually disable updates of the sound effect files by adding a file named
NO_SOUND_EFFECTS_UPDATES.flaginto/config/ultrahand/flags/.
- Users updating to v2.1.5 must run
- Sound effects are only enabled on
nx-ovlloader+, not regularnx-ovloader. - Sidenote:
- Sounds and haptics will also be applied to every overlay compiled with
libultrahand v2.1.5+. - Sound files must be relatively small to prevent memory related issues and keep latency low.
- Sounds and haptics will also be applied to every overlay compiled with
- Special thanks to @sskyNS for help with identifying the correct audio services implementation.
- Transition bug fixes for cached
Listframes.- These fixes ensure the overlay list changes are synchronized with the top and bottom parts of the OverlayFrame during menu transitions.
- Various refinements and bug fixes to the download file command.
- Buffer sizes have been tweaked, memory related improvements applied, and boundary case crashes resolved.
- Memory related improvements for
copyandmovecommands running on the interpreter thread. - The "Selection is empty!" message is now properly centered, and applied to the overlay menu when no overlays have been added.
- This ensures that translations are properly centered text instead of drawing text misaligned.
- Memory related improvements to wallpaper loading / reloading.
- Cleanup of notification processing queue.
- Cleanup of screenshots and recording layer initializations.
- Various code refinements, bug fixes, and tweaks.
- Full Changelog: v2.1.4...v2.1.5
Quick Update:
- Overlay exit sound to respect the disable sound effects preset. - 11/03/2025 9:37 PM PST
- Full Changelog: v2.1.5...3670712
Version 2.1.4
- New
sdout.zipdistribution, bundled with all components and dependencies (up-to-date) for easier SD card installations.- Installs
nx-ovlloader+by default, but users can toggle offMemory Expansionafter installing for regularnx-ovlloader.
- Installs
- New build ID placeholder variable
{build_id}. - New system region setting command
set-region <REGION>.<REGION>is eitherJPN,USA,EUR,AUS,HTK, orCHN.- Side-note: Reboot is required for changes to apply.
- Bug fix for
refresh wallpaper. - Various code optimizations and restructurings.
- Stability related bug fixes.
- Full Changelog: v2.1.3...v2.1.4
Version 2.1.3
- Bug fixes for regular toggles (state was not being preserved in
config.ini). - Bug fixes for toggles in the root package (
/switch/.packages/package.ini). - Restoration of the
{index}source function placeholder (was accidentally removed at some point over time). - Full Changelog: 855f0d1...v2.1.3
Version 2.1.2
- Rendering bug fix for regular
TrackBarobjects / uniform rounded rects.- Uniform rounded rects in some circumstances when drawn off screen could cause crashes.
- Side-note: Did not affect
StepTrackBar/NamedStepTrackBar.
- Left / right sensitivity fix for value transitions on regular
TrackBarobjects have been adjusted for precision. - Various method restructurings.
- Full Changelog: 7b8de7f...v2.1.2
Quick update:
- TrackBar touch highlight style improvements. - 09/30/2025 3:04 AM PST
- Full Changelog: v2.1.2...855f0d1
Version 2.1.1
- Toggles now utilize the interpreter thread with state change only applied for successful completion.
- New true/false command option ;progress= for toggle commands to show the command in progress throbber.
- Memory related improvements to move/mv with file logging and compare.
- This fix enables base loader to properly handle large move commands with proper file logging (as seen in Alchemist's content manager).
- Bug fix for {local_ip} placeholder not returning the local IP address.
- Various minor code optimizations.
- Full Changelog: v2.1.0...v2.1.1
Update:
- Overlay sort priority bug fix.
- Full Changelog: v2.1.1...7b8de7f
Version 2.1.0
- New system notifications implementation.
- There are 3 ways to interface with system notifications.
- a. Ultrahand Package:
notify <MESSAGE> [FONT_SIZE]ornotification <MESSAGE> [FONT_SIZE] - b. Direct
libteslacalls:tsl::notification->show(<MESSAGE>, [FONT_SIZE], [PRIORITY]); - c. External json calls:
{"text": <MESSAGE>, "font_size": [FONT_SIZE], "priority": [PRIORITY]}
- a. Ultrahand Package:
- Font size is an optional parameter, default value
28. - Priority is an optional, with jsons always assume priority
10while Ultrahand packages / direct calls assume priority20. - Creation time for jsons is auto prioritized for everything within the same priority level.
- For external json calls, jsons can be written to
/config/ultrahand/notifications/<PROGRAM_ID>-<UNIQUE_ID>.notify.- This function allows any program, including sys modules, to interface with the notification prompts.
- New theme color for notification text:
notification_text_color - Notice: Overlays must be compiled with the latest
libultrahandfor system notifications within those overlays.
- There are 3 ways to interface with system notifications.
- New overlay / package setting option to delete an overlay / package. (Hold A to Delete)
- New
Miscellaneousoptions for toggling on / off notifications and show delete. - New notifications for startup, new version detection, and when reboot is required for changes to apply.
- New page for empty selection commands.
- New placeholder variable for returning the current local ip address, called
{local_ip}. - New package header option
;display_title=for displaying an alternative in package display title. - Category headers now auto-scroll right to left for extended text.
- Improvements to package memory usage.
- Pages are no longer held up in memory for deeper menu navigation.
- Improvements to
dot-clean, faster file processing completion. - Improvements package item
jumpToItemcalls.- Full command names, including tags, are now properly utilized for specific item name isolations.
- Package settings now groups various package options into an
Optionscategory. - Command file / folder paths can now properly use
..to specify the directory above a current folder.- i.e. './../test/' will return the folder named
testabove the current directory the package ini is currently running from.
- i.e. './../test/' will return the folder named
- Settings and favorites buttons are now displayed on the menu within the
PackagesandOverlayscategory headers. - Bug fix for wallpaper alpha when hiding overlays.
- Proper fading with alpha transitions.
- Interpreter thread bug fixes for safer rapid launches.
- Bug fixes for the command parser; proper order of operation resolution for nested placeholder replacements.
- Full Changelog: a3a4519...v2.1.0
Version 2.0.1
- Overlay interaction (including button combinations) is now strictly limited to handheld mode controller as well as the player 1 controller.
- In the past, when other controllers click buttons, because the overlay looked for all controller inputs the sum of all buttons being clicked could trigger the menu or launch a combo unintentionally.
- This fix was set in
libultrahand, so all overlays compiled with it will now include this fix.
- Underscan and "right-side mode" bug fixes and adjustments.
- Users no longer need to exit the overlay for the underscan fix to correct the overlay dimensions (auto-corrections).
- Right-side mode is auto applied now when clicked in the settings menu with no need to reload.
- Fix is also in
libultrahand, so it will apply to all newly compiled overlays.
- Launch combo mode settings is now rendered within its own dropdown instead of being drawn directly within the root of overlay setting's menu (when specified).
- Various minor corrections.
- Full Changelog: 8a7904e...a3a4519
Version 2.0.0
- New combo package launcher (similar to the overlay launcher).
- Users can set any package to key combos.
- New
Quick Launchpackage setting (for disablingBoot Commandsfor the package during combo launches). - More button combinations have also been added to the list.
- New command
openfor opening overlays (with or without launch arguments) from the package menu.- Called
open /path/to/overlay.ovl {LAUNCH_ARGUMENT_1} {LAUNCH_ARGUMENT_2} {...} - Overlays can now be compiled to handle specific tasks for Ultrahand packages.
- Called
- Buttons
ZLandZRwill now skip the menu exactly one viewport's distance up or down.- Multiple clicks and hold will trigger rapid page skipping.
- This should allow for quicker and easier menu navigation, as well as table scrolling.
- New atmosphere updater functionality.
- To use, copy / move / unzip files into place as you would expect (overwriting stratosphere and package3 in
/atmosphere/).- Instead of being overwritten, the files will be assigned a
.ultraextension.
- Instead of being overwritten, the files will be assigned a
- After files have been moved into place, any
rebootcommand will automatically trigger the Ultrahand Updater payload.- This payload is downloaded once the moment
rebootis ran after installing Atmosphere as well as during software updates. - Users must reboot from Ultrahand Overlay itself for changes to apply.
- This payload is downloaded once the moment
- To use, copy / move / unzip files into place as you would expect (overwriting stratosphere and package3 in
libultrahanddetection for overlays compiled withlibultrahand.- Highlight colors for overlays with
libultrahandfunctionality. - Recompilation of all
libultrahandoverlays is needed with the new Ultrahand signature added (seeMakefile).
- Highlight colors for overlays with
- New command
dot-clear, calleddot-clear <PATH_TO_BE_CLEARED>.- This command will remove all metadata files that begin with
._from any specified directory (as well as all subdirectories). - This is useful for users who transfer files and mods over to their SD card from macOS.
- Side-note: These metadata files can cause issues with mods, so clearing them can be quite useful.
- This command will remove all metadata files that begin with
- New theme color configurations and updates to the default theme as well as
ultra.iniandultra-blue.ini.banner_version_text_color: Default color of the version label below the Ultrahand title.overlay_text_color: Default color for overlay titles.overlay_version_text_color: Default color for overlay versions.ult_overlay_text_color: Default color for libultrahand compiled overlay titles.ult_overlay_version_text_color: Default color for libultrahand compiled overlay versionspackage_text_color: Default color for package titles.package_version_text_color: Default color for package versions.ult_package_text_color: Secondary color for package titles.ult_package_version_text_color: Secondary color for package versions.text_separator_color: Default color for text separator symbols.selection_value_text_color: Default color for the selection value.- Side-note: Users may want to re-apply the default theme once for some of the changes to apply.
- Proper input isolation so menu navigation buttons do not interfere with combos and vise versa.
- Thread safe ini, hexing, file operations, and page swapping.
- New libultrahand command
swapToto safely handle swapping between pages (goBack / pop + changeTo).
- New libultrahand command
- The
Miscellaneoussettings menu has been re-organized and now includesTheme Settings.- Theme settings includes options that allows you to toggle on and off various theme configurations.
- On return from within package dropdowns / forwarders, the page is now automatically refreshed.
- All command footers and tables will automatically redrawn.
- Package headers can now utilize
;show_widget=truefor rendering the widget. - Dropdown menu commands can now utilize
;mode=slotfor changing the dropdown symbol to the option symbol. - Software update now installs
nx-ovlloader / nx-ovlloader+ v1.1.1(latest release).- Bug fixes for rapid overlay swapping, reduced file io calls, better memory mapping, and slight optimizations.
- Language changes are now instantly applied to the menu from within the language selection.
- Faster menu drawing.
- Buffer sizes for
nx-ovlloader+(memory expansion) are now loaded immediately during overlay launch.- Slight buffer size tweaks for base loader.
- Slight improvements to
Swipe To Open. - Slight redesigns to various text components within the overlay.
- Rendering related fixes and improvements.
- Fixes to file list generation from copy and move to include subdirectories.
- This functionality allows
Mod Alchemistto properly handle the removal of folders when appropriate for toggling content mods.
- This functionality allows
- Numerous bug fixes, memory optimizations, navigational fixes and alignment corrections.
- Significantly reduced memory pressure throughout numerous methods.
- Countless code optimizations and better memory handling.
- Bug fix for step track-bar values vanishing.
- Touch related fixes (long touch and release).
- Dangerous pattern bug fixes.
json_file/json_file_sourcebug fixes.- Many other fixes not mentioned.
- Full Changelog: 2602970...v2.0.0
Quick update:
- Transparent screenshot cursor opacity bug fix. ~ 8/6/2025 12:11 PM PST
Version 1.10.0
- Expansion of the overlay key combo launcher implementation.
- New launch argument modes implementation.
- Users can add launch argument modes to overlay entries in
/config/ultrahand/overlays.ini. - For example, for
miniandmicroentry points on my Status Monitor fork, users can addmode_args=(-mini, -micro)as well asmode_labels=(Mini, Micro)for labeling them. - After adding
mode_args(ormode_argsandmode_labels) new mode options will appear within the overlay settings menu (Yon an overlay).
- Users can add launch argument modes to overlay entries in
- All
libultrahandcompiled overlays (compiled with v1.10.0+) now allow for quick launches.- This means you can jump from one overlay / overlay mode to another without ever returning to
ovlmenu.ovl.
- This means you can jump from one overlay / overlay mode to another without ever returning to
- Pressing the combo used to launch the overlay will now also return users back to
ovlmenu.ovl. - Setting combos will now also instantly be applied (no need to exit the menu).
- You can now also be anywhere within Ultrahand and trigger an instant jump to any overlay / overlay mode using key combos.
- New launch argument modes implementation.
- New
Launch Combosglobal toggle in theMiscellaneoussettings menu.- This will disable all overlay launch combos from working.
- Can be useful if you are playing a game that demands lots of button combinations.
- Critical bug fixes for menu navigation.
- The
ScriptOverlaywas actually still broken in v1.9.10 on certain menus. - These fixes address a lot of potential mishandling of pointers in
main.cpp.
- The
- Unzip commands have been improved and are now less prone to errors.
- Commands in progress will now properly hit 100% instead of going from 99% to complete.
- Cursor center focus has been slightly lowered.
- This prevents slight scrolling from kicking in after hitting the 4th item on the list.
- Slight re-organization of the
Miscellaneoussettings menu. - The overlay / package settings menu now displays the version, with slight formatting improvements.
- Changing the sort priority for overlays / packages now triggers an immediate jump to the item being sorted upon return.
- Various alignment corrections and bug fixes.
- Full Changelog: v1.9.10...2602970
Version 1.9.10 Quick patch (stability update)
- Restoration of the
ScriptOverlay(minus on a command).- There was a lingering issue within the
Listclass that was causing mis-handlings of the cached items for certain menus upon return.- This issue should be resolved now.
- There was a lingering issue within the
- Potential memory leak bug fix for aborted
unzip/downloadcommands. - Smoother text scrolling (for list items with long text).
- Slightly improved color sampling for the cursor blink effect.
- Slight optimizations to the
handleRunningInterpreterinput handler. - Removal of unused variable declarations in the
MainMenuclass. - Slight alignment corrections to the table background.
- Full Changelog: 8ee2844...v1.9.10
- More widget options have been added to the settings menu.
- New toggle for disabling dynamic temperature colors.
- New toggle for forcing center text alignment (on by default).
- When off, text alignment will be set to the right (like before v1.9.8).
- New toggle for extended backdrop (off by default).
- This is an alternative style choice to the backdrop that some users may prefer.
- Widget menu has also now been broken up into "Widget Items" and "Widget Settings".
- Widget positioning and alignments have also been corrected.
- Important navigational bug fixes (memory leak fixes).
- Page swapping (including rapid page swapping), list deconstruction, and management of list item cache have been significantly cleaned up to prevent crashes.
- These changes should prevent lingering navigational memory related issues from randomly occurring.
- New theme color configurations.
temperature_color: color for temperatures on the widget with dynamic colors disabled.battery_charging_color: color for the power indicator on the widget with the battery charging.battery_low_color: color for the power indicator on the widget when battery is below 20%.- Propagation of
version_text_colorto apply to overlay and package versions on the menu (in addition to theUltrahand/nx-ovlloaderversion displayed below the logo).
- Improved dynamic logo with higher resolution color sampling (smoother gradient color progression).
- New alpha fix for screenshots taken with
Opaque Screenshotsset to off.- This sets the alpha for certain elements to 14, others to 15 to make screenshots with transparency look more accurate.
- Slight changes to default theme.
- Table background has been reset to a darker shade of gray.
- Side-note: Default theme must be re-applied for changes to occur.
- Various alignment corrections and bug fixes.
- Notice: Next version is currently planned to be v1.9.10, so don't get your hopes up for v2.0.0 quite yet.
- Full Changelog: 3c6125a...v1.9.9
Quick update: (cosmetic)
- Slight alignment fix to the widget / widget backdrop (1 pixel shift). ~ 7/6/2025 8:46 AM PST
- Script overlay has been temporarily disabled to prevent issues. ~ 7/6/2025 10:25 AM PST
- Full Changelog: v1.9.9...8ee2844
- Warning: The script overlay is currently not working right (minus on a command). I am working on a fix. For now do not use this function.
Version 1.9.8
- Important bug fix for
pchtxt2ipsconversion not properly naming the ips files.- This issue came up because of the
NO_FSTREAMdirective change in v1.9.7 (was not properly handled). - Side-note: Conversion of pchtxt's in v1.9.7 is bugged so v1.9.8 is recommended (for usage with
Mod Alchemist).
- This issue came up because of the
- Various UI improvements to the widget.
- Widget text are now centered instead of aligned to the right.
- New widget backdrop implementation for highlighting the widget region with a uniform rounded rectangle.
- This makes the widget easier to see with certain wallpapers, or transparencies.
- Located in
UI Settings > Widget(on by default). - New theme color settings
widget_backdrop_colorandwidget_backdrop_alpha.
- The default theme has some new color changes.
- For changes to be applied, users must re-apply the default theme in the settings menu.
- There are also a couple minor changes in
ultra.ini.
- Screenshot opacity implementation has been cleaned up.
- Longer opacity delay as well as cleaner click and release state handling.
- Shake highlight implementation bug fixes and top / bottom of list triggering.
- Clicking left on the overlay page or right on the packages page now triggers the shake highlight effect (like before v1.9.7).
- Holding down / up and hitting the last / first item will now triggers a shake highlight in the direction you are traversing from (new).
- Bug fix for certain theme color changes not fully being applied after application and returning to main menu.
- Rendering methods have been optimized again (very slightly faster than v1.9.7).
- Various alignment corrections and bug fixes.
- Full Changelog: v1.9.7...v1.9.8
Update:
- Revert of new screenshot opacity implementation. - 07/03/2024 4:53 AM PST
- The issue was if a capture event gets missed, the opacity might never reset.
- A simpler, better fix is just to set opacity duration to 1.5s.
- Full Changelog: v1.9.8...3c6125a
Version 1.9.7
- Improved
downloadandunzipcommands.- Library
zziphas been migrated tominizipfor improved compatibility (as well as z64 support). - Tested with near 4 GB downloads (FAT32 limit) as well as files within zips.
- Also tested with zips containing thousands of files.
- Library
- Buffer calibrations for
download,unzip,copy, andhexfunctions.- Calibrations have been set for
nx-ovlloaderandnx-ovlloader+based upon available heap memory. nx-ovlloader:- Download: 128 KB read, 32 KB write
- Unzip: 128 KB read, 32 KB write
- Copy: 64 KB read / write
- Hex: 64 KB read
nx-ovlloader+:- Download: 256 KB read, 128 KB write
- Unzip: 256 KB read, 128 KB write
- Copy: 256 KB read / write
- Hex: 256 KB read
- The result is faster downloads / unzips / copying / hexing and less memory issues.
- Optimizations in this revision have lead to more heap memory available overall.
- Calibrations have been set for
- The selection overlay (sourced commands) has been optimized.
- Improved memory management for usage with
nx-ovlloader(base loader).- Base loader will now only draw up to 250 list items to prevent crashes.
- Side-note: Keep in mind that if you have more than 250 items on the page, you will not be seeing everything.
nx-ovlloader+however has this draw limit uncapped.
- Base loader will now only draw up to 250 list items to prevent crashes.
- Improved memory management for usage with
- Library migration for
janssontocJSON.cJSONcompiles smaller and should be faster for the use cases within Ultrahand.
- Now compiled without
fstream(NO_FSTREAMdirective), utilizingstdio.hinstead.- This should be faster and help keep compilation size smaller.
- Optimizations and fixes to various rendering methods.
- The result is very slightly faster rendering than v1.9.6 with less potential issues.
- Across the board optimizations to all
libultramethods.- Improved ini, hex, path, and json functions.
- Bug fixes for
NO_FSTREAMdirective.
- Slight cleanup of lingering visual annoyances within the
Listclass.- This fixes the menu not returning all the way to the top after scrolling.
- Fix for menu auto jumping to top / bottom when pressing into a table at the very bottom / top instead of scrolling to the end.
- Slightly improved table scrolling.
- Removal of unnecessary internal methods.
- Memory leak bug fix for rapid page swaps (faster than it can draw).
- Bottom touch regions have been properly aligned based upon the text.
- This should keep the touch regions clean and uniform regardless of language changes.
- New flag option for disabling the auto update of
nx-ovlloader/nx-ovlloader+during the software update command.- To use this, add a file (can be empty) named
NO_LOADER_UPDATES.flaginto/config/ultrahand/flags/. - Side-note: Be cautious of using this, because once the flag has been added, Ultrahand will not be updating
nx-ovlloader.
- To use this, add a file (can be empty) named
- For interpreter in progress with downloads / unzips / large copies, the bottom menu bar will now display
HideandCancelwith proper touch integration. - Cleanup of
uniqueandsharedpointers inmain.cppto now purely utilize raw pointers instead. - The glyph cache will now be cleared automatically when you enter Ultrahand packages as well as the selection overlay.
- This prevents the glyph cache from getting too large after entering tons of pages. (potential memory leak)
- The
Script Overlaynow displays the package forwarder commands. - New language variable for abbreviated
Overlays, for drawing on the bottom touch region.- This will be helpful for languages with large translations of this word.
- Faster wallpaper loading.
- Removal of all
.reservedeclarations throughout the project.- From extensive testing, it appears that memory reservations have been contributing to heap overload and memory leaks.
- Revert of all
__builtin_memory related methods back to theirstdcounterpart.- For the use cases within the project, the builtin appears to be less ideal since in many circumstances size is not determined during compilation.
- Bug fix for memory expansion toggle.
nx-ovlloader+was not auto-applying upon the first click (with no expansion zips initially installed).
- Bug fix for favoriting / starring overlays not properly utilizing jump menu navigation.
- Various alignment corrections and bug fixes.
- Full Changelog: 907f143...v1.9.7
Version 1.9.6
- New commands
set-json-val/set-json-valueandset-json-key(similar toset-ini-valandset-ini-key).set-json-val <JSON_PATH> <JSON_KEY> <JSON_VALUE>- This will set a value in a json according to a key.
- If the json / key does not exist, it will be auto-created.
set-json-key <JSON_PATH> <JSON_KEY> <NEW_JSON_KEY>- This changes the name of a key in a json
- Will do nothing if the json does not exist.
- Cleanup of all lingering visual glitches during menu navigation.
- No more cursor flicker as pages transition.
- Proper isolation / cleanup of
jumpToItemexecution. - The Language Menu will now also return to the last selected item after a language change (with translations properly applied).
- Updating Ultrahand from the
Software Updatepage will now also update the version label stored in the HBAppStore'sinfo.json.- This will prevent "new update" flags from appearing on the HBAppStore after updating Ultrahand from within itself.
- Side-note: If you don't see the version label on the update command footer before clicking it, the version label will not be updated.
- If HBAppStore does not have the latest version, the store will still say that there is an update available.
- Side-note: If you don't see the version label on the update command footer before clicking it, the version label will not be updated.
- This will prevent "new update" flags from appearing on the HBAppStore after updating Ultrahand from within itself.
- Various alignment corrections (tables, scrollbar, list height corrections, internal
Listcorrections, etc). - Various scrolling related fixes and improvements.
- Various bug fixes and code optimizations.
- Full Changelog: v1.9.5...v1.9.6
Quick update:
- Lingering memory leak fixed for rapid language changes. - 6/23/2025 6:12 AM PST (UPDATE IS RECOMMENDED)
- Last minor bug fix:
- Table drawer wasn't properly updating colors on the main menu. - 6/23/2025 7:55 AM PST
- You'd only notice if you have a table on the page that you are returning to after changing themes.
- Table drawer wasn't properly updating colors on the main menu. - 6/23/2025 7:55 AM PST
- Final fix:
- Rounded rects drawing out of bounds bug fix (like touching next page on Japanese for instance). - 6/23/2025 10:24 AM PST
- This was causing a crash because of my renderer optimizations. Should all be good now.
- Alignments will be corrected in the next version.
- Full Changelog: v1.9.6...907f143
Version 1.9.5
- Forward list caching has been properly implemented.
- This allows
jumpToItemto seamlessly transition during forward navigation (like in v1.9.3, but with no memory leaks).
- This allows
- Refresh commands with
jumpToItemare now moved torefresh-to.- Called
refresh-to <ITEM_NAME> [ITEM_VALUE] [EXACT_MATCH]. - Exact match is an optional
true/falsevalue, set totrueby default.- When false, it will check if the value / versions are contained within the strings rather than an exact match.
- Called
- Various fixes to scrolling as well as table scrolling.
- Fixes to download commands using a completion timeout (cancelling downloads early).
- This completion timeout was added by mistake and could make downloads of large files fail.
- New language
Ukrainianhas been added. - Additional key combos have been added to the combo list.
- Table wrapping alignments have been corrected.
- Various bug fixes and corrections.
- Full Changelog: 6d027f9...v1.9.5
Version 1.9.4
- Several critical memory leaks have been properly addressed.
- Memory leaks can cause crashes when the heap gets overloaded.
- This was especially noticeable with extremely long menus or long chains of commands (like download and unzip).
- The prior frame caching implementation needed to be reworked / revised.
- Potential broken / dangling pointers not properly being managed / cleared.
- Backwards caching works fine, but forward caching of prior frames with
jumpToItemneeds to be revised in the next release to prevent the menu from briefly flickering into view.
- Directory path caching has been completely removed (an unnecessary "old" implementation).
- Various tweaks to
libultrafunctions for improved reliability.
- Memory leaks can cause crashes when the heap gets overloaded.
- Implementation of a
Font Managerclass intsl::gfxwith a universal glyph cache for better memory management acrossdrawStringandcalculateStringWidthmethods.- All
drawStringmethods and have been reconsolidated. - Fixes for alternative fonts were also implemented.
- All
- Complete rework of the prior scrolling implementation for smoother scrolling navigation.
- Table scrolling for subsequent tables has been fixed (was not working properly in v1.9.3).
- Table scrolling is also a lot smoother than before, with proper velocity interpolation.
- (NEW) Dropdown commands (normally empty command blocks) can now be written with
;mini=truefor making mini dropdown menus command forwarders. - Various alignment corrections, selection text color corrections, method optimizations and bug fixes.
- Full Changelog: a592584...v1.9.4
Quick Update:
- Ini placeholder bug fix.
- Certain ini placeholders replacements were not being properly handled within the source replacement functions.
- This likely affected
Reboot Tofor certain entry names inhekate_ipl.ini.
- Full Changelog: v1.9.4...6d027f9
Version 1.9.3
- Menu navigation has been significantly cleaned up utilizing the new jump to item implementations.
- Returning to the exact overlay entry you launched on the menu (on both the
OverlaysandHidden Overlayspages). - Auto navigation to the checkmark on dropdown selections.
- Page caching for smoother page to page transitions.
- Left to right page swaps now have seamless transitions.
- Returning to the exact overlay entry you launched on the menu (on both the
- New
Show Hiddentoggle inSettings > UI Settings > Miscellaneous > Menu Items.- This will hide your hidden tabs on the
OverlaysandPackagespages. - Hidden overlays with
Show Hiddenset to off will also have their launch combos blacklisted. - This should be useful for giving your device to a kid to play without having them mess-up something critical.
- This will hide your hidden tabs on the
- Numerous across the board code optimizations.
- Slightly faster rendering than v1.9.2.
- Tables will now only poll new values when placeholders are present.
- Complete cleanup of alignments (including table alignments).
- Complete cleanup/rewrite of the
Listclass inlibteslafor seamless menu navigation. - Various touch scrolling bug fixes (especially for touch scrolling on tables, then resuming with controller input).
- Jump menu navigation can now be used in packages (expansion of
refreshcommand).refresh <ITEM_NAME> [ITEM_VALUE]will auto-return the cursor to the item that fits the match.ITEM_VALUEis optional and does not have to be defined.ITEM_NAMEis only optional with a blank string as its value, i.e..
- Numerous bug fixes and corrections.
- Full Changelog: v1.9.2...v1.9.3
Update: (Users should run update again for proper polling isolation.)
- New
;polling=table header (true/false) for placeholder polling. (falseby default)- This will make it easier for users to manually specify when placeholder polling should be enabled.
- Notice: Projects leveraging placeholder polling will need to set
;polling=trueon their table commands.
- Full Changelog: v1.9.3...a592584
Version 1.9.2
- Restoring of debug logging.
- This caused issues in rare test cases, using the
USING_LOGGING_DIRECTIVEset to 0 (off). - Debug logging needs to be consolidated more (later).
- This caused issues in rare test cases, using the
- Opacity bug fix.
- This caused wallpapers to hit opacity before the rest of the items, making screenshots look weird. All fixed now.
- Jump menu navigation from clicking up at the top of the list bug fix.
- This caused multiple "up" clicks to get stuck on the last item on the list initially for the second
upclick. Also fixed.
- This caused multiple "up" clicks to get stuck on the last item on the list initially for the second
- Slight refinement to the
up/downjump menu navigation. - Threshold for successive clicks has been set from 150ms to 100ms for smoother navigation.
- Full Changelog: v1.9.1...v1.9.2
Version 1.9.1
- Significant rendering improvements in
libultrahand/libtesla(again).- Faster string rendering (with safeguards) as well as rendering of other objects.
- Faster glyph lookup (for drawing strings).
- Safe optimizations to critical rendering components (considerable improvements).
- 60fps now works on 918 MHz CPU with wallpapers.
- 60fps also works with 714 MHz CPU without wallpapers.
- 612 Mhz CPU without wallpapers is now very close to 60fps with it rendering 60fps on certain menus.
- Bug fixes for left to right scrolling text (long ListItem text) not returning to its original position before restarting.
- Rewrite of the
Listclass inlibteslato properly allow jump menu navigation.- When at the top of the menu and
upis pressed, the cursor will now automatically go to the bottom most item. - When at the bottom of the menu and
downis pressed, the cursor will now automatically go back to the top. - When
Lis pressed, the cursor will jump to the top of the menu. - When
Ris pressed, the cursor will jump to the bottom of the menu.- All jump menu implementations works on menus with ListItems and tables, or even just tables.
- Complete rewrite of the table scrolling implementation for smoother scrolling and less potential issues.
- When at the top of the menu and
- Fixes to table drawing implementations.
- All tables are now
;scrollable=trueby default with proper scrolling implemented.- This property will eventually be removed, as well as the other scrollable properties.
- All tables are now
- Download commands now have a 10s timeout.
Software Updatenow removes the version label if it cannot pull the latest version details from GitHub.- This will prevent people thinking an older version of the overlay is the latest.
- Slight cleanup of debug
logging. - Beta for nx-ovlloader+ v1.1.1 is now live (not linked to
Updatefor now for testing).
What's Changed:
- Tweak for dist target by @impeeza in *232
- Full Changelog: 215e878...v1.9.1
Version 1.9.0
- Title ID polling bug fixes in
libultrahand(cleanup of the foreground fix implementation).- Before it was using old / outdated service calls for pulling the title ID.
- This issue appears to have caused crashes on certain switch environments according to users.
- Various code optimizations in
libultrahand.- Rendering is slightly faster now than v1.8.9.
- Removal of
chronofor libnx alternatives.
nx-ovlloader/nx-ovlloader+have been re-compiled.- Full Changelog: becd070...v1.9.0
Update:
- Slight bug fixes with
libcurlinitializations (revert of changes). setNextOverlaybug fix for overlay filename launch arguments. - 06/07/2025 10:30 PM PST- Bug fix for text extending off the screen causing crashes (like in lang file
es.json). - 06/08/2025 6:07 AM PST - A more elegant solution will be applied later to speed up the rendering a pinch.
- Full Changelog: v1.9.0...215e878
Version 1.8.9
- Significantly improved rendering has been applied to
libultrahand's customlibteslafork.- This now allows for 60fps wallpapers on stock CPU clock speeds.
- CPU
714 MHzunder-clock without wallpapers should now render at 60fps as well. - CPU
612 MHzunder-clock is not quite at 60fps yet, but on various pages it can get pretty close.
- A new bug fix for input isolation failing (foreground bug) on changing titles has also been applied to
libtesla.- This should prevent overlays compiled with
libultrahandfrom losing their input focus on the menu when a game starts up.
- This should prevent overlays compiled with
- Various optimizations to
drawTable(the table drawing method). - Full Changelog: v1.8.8...v1.8.9
Update:
- Slight cleanup of
libtesla. - Revert of some of the cleanup changes. (bug fix for scrolling text)
- Full Changelog: v1.8.9...becd070
Version 1.8.8
- New
Key Comboimplementation for launching any overlay.- Located in the overlay settings menu (
Yon an overlay). - This lets you set any overlay to any key combination (excluding your Ultrahand
Key Combo). - When setting an already used combo, combos set for overlays with the same combo are removed.
- Very useful for quickly launching any overlay without invoking the
Ultrahand Overlaymenu.
- Located in the overlay settings menu (
- Default theme table info color has been changed.
- For changes to apply to the default theme, users must re-apply the default theme in the theme selector on the settings menu.
- Fixes for
slotcommands to render the updated footers instead of a checkmark. - Long tap on commands now invoke the
ScriptOverlay.- This makes all options of the menu fully accessible now via touch.
- Bug fix for new packages and overlays not initially being listed with names until the menu reloads.
- Slight code optimizations.
- Full Changelog: v1.8.7...v1.8.8
Version 1.8.7
- Bug fixes for
file_sourcetoggles.- There were issues with
file_sourcenot being properly resolved with subsequent clicks tofile_sourcetoggles. - Issues should now be resolved.
- There were issues with
- Sorting related bug fixes for command grouping
split5. - New method
flagfor generating empty text files with the name of files/folders within a directory- Called
flag <input_path_wildcard_pattern> <output_dir>. - Might not be particularly useful in most cases, but it is essential for proper management of active contents mods within
Mod Alchemist.
- Called
- Tweaks / improvements to
dangerous patterndetection.- Patterns with multiple
*next to each other (i.e.**or***, etc) are now considered dangerous and will return a failed command formoveanddelete. null*and*nullare also considered to be dangerous patterns (failed placeholder replacements).- Cleanup of failed placeholder replacements to return
nullinstead of empty values when necessary.```
- Patterns with multiple
ScriptOverlay(minus on a command) related bug fixes.- Slight corrections to
compareas well assplitandsliceplaceholder methods. - Slight code optimizations.
- Full Changelog: 06f9666...v1.8.7
Version 1.8.6
- Tables now render live values with placeholder replacements.
- Values will poll / update once every second.
- New
backcommand implementation for simulatingBack/KEY_Bbutton press. filtercommands now accept wildcard patterns for more advanced filtering of source inputs.- New command grouping (
;grouping=) optionsplit5. (similar tosplit3except it works on the folder containing the file/folder).- Side-note: All command grouping modes will eventually be renamed to avoid confusion.
- Title ID placeholders
{title_id}now work within source function definitions. pxhtxt2ipsconversions now create an empty title ID text file within the folder where the IPS mod is generated.- This feature is necessary for proper management of active mods within
Mod Alchemist. - The title ID is read from the comments within the
.pchtxtfile (already necessary for pxhtxt2cheat conversions). - All IPS mods must be regenerated for this file to be generated. Otherwise IPS mods will not register within the
Activetabs onMod Alchemist.
- This feature is necessary for proper management of active mods within
- Various menu traversal related bug fixes.
- Various bug fixes within
libultrahand. - Full Changelog: v1.8.5...v1.8.6
Update:
- Slight bug fix with menu traversal.
- Full Changelog: v1.8.6...06f9666
Version 1.8.5
- Critical bug fixes for decimal to hex conversions.
- Updates to all
devkitprorelated libraries. - Full Changelog: 2f3a5b6...v1.8.5
Version 1.8.4
- Various bug fixes to
isDangerousCombination(dangerous pattern detection). Certain wildcard patterns were being flagged with the old implementation that should not be.- This fixes
exeFS Groups'sEnable AllandDisable Allcommands inMod Alchemist.
- This fixes
- Bug fixes for the
ScriptOverlay(minus on a command) where./placeholders were not being properly replaced with the package folder for commands. - Various logging related bug fixes. (default log is currently set to
sdmc:/switch/.packages/log.txtwhenloggingis enabled) - Tweaks to
decimalToHeximplementations inlibultrato manually specify byte group size (byte_group_size 2 = XX, byte_group_size 4 = XXXX, byte_group_size 6 = XXXXXX, etc). This should resolve problems related to a decimal value of 0. Default byte_group_size is 2, then will be assumed according to the decimal value if greater.hex-by-custom-decimal-offset <file_path> <custom_pattern> <offset> <decimal_data> [byte_group_size]hex-by-custom-rdecimal-offset <file_path> <custom_pattern> <offset> <rdecimal_data> [byte_group_size]hex-by-decimal <file_path> <decimal_data_to_replace> <decimal_data_replacement> [byte_group_size] [optional_occurrence]hex-by-rdecimal <file_path> <decimal_data_to_replace> <decimal_data_replacement> [byte_group_size] [optional_occurrence]{decimal_to_hex(decimal, byte_group_size)}or{decimal_to_hex(decimal)}
- Sidenote: For usage of
optional_occurrence,byte_group_sizemust be specified. - Full Changelog: v1.8.3...v1.8.4
Update:
- Pull Request *5 got deleted in
libultrahandfor some reason, sorespect @disabled flag pchtxtfunctionality has been restored. - Fixes to various hex method calls (some got broken with the update). - 06/26/2025 6:04 PM PST
- Full Changelog: v1.8.4...2f3a5b6
Version 1.8.3
- New toggle option
Dynamic LogoinUI Settings > Miscellaneousfor enabling / disabling the dynamic logo effect. - Various fixes to
libultrahand.- Launch combo is read from the
tesla.iniifultrahand.inidoes not exist for overlays compiled with libultrahand. (bug fix) - Fix for converting pchtxt's with embedded comments as well as a couple other tweaks.
- Subtle UI corrections / improvements.
- Launch combo is read from the
- The memory indicator on the
Systempage now shows the true memory (no longer -8MB) and has custom coloring.- New theme colors
healthy_ram_text_color,neutral_ram_text_color, andbad_ram_text_color.- Healthy is >= 9MB.
- Neutral is < 9MB, >= 3MB.
- Bad is < 3MB.
- New theme colors
- Various minor tweaks.
- The pre-generated package.ini now has symbols on some of the
Reboot Tocommands and theShutdowncommand. - The
ultra.initheme that is installed when updating has been updated to use white text color. - The
ultra-blue.initheme that is installed when updating is now the oldultra.initheme color.
- The pre-generated package.ini now has symbols on some of the
- Full Changelog: d448e61...v1.8.3
Version 1.8.2
- New
Page Swaptoggle for swapping the overlays and packages page locations.- Located in
Settings > UI Settings > Miscellaneous > Effects > Page Swap. - This feature will draw the packages menu on the left and the overlays menu on the right when enabled.
- Located in
- Fixes to
libultrahandfor preventing screenshots from occurring during capture event initializations.- This is particularly useful for isolating actual capture button events from initializations within projects like bitmap-printer / PNGShot.
- If using
bitmap-printer, it is currently recommended to use a version built with pull request *25 or else there will be dragons (unwanted screenshots in theBitmapsdirectory generated every time alibultrahandcompiled overlays is opened). - If using
PNGShot, it is currently recommended to use a version built with pull request *5, however builds from latest source code on the repo should now work as well without producing unwanted screenshots.
- If using
- Notice:
- All projects built with
libultrahandwill need to be recompiled with latestlibultrahandfor this fix to apply.
- All projects built with
- This is particularly useful for isolating actual capture button events from initializations within projects like bitmap-printer / PNGShot.
- Full Changelog: v1.8.1...v1.8.2
Update:
- Fixes for returning to overlay menu after exiting overlay with
Page Swap. - 11/05/2024 3:06 AM PST - Touch selection fixes for left / right page with
Page Swap. - 11/05/2024 3:33 AM PST - Dangerous pattern tweak for wildcard patterns within the
Albumfolder. - 11/05/2024 6:42 PM PST - Full Changelog: v1.8.2...d448e61
Version 1.8.1
- New package header
;show_version=is an optionaltrue/falseoption for forcing the menu to show the package version instead of the current section title under the package title. (falseby default) - Various bug fixes.
- Fix to
Software Updatecommand andMemory Expansionto downloadnx-ovlloader/nx_ovlloader+v1.0.8 instead of v1.0.9 if AMS version is < 1.8.0. - Fix for forwarder footers being updated when they should not be.
- Fix for table with
nullvalue replacements not correctly aligningNot available/UNAVAILABLE_SELECTIONtext properly. - Fix for combo labels not being converted to their icon counterparts upon initialization.
- Fix to
- Full Changelog: v1.8.0...v1.8.1
Version 1.8.0
Introduction of new
true/falsecommand options;mini=and;selection_mini=for usage of "mini" ListItems.;mini=truewill enable mini mode for the ListItem. (falseby default);selection_mini=truewill enable mini mode for the dropdown selection ListItems. (for*commands;falseby default)
Introduction of new command
volumeto control the system master volume level, calledvolume <PERCENTAGE>where<PERCENTAGE>is an integer value from 0 to 150.Users can create a volume level slider similarly to a brightness level slider.
[Volume Level] ;mode=trackbar ;min_value=0 ;max_value=150 ;units=% ;on_every_tick=true volume {value}- Side-note: Max volume scale has been capped at 150%. Will only scale the current active system volume level (not modify it).
Package forwarder commands will now update footer labels when modified from within the forwarder package.
Option footers will now be automatically loaded from the
config.iniupon command success instead of returning a checkmark.Expansion of
timestampplaceholder argument to include%ffor fractional seconds.Basic timer example:
[Timer] ;mode=option ini_file ./config.ini try: set-ini-val ./config.ini Timer stop {timestamp(%s.%f)} set-footer {math({ini_file(Timer,stop)}-{ini_file(Timer,start)})}s remove-ini-key ./config.ini Timer start try: set-ini-val ./config.ini Timer start {timestamp(%s.%f)} set-footer ●
Various code / compiler optimizations for smaller compilation size.
Various bug fixes and subtle UI corrections.
- Max value bug fix for regular track-bars.
- Fixes to
mathplaceholder operation parsing. set-footerfornullvalues will now return a failed command.
Version 1.7.9
- Complete rework of the
Script Overlay(-/minuson a command).- Users can now preview command blocks and execute would be executed commands on the
Script Overlay. - All command objects are now compatible.
- Users can now preview command blocks and execute would be executed commands on the
- Package header routing has now been implemented.
- This will make it easier for users to tell where they are within the menu when navigating through packages.
- Ultrahand's overlay development libraries have now been moved to libultrahand.
- Numerous improvements have been made within
libultrahandto make recompiling overlays easier. - Users can also use these libraries for their own overlay development, or to rebuild other Tesla overlays with Ultrahand features.
- A number of overlays have been rebuilt as examples. (see Build Examples)
- Numerous improvements have been made within
- Introduction of new theme colors.
default_overlay_colorfor specifying the default title color for overlays compiled withlibultrahand.default_script_colorfor specifying the default title color for theScript Overlay.
- Various fixes to track-bars.
- Users can now also click
Ato apply track-bar settings. - Users can hold
Ron top of an unlocked track bar to enable changing pagesleft/right(using D-Pad). - Fixes to rapid left / right clicks.
- Fixes to text alignments.
- Color swap for cursor over locked / unlocked trackbars.
- Various touch related bug fixes.
- Users can now also click
- New table drawing options and various improvements to table rendering.
;wrapping_mode=can be set tonone,char, orwordfor tables. (default isnone);wrapping_indent=can be set totrueorfalsefor drawing an indent on the wrapped lines.- Notice: Wrapping modes will only be applied to the section text on the table.
- Software update command now updates
nx-ovlloader/nx-ovlloader+as well as the included themes.- nx-ovlloader+ has been updated for HOS 19.0.0 support.
- Notice: This update is required for proper reading of device FUSE data.
- nx-ovlloader+ has been updated for HOS 19.0.0 support.
- Fixes for drawing the overlays / packages menu for newly added overlays / packages.
- Various UI corrections / improvements and code optimizations.
- Wallpapers now consume half the system memory they used to.
- Text width computations are now fixed. This should allow Ultrahand to display other fonts and languages more properly.
Update:
- Bug fix for
nx-ovlloader+/nx-ovlloaderlatest release URL. (was set to v1.0.8 instead of latest) - 10/19/2024 4:57 AM PST- If you already updated to v1.7.9 with the "Software Update" menu, you may want to click update 2x. (first update will pull the fixed ovlmenu, second update will pull the correct loader)
- Cleanup of package header route labels. - 10/19/2024 6:25 AM PST
- Full Changelog: v1.7.9...367a0bb
Version 1.7.8
Fix for display underscanning in libtesla.
- Overlays will need to be rebuilt with this fix for them to also have no issues with display underscan. (see Edizon as an example)
New command expansion for
backlightcalledbacklight auto(which takes parameteron/off) for controlling theauto screen brightnessfeature.backlight auto onwill turn on the auto brightness feature.backlight auto offwill turn off the auto brightness feature.- Example toggle:
[Auto Brightness] ;mode=toggle on: backlight auto on off: backlight auto off
New placeholder function
mathto resolve mathematical expressions.- Called
{math(MATH_EXPRESSION)}whereMATH_EXPRESSIONis a mathematical expression like1+1,(5+4)/9, etc. - Can also be called
{math(MATH_EXPRESSION, true)}wheretrueforces the output to always be an integer. - Users can use
+,-,/,*,%as well as brackets(and)within their mathematical expressions.
- Called
New placeholder function
randomto generate a random integer.- Called
{random(START_VALUE,END_VALUE)}.
- Called
New placeholder function
lengthto compute the length of a provided string.- Called
{length(STRING)}. - Any white spaces on the left and right of the string will be trimmed.
- Called
Placeholder replacement order of operations fix.
- Users can use nested placeholders called in any sequence now.
Removal of old
progress animationUI setting.- Mostly unused, and a bit out dated in terms of design preferences. I think it is better for now to remove this feature.
Bug fix for touch with trackbars.
- Issue was that sliding to the left of the slidable area caused the value to become the max value for the slider.
- This should no longer be an issue.
Various subtle UI tweaks.
Update:
- Placeholder replacement bug fix. - 09/30/2024 3:06 AM PST
- Full Changelog: v1.7.8...aabb4e7
Version 1.7.7
- New table scrolling implementation.
;scrollable=is atrue/falsetable parameter for initializing a table with a scrollable property (falseby default).;top_pivot=is atrue/falsetable parameter for making the top of the table have a selectable property (falseby default).;bottom_pivot=is atrue/falsetable parameter for making the bottom of the table have a selectable property (falseby default).- A variety of modifications were made to properly handle table scrolling (for touch / click both above and below scrollable tables).
- Tables can now use
list_file_sourcefor reading raw text files directly into a table and displaying the text line by line.- Called
list_file_source <PATH_TO_TEXT_FILE> - Text is drawn in the section portion and can utilize
;section_text_color=for alternative coloring.
- Called
- Various UI related tweaks and fixes.
- Full Changelog: d016b6f...v1.7.7
Update:
- Slight table scrolling bug fix. (was miscounting the last step) - 09/15/2024 3:30 AM PST
- Full Changelog: v1.7.7...73b10bd
Version 1.7.6
- New symbol placeholder variables.
{A},{B},{X},{Y},{L},{R},{ZL},{ZR}: Button symbols for A, B, X, Y, L, R, ZL, and ZR.{DUP},{DDOWN},{DLEFT},{DRIGHT}: Directional pad (D-Pad) buttons symbols.{LS},{RS}: Symbols for the left stick (LS) and right stick (RS) click buttons.{PLUS},{MINUS}: Symbols for the Plus and Minus buttons.{UP_ARROW},{DOWN_ARROW},{LEFT_ARROW},{RIGHT_ARROW}: Arrow symbols pointing up, down, left, and right.{RIGHT_UP_ARROW},{RIGHT_DOWN_ARROW},{LEFT_UP_ARROW},{LEFT_DOWN_ARROW}: Diagonal arrow symbols indicating direction combinations.{POWER}: Power button symbol.{HOME}: Home button symbol.{CAPTURE}: Capture button symbol.{REFRESH_SYMBOL}: Refresh symbol.{WARNING_SYMBOL}: Warning symbol.{INFO_SYMBOL}: Information symbol.
- New progress symbol throbber implementation. (for commands in progress that do not utilize the progress percentage)
- Toggle-related bug fixes. (bug was introduced in v1.7.5)
- This should resolve issues a number of issues with toggles not retaining their state after being clicked.
- Storage capacity in
Device Infohas been corrected. (was previously showing free space instead of the amount of space being consumed) - Slight UI corrections.
- Various code optimizations.
- Full Changelog: 3801fca...v1.7.6
Update:
- String formatted combo symbols replacements for tables. - 09/10/2024 09:08 PM PST
- Slight tweak to throbber implementation (slightly more optimized). - 09/10/2024 09:46 PM PST
- Arrow symbols fix. (some were mis-mapped) - 09/11/2024 09:00 AM PST
- Full Changelog: v1.7.6...d016b6f
Version 1.7.5
- Introduction of new
Swipe to Openfeature (an alternative toKey Combofor opening Ultrahand).- This feature is now on by default, but can be toggled off in
Settings > UI Settings > Miscellaneous > Effects > Swipe to Open. - To trigger a swipe launch, swipe your finger from off the screen inwards ~1.5cm from the side where the menu is being drawn (left by default or right) in < 150ms.
- Note: It should be relatively hard to trigger by accident even if you play touch sensitive games, but still easy enough to launch any time you try.
- This feature is now on by default, but can be toggled off in
- Introduction of new placeholder variable
{title_id}for returning the title ID of the currently running game / application.- Will return
nullif a game / application is not open. - This placeholder should allow some more complex packages to be made.
- Will return
- Root package folder
exit_package.iniwill now have commandexitonly ran when Ultrahand (and any other running overlay) is completely closed. - More bug fixes and code optimizations.
- Clean-up of progress percentage implementation.
- Reduction of string copying for various string functions. (faster commands, less memory)
- Full Changelog: 0ef1c3a...v1.7.5
Update:
- Slight tweak to
Swipe to Open. - 09/09/2024 03:19 AM PST lang.ziptranslations update. - 09/09/2024 05:24 AM PST- Bug fix for update languages (menu was triggering unnecessary reload). - 09/09/2024 05:36 AM PST
- Full Changelog: v1.7.5...3801fca
Version 1.7.4
- Introduction of
exit_package.ini(similar toboot_package.inibut with command nameexitinstead ofboot).Exit Commandsare now a toggle-able option for package settings. (on by default)- The
Boot Packagetoggle has been renamed toBoot Commands.
- The
exit_package.inican go in/switch/.packages/or be used in/switch/.packages/<YOUR_PACKAGE_NAME>/.- When present in package root path, exit commands will be ran every time you close Ultrahand.
- When present in an Ultrahand package, exit commands will be ran every time you close the package.
- Temperature widget calls are now read directly from
i2cinstead ofts/tcservices.- This should help prevent any conflicts that may have arrises from usage with
ts/tcin prior versions.
- This should help prevent any conflicts that may have arrises from usage with
- Refinement of tap and hold functions.
- Holding on a package/overlay for > 0.3s, <= 1.0s then releasing will trigger the Settings key.
- Holding on a package/overlay for > 1.0s then releasing will trigger the Star key (favorites key).
- Introduction of
Right-side Mode. (located inSettings > UI Settings > Miscellaneous > Effects)- This feature will draw the Ultrahand menu on the right side of the screen instead of the left.
- Updating Ultrahand will now auto-reload the newly installed version when returning to the main menu after.
- New table command options
;start_gap=and;end_gap=(same as;gap=) for manual aligning of tables. - More details have been added to the Commands Documentation.
- Various UI tweaks / corrections.
- Various bug fixes and code optimizations / cleanups.
- Full Changelog: 28e239f...v1.7.4
Update:
- Software update menu bug fix. - 09/07/2024 6:23 AM PST
Right-side Modetouch fixes. - 09/07/2024 7:48 AM PST- Full Changelog: v1.7.4...0ef1c3a
Version 1.7.3
- Long tap (touch > 0.5s) of an overlay / package on the main menu will now open the overlay / package settings menu upon release.
- Fuse data is now reloaded / re-dumped upon boot.
- New
true/falseoptiondisable_reloadis now stored infuse.inifor manual disabling of the fuse data reload function.
- New
- More corrections and improvements to the wallpaper swapping feature.
- Interpreter relevant bug fixes (especially with handing large
boot_package.inifiles).- These fixes should make opening
OC Toolkitfaster as well as fix theBackupandRestorefunctions when used with wallpapers.
- These fixes should make opening
- Few additional minor bug fixes.
- Important: Fuse data has new key names, so you may need to reboot once or delete
sdmc:/config/ultrahand/fuse.iniafter updating from v1.7.2. - Full Changelog: 9ff96ba...v1.7.3
Update:
- Slight table text alignment correction. - 09/05/2024 6:10 AM PST
- Various services cleanup. - 09/05/2024 9:35 PM PST
- Temperature calls now only initialize the temperature service when the temperature widgets are enabled.
Reboot Tobug fix introduced from prior modification. - 09/05/2024 10:40 PM PST- Another bug fix (for toggling on widgets). - 09/06/2024 3:30 AM PST
- Full Changelog: v1.7.3...28e239f
Version 1.7.2
- Continued expansion of
Device Infoto now include local IP, eMMC storage, CPU/GPU/SOC Speedo + IDDQ and more.- Fuse related data is auto-dumped to
sdmc:/config/ultrahand/fuse.iniiffuse.iniis missing. - Special thanks to Masagrator.
- Fuse related data is auto-dumped to
- Slight reorganization of
Settings Menu. - More renderer related tweaks and bug fixes. (faster pixel rendering / more FPS)
- Package settings menu now includes a toggle for
Boot PackageandError Logging.- Error logging will now only occur for packages when
Error Loggingis set to anOnstate. (off by default) - Logs will be generated within the package folder in
log.txt. - Root package / root boot package logging will only work with command
logging. - Calls of
loggingcommand will always bypassError Loggingand log errors and commands to the designatedlog.txt.
- Error logging will now only occur for packages when
- New placeholder variables
{cpu_speedo},{cpu_iddq},{gpu_speedo},{gpu_iddq},{soc_speedo}and{soc_iddq}. - New progress indicator bar for visualizing download, unzip, and copy percentages.
- New theme color settings
progress_colorandprogress_alpha.
- New theme color settings
- Return of
shutdown controllersfor manually powering off all connected bluetooth controllers.- This feature still does not work with
Mission Control. Just a heads up.
- This feature still does not work with
- New language variables.
- Alternate languages may still need translations done to the updated
.jsonfiles.
- Alternate languages may still need translations done to the updated
- Updates to libraries
devkitA64andlibnx. - Numerous code optimizations for smaller compilation size and slightly faster commands.
- Various bug fixes.
Update:
- Pre-release period is over. Things appear to be stable. - (09/03/2024 12:27 PM PST)
- Number of memory related bug fixes.
- Corrections to memory ID (got messed up upon initial release).
- Couple logging related bug fixes.
- Copy buffer has been increased to 4x and properly linked.
- Live wallpaper swapping bug fix. - (09/03/2024 3:21 AM PST)
- More live wallpaper swapping bug fixes. - (09/03/2024 4:15 AM PST)
- Tighter/stricter timing for swapping wallpapers to prevent more random crashes. - (09/03/2024 6:28 AM PST)
- Placeholder replacement order of operations bug fix. - (09/03/2024 6:00 PM PST)
- Full Changelog: v1.7.2...9ff96ba
Version 1.7.1
- Expanded
Systempage to include various device related information.- This table currently includes device firmware, bootloader version, hardware type, memory information, and storage information.
- Special thanks to ComplexNarrative.
- New command placeholder variables
{ram_vendor},{ram_model},{ams_version}, and{hos_version}. - Expansion of
refreshcommand to includewallpaperfor the ability to reloadwallpaper.rgba,- Called
refresh wallpaper.
- Called
- Improved scrolling implementation. (proper time-synced speed interpolation)
- Complete recalibration of character width map.
- This should result in more proper table alignments when using tables with info sections aligned to the right.
- Multiple memory related bug fixes.
- More memory leaks have been fixed, which should result in less heap overloads / crashes.
- Language replacements are now performed on every ListItem and CategoryHeader upon initialization.
- This fixed entries like, for example,
Reboot ToandShutdownfrom not being properly translated. - Language json's may still need some translations for the new words that have been included.
- This fixed entries like, for example,
- Removal of
shutdown controllersfor space conservation. (commented out)- Did not want to remove this function, but because it only works with Nintendo controllers (and not Mission Control) it does seem somewhat redundant since the
sync buttonon Nintendo controllers effectively turns off the controller as well. - If it is highly desirable, I may include this command again in future revisions. But for size stability, I could not get it to fit properly this time around.
- Did not want to remove this function, but because it only works with Nintendo controllers (and not Mission Control) it does seem somewhat redundant since the
- Numerous code optimizations and bug fixes.
- Full Changelog: 6961b2e...v1.7.1
Update:
- Placeholder bug fix for new variables + bug fix for
refreshcommand. - 08/28/2024 4:40 PM PST - TrackBar highlight width adjustment / fix. - 08/29/2024 5:05 AM PST
- Rename hardware model
NxtoIcosaandx1toX1. (correction) - 08/29/2024 5:28 AM PST - Full Changelog: v1.7.1...d959363
Version 1.7.0
- New memory expansion option (located inSettings > System).
- This function requires internet the first time it is ran, otherwise you can place nx-ovlloader.zip and nx-ovlloader+.zip in sdmc:/config/ultrahand/expansion/. (see here for the .zips)
- nx-ovlloader.zip (base memory) and nx-ovlloader+.zip (expanded memory) are recompilations of WerWolv's nx-ovlloader 1.0.6/1.0.7.
- Notice: This feature will utilize an extra 2 MB of system memory for overlays and will require a reboot after being toggled for changes to apply.
- New wallpapers implementation. (requires memory expansion)
- Wallpapers must be formatted in .rgba and be exactly 448x720 pixels in resolution.
- Place .rgba formatted wallpapers into sdmc:/config/ultrahand/wallpapers/, then they will show up in the Wallpaper Manager in the Settings Menu.
- Sidenote: For full 60 FPS in Ultrahand with wallpapers, overclock CPU >=1581.0 MHz.
- Numerous optimizations to the libTesla renderer.
- Multi-thread rendering (requires expanded memory).
- Reduced big-O complexity.
- Sidenote: With stock clocks and no wallpaper, users should expect to now get ~60 FPS in menu.
- Various improvements to tables, track-bars and the track-bar highlight/select cursor.
- Time-synced controller scrolling implementation, time-synced click saturation effect, and a variety of corrections within libTesla.
- Mod .pchtxt's now utilize @stop properly when generating IPS mods. (helpful for developers)
- New Polish language implementation and slight bug fixes to the languages menu.
- Various bug fixes.
- Fix for missing pre-generated root package. (was missing in v1.6.9)
- Downloads bug fix. (was broken fi missing path sdmc:/config/ultrahand/downloads/ in v1.6.9)
- Compilation libraries have been updated (excluding devkitA64 which has been left at r25.1-1).
- Full Changelog: v1.6.9...v1.7.0
Update:
- Expanded memory toggle bug fix. 08/24/24 9:00 AM PST
- Full Changelog: v1.7.0...6961b2e
Version 1.6.9
- Dropdown and forwarder commands can now use custom labels/footers by using
footer=with a value other thannullin the package'sconfig.ini. - Custom name and version labels for overlays and packages can now be set in
/config/ultrahand/overlays.iniand/config/ultrahand/packages.iniby using optionscustom_name=andcustom_version=.- Overlays will only be renamed when displayed on the menu. Direct modification of the overlay is still required for any re-naming of the overlay modules themselves.
- Packages will now assume names in the following priorities.
i. Priority 0: Custom names and versions written in packages.ini.
ii. Priority 1: Package name stated in the header in the package.ini file for the Ultrahand package.
iii. Priority 2: If none of the above, it will assume the name based upon the Ultrahand package folder.
- If left empty, custom name and version parameters will be unused.
- New option for table
;header_indent=for drawing a single header indent on left side of the line.- This is meant to be used on one line "header-like" tables.
- New table text color options for
info_text_colorandsection_text_color.text: Ultrahand theme text color used for default text.header: Ultrahand theme text color used for headers.on_value: Ultrahand theme color forOnvalues / values.off_value: Ultrahand theme color forOffvalues / version labels.
- Key combo string representations in packages will now return their symbolic representation.
- Software update menu will now pull an indicator for the latest Ultrahand Overlay version from the GitHub API.
- Themes
classic.iniandultra.iniwill now be auto-downloaded when opening the Theme manager if they do not exist. - Downloads are now stored in a temporary state until completion. After completion, they are then moved into place.
- This should help with failed downloads and files being removed/replaced after a failed download to an existing filepath.
- The packages menu commands section now utilizes the same core logic as the packages themselves. (code optimization)
- Improvements to
Reboot Topre-generated command in root package. (/switch/.packages/package.ini)- If you are missing this feature, you may need to delete
/switch/.packages/package.ini.
- If you are missing this feature, you may need to delete
- Various subtle UI positioning corrections and bug fixes.
- Bug fix for cursor jumping/sliding after using hotkeys (with a d-pad down button) in games.
- Full Changelog: cc7afad...v1.6.9
Version 1.6.8
- Introduction of
ini_file_sourcefunction and expansion ofini_filefunction.- Dropdown selections can now use
ini_file_source <PATH_TO_INI>which will return a list of ini section name. - Introduction of new placeholder index replacements selections
{ini_file(<INDEX>)}/{ini_file_source(*)}for returning section names. (regular usage ofini_fileplaceholder calls will still function the same way, as well asini_file_source)
- Dropdown selections can now use
- Named step-trackbars can now use standard
json_source,json_file_source, andini_file_sourcesource functions and placeholder replacements. - Expansion of
filterto non-path type entries in dropdown selections.- Called
filter <NAME_OF_ENTRY>.
- Called
- Expansion of
exitcommand to exit directly to the overlays menu or packages menu.- Called
exit overlays/exit packages.
- Called
- Expansion of
refreshcommand.refresh theme: reload/refresh the current current loaded theme (/config/ultrahand/theme.ini)refresh package: reload/refresh the current working package (redraws menu)
- Introduction of
comparefunction to compare two text file lists and output a duplicate files list.- Called
compare <PATH_TO_TXT_1> <PATH_TO_TXT_2> <OUTPUT_TXT_PATH>.
- Called
- New option
-copy_filter/-cp_filterformove/mvcommands utilizing-src+-dest.- Called
move -src <SRC_TXT> -dest <DEST_TXT> -copy_filter <FILTER_TXT>. - This will run a copy instead of move for files in the filter list text file.
- Called
- Introduction of new placeholder function
splitfor splitting strings.- Called
{split(<STRING>,<PATTERN>,<INDEX>)}. - For example, if the string is
Test - String, the pattern is" - ", and the index is0, the output would beTest.
- Called
- Updates to the pre-generated
/switch/.packages/package.iniroot package file to includeReboot To(for booting directly into/bootloader/hekate_ipl.iniboot entries.- Notice: Users may need to delete
/switch/.packages/package.inifor it to generate a new one.
- Notice: Users may need to delete
- Various optimizations to the command interpreter, file manipulation logging, bulk execution implementations, and to
move/mvoperations. - Additional tweaks to the dangerous pattern detection function.
- Update to Mod Alchemist now at v0.4.7.
- Bug fixes for toggling content mods with duplicate files (utilizing
-copy_filterandcompare).
- Bug fixes for toggling content mods with duplicate files (utilizing
- Full Changelog: v1.6.7...v1.6.8
Update:
- Filter bug fix. (affected
Reboot To) - 07/22/2024 2:53 PM PST - Addition of
-filter <FILTER_TXT>command option formove,copy, anddelete. - 07/22/2024 8:35 PM PST- This allows for filtering of bulk executions (
-src/-dest).
- This allows for filtering of bulk executions (
- Full Changelog: v1.6.8...cc7afad
Version 1.6.7
New optional command parameters for
copy/cp,move/mv, anddelete/delcommands for transfer logging and bulk executions.a. File manipulation logging:
-log_src/-log_dest(outputs a text list for source file and destination file locations)copy <source_file_path> <destination_file_path> -log_src <src_output_txt_file_path> -log_dest <dest_output_txt_file_path>move <source_file_path> <destination_file_path> -log_src <src_output_txt_file_path> -log_dest <dest_output_txt_file_path>delete <source_file_path> -log_src <src_output_txt_file_path>
b. Bulk execution:
-src/-dest(utilizes text lists to perform transfer operations on all entries)copy -src <src_input_txt_file_path> -dest <dest_input_txt_file_path>move -src <src_input_txt_file_path> -dest <dest_input_txt_file_path>delete -src <src_input_txt_file_path>
Improvements and fixes to
file_sourcetoggle functions.Improved handling of
nullplaceholder replacements.Corrections to
isDangerousCombination(the dangerous pattern combination detection function).- The following paths are now ultra-protected (unable to delete or move files from):
sdmc:/Nintendo/Contents/sdmc:/Nintendo/save/sdmc:/emuMMC/RAW1/Nintendo/Contents/sdmc:/emuMMC/RAW1/Nintendo/save/
- Slight improvements to dangerous pattern detection.
- The following paths are now ultra-protected (unable to delete or move files from):
Updates to Mod Alchemist (now v0.4.6, requires Ultrahand v1.6.7+).
- Now utilizes the new command options for managing "Contents" mods.
Version 1.6.6
- Major memory leak has been fixed.
- This issue was present for a while now, but until
Mod Alchemistwas never as concerning. SinceMod Alchemistcan draw extremely long menus, memory overflow problems became more apparent. - Has been resolved and should result in better memory handling across all Ultrahand packages/commands.
- This issue was present for a while now, but until
- Slight tweaks to the displayed version label formatting for overlays and packages.
- Failed interpreter spawning bug fix.
- Commands would occasionally get locked in an "in-progress" mode when there were memory related problems when trying to spawn the interpreter thread. When memory related problems occur, the command will return a failed command state instead (red "X").
- Full Changelog: 1c08f0f...v1.6.6
Version 1.6.5
- Introduction of root-layer boot package implementation for executing commands upon startup.
- Command
[boot]located within/switch/.packages/boot_package.ini(if it exists) will be now be auto-ran once on startup. - This feature can be useful for Switch Android users if they wanted to remove the auto-generated Android folders (for instance).
- Command
- Introduction of new command
pchtxt2cheat(calledpchtxt2cheat /path/to/file.pchtxt).- This function will convert
pchtxtfiles and load them into the correct directory for the game's cheat. - Important: The game's title ID must be present somewhere within the pchtxt for this function to work.
- This function will convert
- Various bug fixes to
pchtxt2ips's IPS generation. - Expansion of
shutdowncommand to turn off all bluetooth controllers.- This function is called
shutdown controllers. - Notice: I have heard that this command may fail (return a red X) with
MissionControldue to conflicting services, so just a heads up.
- This function is called
- Source function
file_sourcecan now be chained (called one after another) for combining multiple sources into a single list. - Source function definitions can now also utilize an
ini_fileplaceholder replacement (with theini_filespecified before the definition). - Various bug fixes to
file_sourcetoggles.- Subsequent clicks to
file_sourcetoggles are now handled properly with alternating path replacements according to the last linemove {file_source} /destination/path/(must be present forfile_sourcetoggles).
- Subsequent clicks to
- Various bug fixes to
ini_fileplaceholder replacements.- Failed replacements now return
nullagain instead ofNot available(theUNAVAILABLE_SELECTIONlanguage variable). - When a value is
nullon a table info section, it is now auto replaced withUNAVAILABLE_SELECTION.
- Failed replacements now return
- Language selections in the
Settings Menunow state their full names in their translated language with their abbreviations listed as footers.- This included updates to all
/config/ultrahand/lang/files.
- This included updates to all
- Additional key combo
LS+RShas been added to the combos list.- This includes a correction to the
LSbutton icon.
- This includes a correction to the
- Commands
mirror_copyandmirror_deletecan now accept wildcard patterns. - Introduction of new Ultrahand Package
Mod Alchemistdesigned for managing, converting, and installing game mods. (formerly theMod Masterexample package)- Notice: This package requires Ultrahand Overlay v1.6.5+.
- Full Changelog: v1.6.4...v1.6.5
Update:
- Bug fix for the root-layer boot package implementation. - 07/07/2024 7:09 AM PST
- The issue was the commands appeared to be executing every time the overlay is spawned. Now it is fully isolated to run once on boot.
- Wildcard pattern bug fix. - 07/07/2024 9:00 PM PST
- The issue was that in certain cases, folder patterns were still returning files. Should be resolved now.
- Slight optimizations to transfer memory. - 07/07/2024 9:34 PM PST
- Freed up a little more memory to prevent some potential memory related bugs.
- Json replacement failure fall back value bug fix. - 07/08/2024 1:10 AM PST
- This includes fall back
nullrelated bug fixes as well as fixes to table drawing withnullvalues.
- This includes fall back
- Transfer memory correction. - 07/09/2024 05:07 AM PST
- Issues noticed after freeing up a bit too much of the transfer memory, so corrections needed to be made.
- IPS generation bug fix. - 07/09/2024 06:16 AM PST
- Offsets were improperly being applied during
pchtxt2ipsgeneration. Corrections have been made.
- Offsets were improperly being applied during
- Full Changelog: v1.6.5...1c08f0f
Version 1.6.4
- Optimizations to the
;on_every_tick=implementation for track-bars.- Faster on every tick command execution.
- New table option additions
;section_text_color=and;info_text_color=.- Both section and info text color are optional parameters that can be set to:
default(normallydefaultwhen unspecified)warning(new built-in theme colorwarning_text_color)- or any specified RGB888 hex color string
- Both section and info text color are optional parameters that can be set to:
- Forwarder package versions and title colors are now inherited from the layer 0 package (package.ini) if left unspecified within the forwarder package.
- Users no longer need to specify forwarder package versions and colors on every forwarder package ini.
- Bottom buttons and settings menu touch functions now utilize theme colors
click_colorandclick_alphafor drawing highlights on the touch regions. - Various touch interaction bug fixes. (touching "OK" on top of a track-bar, bottom regions for touch adjusted to language text size, etc.)
- Slight tweaks to pixel blender for drawn strings during hiding.
- Full Changelog: 0eeef44...v1.6.4
Version 1.6.3
List of changes:
IMPORTANT: Tables in v1.6.3 no longer utilize
;header=pattern and no longer draw headers. Tables also no longer require a$in the command name.- To define a header, use an empty package command (like how they are defined normally).
Introduction of 3 track-bar command mode implementations.
i. Regular track-bar is called utilizing;mode=trackbar.;min_value=sets the minimum integer value;max_value=sets the maximum integer value;units=sets the display units;unlocked=is an optional true/false parameter for unlocked track-bars (locked by default)- At least one track-bar must first be clicked (A) for all track-bars to be editable (unless unlocked).
;on_every_tick=is an optional true/false parameter for executing listed commands on every track-bar tick (off by default)- By default, commands are executed the moment the interactions with the slider stop.
ii. Step track-bar is called utilizing
;mode=step_trackbar.;steps=is an optional integer parameter for directly specifying the number of steps utilized with the step track-bar.
iii. Named step track-bar is called utilizing
;mode=named_step_trackbar.- Requires a
list_sourcedefinition or alist_file_sourcedefinition (for loading the names). - Does not use
;min_value=,;max_value=,;units=, nor;steps=.
All track-bars commands can be used with placeholders
{value}for returning the value and{index}for returning the index. Both value and index are also stored within the package config.ini file according to the track-bar entry.Introduction of 5 new placeholder commands.
i.{slice(<ANY_STRING>,<START_INDEX>,<END_INDEX>)}slices any string according to a start and end index.
ii.{decimal_to_hex(<DECIMAL>)}converts a decimal string into a hex string.
iii.{ascii_to_hex(<ASCII>)}converts an ascii string into a hex string.
iv.{hex_to_rhex(<HEX>)}inverts the endian of a hex string.
v.{hex_to_decimal(<HEX>)}converts a hex string into a decimal string.Bug fix: All variable placeholders no longer require a specified order for operations.
Optimized input handling for smoother / faster menu item traversal.
New theme colors and updates to theme
ultra.ini.
i.header_text_coloris the text color for category headers.
ii.header_separator_coloris the separator rectangle color for category headers.
iii.star_coloris the color of the favorites star when unselected.
iv.selection_star_coloris the color of the favorites star when selected.
v.bottom_button_coloris the color of the buttons displayed at the bottom of the window.
vi.bottom_separator_coloris the color of the separator drawn near the bottom of the window.
vii.bottom_text_coloris the color of the text drawn at the bottom of the window next to the buttons.
viii.trackbar_slider_coloris the color of the trackbar slider.
ix.trackbar_slider_malleable_coloris the color of the trackbar slider when it is in a modifiable mode (unlocked / press A).
x.trackbar_slider_border_coloris the color of the thin border around the slider.
xi.trackbar_full_coloris the color of the trackbar for the filled portion.
x.trackbar_empty_coloris the color of the trackbar for the empty portion.
xi.default_package_coloris the default color for package titles (used if none is specified in the package header).IMPORTANT: All colors with word
seperatorare now spelt correctlyseparator. (grammer typo fix)Expansion of
backlightcommand.- In addition to
onandoff, backlight can now take an integer percentage value for precise backlight modifications. backlight <PERCENTAGE>
- In addition to
Bug fix for
refreshcommand.refreshshould now behave on the level / page it is called upon.
Improved touch scrolling implementation. (cursor no longer is redrawn as touch scrolling is initiated)
Updated
libnxfromv4.6.0tov4.7.0.Page left / right traversal now works with joysticks in addition to the d-pad.
Various bug fixes and command optimizations.
Update:
- Alignment correction for track-bar sliders and up / down bounce effect for track-bar cursors. (06/14/24 3:45 AM PST)
- Named step-bar tick indicator color and position correction. (06/14/24 3:53 AM PST)
- v1.6.3...0eeef44
Version 1.6.2
List of changes:
- New methods
list_fileandlist_file_sourcefor reading lines from a text file.- They are defined
list_file <path_to_text_file>/list_file_source <path_to_text_file>. - Their behavior is similar to a regular list with placeholders
{list_file(<index>)}and{list_file_source(<index>)}.
- They are defined
- Bug fixes for nested package dropdown selections.
- Opaque screenshots will now be turned on by default upon initialization.
- To disable, enter the
Miscellaneousmenu and click the toggle item.
- To disable, enter the
- Bug fixes for Tesla combo persistence.
- Addition of a couple more default Tesla combos as well as fixes for reading alternate user specified combos.
- Settings menu code revision. (for smaller compilation)
- Various
libteslaalignment corrections.
Update:
- Widget alignment correction. (05/26/2024 2:44 AM PST)
- Couple additional key combos (added by request). (05/26/2024 3:32 AM PST)
- Slight footer alignment correction. (05/26/2024 5:08 AM PST)
Version 1.6.1
- New command mode
;mode=slotfor slot commands.slotcommands are similar todefault, but with the ability to set footers (similar to anoptioncommand).
- Various placeholder replacement bug fixes.
- Preservation of
nullarg with default toNot availableupon final replacement. - Placeholder replacements now no longer contribute to command success/failure. (determined now solely by commands themselves.)
{file_name}replacements no longer include file extensions.
- Preservation of
- Hex edits will now be unprocessed for
nullarguments and still return successful. (bug fix) - New placeholder
{timestamp(<strftime>)}for logging time as a variable.strftimeare datetime formats like"%Y-%m-%d".
- Nested layers bug fix (for nested layers beyond layer 1).
- Package forwarder bug fixes.
- Slight tweaks to libtesla.
Version 1.6.0
- More improvements to UI and libtesla.
- Rending related bug fixes and optimizations.
- Pixel blender bug fix (for transparency layer blending).
- Improvements to string/character length computations.
- Slightly improved cursor and menu layout.
- New themes values
selection_bg_alphaandtable_bg_alphafor blended transparency.- Updates to
default+ultrathemes.
- Updates to
- New effect option
Opaque Screenshots(located in Settings > UI Settings > Miscellaneous) for removing overlay transparency from screenshots for Ultrahand. - Slight improvements to the
unzipcommand method. (boundary case bug fixes)
Version 1.5.9
- More improvements and optimizations to the tables implementation.
- New option
;background=which is atrue/falsevalue for drawing the table background. - New configurable theme color
table_bg_colorfor configuring table background colors.
- New option
- More refinements and optimizations to libTesla.
- Slightly faster rendering + cleanup of various implementations.
- Update to
defaultand ultra themes. - Bug fix for Ultrahand starting opened after shutting down within an overlay. (only present in v1.5.8)
- Bug fix for nested package pages.
Version 1.5.8
- Numerous across the board optimizations and bug fixes. (Significant memory/speed improvements from v1.5.7.)
- Improved code structure and memory consumption.
- Optimized menu item sorting. (for drawing the
overlays/packagesmenu) - Improved themes loading implementation.
- New hiding overlay implementation. (animations + widget throttling correction)
set-ini-valuenow will create folders if necessary when initializing new ini's.- Bug fixes for
moveanddeletecommands. - CURL global initialization. (fix for random crashes using download function)
- Bug fixes for default key combo initialization. (for fresh setups)
- New table implementation for drawing information.
- Table commands must start with
$in the command name and include;mode=table. - Additional options for configuring tables:
;header=is atrue/falseoption for drawing the section header with the table.;alignment=is a string valueleft,right, orcenterfor controlling the value column alignment. (default value isright).;offset=is an integer value for configuring the values column offset with aleft/centeralignment. (default value is160);spacing=is an integer value for configuring the newline spacings for drawing the table. (default value is0);gap=is an integer value for configuring the post-table gap. (default value is3)
- Placeholders are fully functional for drawing tables with parsed values. (json, hex, list, etc.)
- New theme color options
table_section_text_colorandtable_info_text_color.
- Table commands must start with
- New unzip + copy progress indicator.
- Progress animation. (see
Settings > UI Settings > Miscellaneous > Effects > Progress Animation) - Various subtle UI improvements and corrections.
Version 1.5.7
- List of changes:
- New function remove-ini-key for removing key/value pairs from a specified INI section.
- remove-ini-key <path_to_ini> <desired_section> <desired_key>
- Unzip / copy progress indicator for background commands in progress. (similar to the download progress indicator)
- WARNING: cp / copy now behaves more like the Shell / Bash version of cp, where it copies contents from the specified directory directly to the specified directory. it no longer forces a copy of the folder, requiring a potential rename.
- Buffer s and heap memory are now configurable from /config/ultrahand/config.ini. (see new package Memory Config)
- This was added for additional configurations during testing.
- When properly set, functions may gain a speed improvement. But configure with caution.
- Across the board optimizations and code revisions for faster functions with reduced memory.
- Numerous revisions and improvements to libultra.
- Various minor bug fixes.
- New function remove-ini-key for removing key/value pairs from a specified INI section.
- Update:
- Copy folder related bug fix. (05/10/2024 6:51 AM PST)
- hex-by-custom-rdecimal-offset bug fix. (05/10/2024 4:59 PM PST)
- More slight optimizations + bug fixes with hexing. (05/10/2024 11:14 PM PST)
Version 1.5.6
- List of changes:
- Package path shortcuts implementation, called ./ for package path within command ini's.
- i.e. /switch/.packages/<NAME_OF_PACKAGE>/ can now be called as ./
- When fully utilized, this allows users to rename Ultrahand packages without any path conflicting.
- Basic toggles called without sourcing can now take a default state.
- ;mode=toggle?on for defaulting to on when never clicked
- ;mode=toggle?off for defaulting to off when never clicked (current default functionality for ;mode=toggle)
- backlight command now requires a on / off state. (bug fix)
- Here is a simple way to use can the backlight function as a toggle.
- [Backlight]
- ;mode=toggle?on
- on:
- backlight on
- off:
- backlight off
- Numerous optimizations for a variety of the *_funcs.hpp methods. (faster menu drawing and commands)
- New scroll bar implementation has been corrected.
- Returning from a hidden overlay now takes you back to the hidden overlay menu.
- Reduced memory imprint of ovlmenu.ovl.
- Creation of libultra (restructuring of project into a custom library).
- This allows users to potentially build their own Ultrahand Overlays when utilized with my libtesla fork.
- To use, users simply need to copy the libs folder into their project, then import and use libtesla as they would normally.
- Package path shortcuts implementation, called ./ for package path within command ini's.
- Update:
- Hidden package / overlay settings bug fix + setIniFile bug fix. (05/07/2024 5:49 AM PST)
- If you did use v1.5.6 before this update, you might want to run this command once (just to be safe).
- [Clear INIs]
- delete /config/ultrahand/packages.ini
- delete /config/ultrahand/overlays.ini
- delete /config/ultrahand/theme.ini
- delete /config/ultrahand/config.ini
- delete /config/.packages/config.ini
- delete /switch/.packages/*/config.ini
- Path shortcut fix for json_file_source + fix for commands grouped together with a package forwarder. (05/07/2024 4:04 PM PST)
- Wildcard pattern bug fix + move files/folders bug fix. (05/07/2024 8:55 PM PST)
- This may have affected this line from executing properly delete /switch/.packages/*/config.ini. You may still want to run this command once if you used v1.5.6 earlier than the first update.
- More last minute wildcard pattern bug fixes. (05/07/2024 11:19 PM PST)
- Hidden package / overlay settings bug fix + setIniFile bug fix. (05/07/2024 5:49 AM PST)
Version 1.5.5
- List of changes:
- Implementation of new package forwarders for extended Ultrahand packages.
- To use forwarders, use command mode ;mode=forwarder with * in the command name.
- Forwarder package is defined with package_source <PATH_TO_FORWARDED_INI>.
- Additional commands listed along side package_source are executed upon click.
- UI related bug fixes and tweaks.
- Scroll bar implementation has been modified.
- Page alignment has been slightly adjusted.
- Adjustments to spacing of info sections.
- Touch implementation has been cleaned up a bit more.
- Fix for unmapped toggle commands (and others).
- Various minor menu traversing related bug fixes.
- Implementation of new package forwarders for extended Ultrahand packages.
- Update:
- Nested package implementation bug fix. (05/05/2024)
Version 1.5.4
- List of changes:
- Better memory management and utilization of smart pointers. (potential memory leaks resolved hopefully)
- Interpreter thread now is initialized when command is ran.
- Root package commands now accept dropdown commands (similar to the current package command implementation).
- Removal of last_menu setting from /config/ultrahand/config.ini. (no longer needed)
- Setting key combo from the Settings Menu now also updates /config/tesla/config.ini. (for persistence reasons with libTesla overlays)
- Menu traversing related bug fixes.
- Various bug fixes.
Version 1.5.3
- List of changes:
- Removal of <sys/stat.h>/<cstdio> and implementation of <fstream> in every function.
- More improvements to make every function to make them thread safe (json, hex, ini, etc.)
- Slight restructuring of various sections of code.
- Reduction of compilation size.
- Various bug fixes and improvements.
Version 1.5.2
- List of changes:
- Numerous menu related memory leak bug fixes.
- Revision to the background thread implementation.
- Various improvements to download, json, ini, and path functions.
- Bug fixes for refresh function as well as exec boot.
Version 1.5.1
- List of changes:
- Full touch support is now included.
- You can now touch the logo/widget section to enter the settings menu.
- Multi-threading implementation for the interpreter.
- Package commands (except boot_package for now) now operate on a background thread, allowing users to hide the overlay during long tasks. This includes background downloads.
- Introduction of new theme coloring variables. (mostly for commands in progress)
- New ;system= command headers, called ;system=erista or ;system=mariko.
- These headers will only draw commands onto the menu depending upon what system they are being displayed on.
- New file path grouping types (will be better documented later with the revision of Mod Master, now planned for v1.5.2).
- Pressing L jumps back to the first item on the menu.
- Various bug fixes in download_funcs as well as libTesla.
- Full touch support is now included.
- Update:
- Download progress implementation.
- Pressing R cancels / kills a command in progress.
- Many bug fixes.
- New command exit for exiting Ultrahand directly.
- Interpreter optimizations and stability bug fixes. (final update 04/25/2024)
Version 1.5.0
- Introduction of new pchtxt2ips method, called pchtxt2ips <PCHTXT_FILE_PATH> <OUTPUT_FOLDER>.
- This allows the easy conversion of .pchtxt files into .ips binaries.
- Download commands now show a downloading indicator (footer) to help users understand when a file is downloading.
- Failed replacements now return null instead of -1. Failed json replacements now return Not available (UNAVAILABLE_SELECTION variable).
- Bug fix for starring / favoriting hidden overlays and packages.
- libnx has been updated.
Version 1.4.9
- List of changes:
- Numerous refinements to the UI and libTesla.
- (cleanup alignments, rounded corner cursor, corrections to footer draw locations, listItem size, etc.)
- Expansion of the configurable themes.
- New variables for customizing background color, various text colors, logo color, and dynamic logo color.
- New themes light.ini and light-v2.ini (light mode themes) as well as updates for the rest.
- Introduction of DEFAULT_CHAR_WIDTH variable within the language json for more precise mapping of character width in alternate languages.
- Numerous refinements to the UI and libTesla.
- Update:
- Slight default logo color tweak.
Version 1.4.8
- List of changes:
- Improved toggles implementation.
- Toggles no longer require a source and use the pre-generated config.ini for storing state information.
- Sidenote: Dropdown selection toggles still may require revisions to their implementation some time down the line.
- Failed variable replacements now return a value.
- Currently set to -1 for failed replacements, but may be revised to something more unique in the next update.
- Various bug fixes as well as code optimizations.
- This included a footer bug fix (was present in v1.4.6 but missing from v1.4.7).
- More memory related optimizations across a variety of functions.
- Updates to OC Toolkit (now at v0.3.6).
- Sys-clk Settings are now configurable from the Tools menu.
- Improved toggles implementation.
- Update:
- Another bug fix for option command selection footers. - 11/25/23 10:06 PM PST
- libTesla bug fixes (widget drawing related fixes). - 11/26/23 7:00 AM PST
Version 1.4.7
- Numerous code optimizations and revisions across the board for all methods.
- These ranged from bug fixes to stricter/cleaner memory management within functions.
- Especially helpful for downloading command failure related bugs.
- New commands:
- backlight toggles on/off the screen
- hex-by-custom-decimal-offset, hex-by-custom-rdecimal-offset (similar to hex-by-custom-offset but accepts decimal representations of hex for replacement.
- mariko:, erista: define code blocks that will execute based upon if the device is mariko or erista.
- Update:
- Bug fix for mariko: and erista: calls.
- More memory related optimizations. - 11/19/23 6:21 AM PST
- Default Tesla combo bug fix. - 11/20/23 2:40 PM PST
- Overlay sorting bug fix for overlays with _ within overlayNames. - 11/20/23 8:08 PM PST
- Last minute memory related optimizations. - 11/21/23 3:40 AM PST
- Rewrite of Studious Pancake's functions for IsErista and IsMariko. (bug fix) - 11/21/23 5:02 PM PST
- Bug fix for Not available commands in alternate languages. - 11/22/23 6:47 AM PST
- More libTesla optimizations. (faster menu). - 11/22/23 6:47 AM PST
- New clear command clear hex_sum_cache for clearing the hexSumCache. - 11/22/23 7:22 AM PST
Version 1.4.6
- Addition of a toggle-able User Guide (drawn by default on the Packages Menu).
- Reboot directly to Hekate menu now implemented within the reboot command.
- Called reboot hekate or reboot HEKATE (similar to reboot ums).
- Initialization / auto-generation of /config/tesla/config.ini for legacy compatibility.
- This is primarily for preserving hide/show hot keys within overlays.
- You are not required to ever touch nor modify /config/tesla/config.ini.
- Modifications within Ultrahand will automatically carry over.
- Default Tesla launch combo (L+DDOWN+RS) now works upon first run in addition to Ultrahand's default launch combo (ZL+ZR+DDOWN).
- The combo that is clicked first will be the combo that Ultrahand assumes.
- Combo can then be updated from the Settings Menu.
- Version Labels is now a subcategory within Miscellaneous in addition to Menu Items.
- Users can show/hide the User Guide from within Miscellaneous.
- Various bug fixes and implementation modifications.
- Update:
- Slight indentation cleanups.
Version 1.4.5
- New function try: for executing blocks/lines of code with error catching.
- Commands in the chain are still executed normally without try:.
- Subsequent try: statements blocks will be executed in order until success is reached throughout an entire block.
- (See updated examples Easy Installer and OC Toolkit.)
- New highlight color added to themes for "clicking".
- This color will only be applied when the selection background is set to not be drawn.
- When selection background is disabled, clicking backgrounds will also be disabled.
- If any of the lines within the command that involve sourcing, hexing, downloading, or unzipping fail, it will return a red cross symbol instead of a checkmark.
- Various bug fixes.
Version 1.4.4
- Theme manager is now built into the Settings Menu (PLUS / +).
- Themes will have their own custom name and be placed within /config/ultrahand/themes/<THEME>.ini.
- Themes have been expanded to include variables selection_text_color, selection_bg_color, disable_selection_bg and disable_colorful_logo.
- disable_selection_bg is set to true by default. This significantly improves the speed of rendering the UI, resulting in a smoother experience moving around (especially noticeable in the Script Overlay).
- Addition of several extra Key Combo button combinations on the Settings Menu. (ZL+ZR+PLUS, L+R+PLUS, PLUS+MINUS)
- Numerous libTesla bug fixes and optimizations.
- These ranged from improper cropping of certain menu items to correcting draw locations.
- Additional improvements to text scrolling.
- Half float data-type implementations.
- Update: 11/6/23 2:13 AM PST
- Bug fixes for download functions, json_source functions, and Package Info drawing.
- Updates, fixes and expansions to OC Toolkit (now v0.2.9).
Version 1.4.3
- Key combo initialization bug fix (primarily for people not coming from Tesla Menu).
- This bug made an initialized /config/ultrahand/config.ini file not write hotkeys to the ini without Tesla config files.
- Default key combo is now ZL+ZR+DDOWN if no key combo is found and will be auto generated with the config.ini.
- ListItem scrolling is now time synchronized in libTesla.
- When you under clock your device and see a long command name, this is especially noticeable.
- Previous behavior would scroll the text from left to right very slowly when clock speeds go down, then faster when they speed up.
- With time synchronized animation, behavior is standardized, creating an overall smoother experience on the menu. (better resource management)
- Various (minor) fixes and improvements.
- Update: 11/02/2023 10:49 PM PST
- Credits are now an addition in Ultrahand packages, called ;credits= (similar to ;about=).
- Slight cleanup of scrolling implementation.
- smoothing effect has been added to scrolling (for cleaner animation)
- Toggles for "On" and "Off" for Ultrahand Packages now use the active language.
- Credits are now an addition in Ultrahand packages, called ;credits= (similar to ;about=).
Version 1.4.2
- Built with latest libnx for official HOS 17.0.0 support.
- Temperatures are now working on HOS 17.0.0.
- Addition of UI Settings menu. (within Settings Menu PLUS/+).
- Widget for clock, temperature, and battery is now easily toggleable.
- Version Labels has been moved into it's own subgroup.
- Software Update is now its own subgroup with overlay info for Ultrahand as well as language update options.
- Ultrahand Overlay information is now displayed in the Software Update section.
- JSON placeholder replacement functions have been rewritten/improved.
- Various bug fixes and improvements.
Version 1.4.1
- Ini parsing and formatting related bug fixes.
- This fixes issues like the first key in your keyCombo not working in libTesla.
- Also improves formatting structure when adding in entries into ini files.
- Expanded themes and UI improvements.
- Themes (/config/ultrahand/theme.ini) now have options trackbar_color, highlight_color_1, highlight_color_2.
- The /config/ultrahand/config.ini also lets you control visibility of clock, temperatures, and battery.
- libTesla dynamic color effects are now synced to time instead of being driven by clock-speed. You will notice that even when under-clocking the color effects are always full speed.
- RebootToPayload functions via Studious Pancake (AMS 1.6.0+).
- The reboot command has now been expanded with payload / Hekate functionality. This was done in preparation for HOS 17.0.0.
- reboot ini <ENTRY_NAME> or reboot ini <ENTRY_INDEX>
- reboot boot <ENTRY_NAME> or reboot boot <ENTRY_INDEX>
- reboot /path/to/payload.bin
- reboot UMS
- reboot
- sidenote: Reboot by id is coming soon. All of these functions have been coded to work on both Mariko and Erista.
- The reboot command has now been expanded with payload / Hekate functionality. This was done in preparation for HOS 17.0.0.
- Software updates for Ultrahand can now be performed from the Settings menu (PLUS / +).
- Launch arguments for overlays are now passable from /config/ultrahand/overlays.ini.
- You can press Y on an overlay to enter the Overlay settings menu, then enable/disable launch arguments.
- Launch arguments must be set by hand within /config/ultrahand/overlays.ini otherwise are initialized empty.
- Temperature now include both SOC and PCB temperature, but 17.0.0 implementation for temperature is currently still pending on libnx. (soon).
- Backend for implementation has been written and is currently commented out.
- Various updates to languages files (still a WIP).
Version 1.4.0
- Improvements to UI (battery, configurable clock, sensor, drawspace, etc.)
- International languages implementation.
- Language files go in /config/ultrahand/lang/*.json
- NOTE: Help is still needed to get some of these translations down. Language files are subjected to updates, but feel free to modify them yourself for your language.
- Expanded settings menu.
- key combo is now configurable from the Settings menu (PLUS)
- Start of themes implementation (text_color, clock_color, battery_color).
- Themes are stored in /config/ultrahand/theme.ini.
- Improved overlay sorting. (done by Overlay name instead of Overlay file name).
- Multiple bug fixes.
- Faster command interpreter. (update 10/20/23 9:23 PM PST)
- After inspection, this actually resulted a in ~0.4MB file size reduction.
- Sidenote: HOS 17.0.0 messed up temperature readings with libnx. This should be easily fixed once libnx is updated for 17.0.0.
Version 1.3.9
- Star-ing overlays is now done by pressing X instead of PLUS.
- Pressing PLUS on main menu now invokes the Ultrahand Settings menu (a page to control some settings in the config.ini).
- Pressing Y on top of an overlay / package pulls up the Menu settings for that particular item.
- New hidden overlays/packages page for storing hidden overlays/packages (will be drawn at the bottom when populated).
- New option clean_version_labels in /config/ultrahand/config.ini (can be set on Ultrahand Settings menu).
- Clean versions restricts all displayed version labels into a X.X.X format.
- Various bug fixes.
Version 1.3.8
- Introduction of Pages: Now, you can define pages using empty commands [@PAGE1] and [@PAGE2], where PAGE1 and PAGE2 are labels for the page. Note that only two of these empty @-commands can be referenced in a package. You can navigate between PAGE1 and PAGE2 using the left and right buttons on the DPAD.
- New Command remove-ini-section: I've added a new command called remove-ini-section <ini_file_path> <section_name>. This command allows you to quickly remove a section from an INI file.
- Package Info Section: You can now include a Package Info section within your package.ini file by using [Package Info] as an empty command. If there's no reference to [Package Info], the package info section will not be displayed.
- Package title colors now accept custom RGB888 hex representations (i.e. #FFFFFF for white).
- NOTE: RGB888 hex color format will be downscaled to RGB444 for libTesla compatibility.
- Bug Fixes: Addressed various bug fixes, including a memory leak issue on the main menu.
- New updates to OC Toolkit.
Version 1.3.7
- Hex offset caching has been implemented for faster hexing read/write calls.
- Various additional improvements to hex functions.
- New true/false property hide for packages.ini and overlays.ini to toggle visiblity.
- New command logging to enable/disable command logging (now off by default).
- New command clear for deleting Ultrahand relavent files (so far only clear log works).
- New ;color= header definition in package.ini for choosing colors for your package title.
- Colors: red, green(default), blue, yellow, orange, purple, pink, white, ultra(wip)
Version 1.3.6
- Added the ability to define functions in boot_package.ini other than boot.
- Enabled referencing and execution of global functions defined in boot_package.ini from your script using exec <COMMAND>.
- Introduced a new refresh command to redraw the current menu page.
- Various bug fixes as well as improvements to OC Toolkit.
- Menu related bug fix (memory leak). Opening and closing selection overlay with dictionaries was not unloading the dictionary. Issue has been resolved.
- If a command has the footer "Not available" it will no longer function.
Version 1.3.5
- Introduction of boot_package.ini (commands that will run when your package is opened). This file is placed in the same folder as your package.ini file.
- Introduction of new hex_file advanced function for reading/parsing hex data from files.
- Introduction of command tags, i.e. [COMMAND?Tag]. Tags are not printed, but are helpful for making similar named commands unique (which is essential).
- New example package OC Toolkit for advanced modifications of kip files. (WIP)
- Update:
- Ive added a new function ini_file to read data from ini files.
- ini_file <ini_file_path> is how it is defined.
- {ini_file(section, key)} is how it will be called.
Version 1.3.4
- List of changes:
- Empty commands now define grouping sections.
- Empty commands with a * at the start of them define group commands. Commands defined after will show up in a dropdown menu.
- To end the identification of a group command, a group section must be defined.
- New command set-footer.
- Various bug fixes.
- Basic example:
[Section 1]
[*Test]
;mode=option
list_source '(test1, test2, test3)'
set-footer {list_source(*)}
[*Timings]
;mode=option
list_source '(1, 2, 3, 4, 5, 6)'
set-footer {list_source(*)}
[*Commands Group]
[*Test2]
json_source '[{"key_1":"entry 1", "key_2":"entry 2", "key_3":"entry 3"}, {"key_1":"entry a", "key_2":"entry b", "key_3":"entry c"}]' key_1
[Section 1]
[*Test3]
;mode=option
list_source '(test4, test5, test6)'
set-footer {list_source(*)}
- update:
- Bug fix for selected footer after entering command groups. - 10/3/2023 4:48 PM
Version 1.3.3
- List of changes:
- Fixed dropdown toggles. (Setup double click prevention to ensure commands are properly parsed.)
- New option command mode for selections. (useful for developing configurators scripts.)
- New auto-generated config.ini for each package.ini within the package folder. Settings will be parsed from package.ini if provided as a comment.
- mode: this can be set to default, option, or toggle.
- grouping: this can be set to default or split (split splits commands into groups based upon subfolders)
- footer: null by default. When used with option mode, it can be dynamically read on the menu.
- DONE is now replaced by a checkmark.
- Basic Option Example:
- Package: /switch/.packages/Test/package.ini
Version 1.3.2
- Bug fixes with interpreter allocating too much memory.
- This affected unzip and download in certain test cases, but is no longer an issue.
- Easy Installer and other download packages should now work properly again.
- UPDATE: (stable)
- Root menu commands (/switch/.packages/package.ini) now behave the same way as package menu commands.
- Config menu has now been fixed. (09/26/23 11:21 PM)
- Multiple menu related bug fixes. (09/27/23 2:25 AM)
Version 1.3.1
- json_data (the non source version) is now json_file.
- json is now a new non-source version of json_source for storing data within the package.ini.
- list_source has been fixed. Items defined in list can be called by {list_source(<INDEX>)}.
- list is now a new non-source version of list_source. Items defined in list can be called by {list(<INDEX>)}.
- Re-built interpreter and SelectionMenu/SubMenu.
- Introduction of selection modes ;mode=.
- Drop of _on and _off functions.
- Sections can be defined using ;mode=toggle and on: followed by the on commands and off: followed by the off commands.
Version 1.3.0
- config.ini is now package.ini for Ultrahand packages.
- source is now file_source
- source_on is now file_source_on
- source_off is now file_source_off
- json_source is now json_file_source
- New function json_source for defining JSONs directly within the package.ini file.
- Example: json_source '[{"key1":"value1"}, {"key1":"value2"}]' key1
- Menu item sorting are now implemented differently.
- New files /config/ultrahand/overlays.ini and /config/ultrahand/packages.ini for manually specifying priority and storing information.
- Priority value is a number from 0 to 9999
Version 1.2.1
- hide_overlay_versions and hide_package_versions are now true or false options within /config/ultrahand/config.ini.
- hex-by-custom-offset is now a new command for using custom string pattern offsets for more advanced hex-editing scenarios.
- New wildcard source command type list_source implementation for specifying list variables within package inis.
- Several bug fixes.
Version 1.2.0
- Commands now state "DONE" after pressed.
- Bug fix for "set-ini-value". Issue was that for a new entry, it would inject the new entry into every section.
- Simple fix, but since its bound to affect someone's project eventually, I'm updating the release.
Version 1.1.9
- Bug Fixes: Static menu variable and rootFrame handling.
- These bug fixes potentially resolve the menu handling issue that occasionally can occur for some testers.
- Overall it should be more stable with static implementations of the particular variables I modified.
Version 1.1.8
- Introduction of footers for commands.
- Testing potential bug fix for handling menu input.
- This issue is not very common, but occasionally the menu can get locked into a weird orientation, preventing you from moving to packages or overlays at times. Its hard to figure out the exact trigger, but I've attempted to address the issue here. Pre-release will be dropped after more testing. If you see this bug on this version, do let me know in issues.
Version 1.1.7
- Download and unzip files implementation has been added.
- Command to download:
- download <FILE_URL> <DESTINATION_FILE_OR_FOLDER>
- Command to unzip:
- unzip <SOURCE_FILE> <DESTINATION_FOLDER>
- CURL has made it a bit beefier as you can tell, but the potential benefits are pretty great for having these commands handy. Lots of new packages can be made for updating and installing software.
- update: slight bug fix for handling more URLs (07/07/2023)
- update: bug fix for unzip and createDirectories (07/08/2023)
Version 1.1.6
- Move commands now create directory if the directory does not exist.
- Bug fix for exiting main menu that can sometimes occur when exiting (locked users in the menu until an item is selected).
- Multiple filters are now implemented. filter, filter_on, filter_off calls will store your filter path into a list.
Version 1.1.5
- Bug fix for those who specify their default menu mode instead of resorting to last_menu.
- Several cosmetic improvements.
- Easier transition from Tesla Menu by copying combo from sdmc:/config/tesla/config.ini if it exists and the combo is not within sdmc:/config/ultrahand/config.ini.
* update: more cosmetic improvements after initial release (only difference)
Version 1.1.4
- Ultrahand is now a replacement for ovlmenu.ovl.
- Ultrahand packages are now relocated to sdmc:/switch/.packages/.
- Ultrahand specific settings are now stored in sdmc:/config/ultrahand/config.ini.
- Left on the menu takes you to your overlays.
- Right on the menu takes you to your packages and commands.
- More improvements to come.
Version 1.1.3
- Introduction of more selection command features.
- Multi-wildcard statements.
- New functions 'mirror_copy' and 'mirror_delete' for implementing mirror functions on directory contents.
- All copy functions now create destination directories.
Version 1.1.2
- Selection (wild card commands) toggles are now implemented.
- Simple one line filter added. (see updated examples).
Version 1.1.1
- Introduction of wildcard commands (new command-type).
Version 1.10.0
- Pre-release: Testing new hex editing functions.
- New commands "hex-by-offset", "hex-by-swap", "hex-by-decimal", "hex-by-rdecimal"
- Still needs more testing to confirm full functionality, but since it appears to be compiling properly ill leave it here for now for testing.
Version 1.0.9
- Implemented safeguards so you don't delete or move your entire SD card or essential files. Still have more features to implement for this version, it should be better than using 1.0.8 but since I made changes that need review I am still calling it pre-release for now.
- Update: More advanced pattern searching. Multiple wildcards. 2:42 AM PST 06/08/2023
- Update: Updated safeguards for more advanced patterns. 3:16 AM PST 06/08/2023
Version 1.0.8
- Added new feature "new-ini-entry" and restored original example config.ini generated if no config is present.
Version 1.0.7
- Improvements to menu. Version handling for user packages.
Version 1.6
- More improvements, "edit-ini" commands have now been labeled "set-ini". You can also press X on an individual command and see and execute individual lines within.
- Update: Faster copying. - 05/31/23 4:19PM PST
- Update: Even faster copying. - 05/31/23 4:35PM PST
- Update: Slight size reduction. - 06/01/23 6:34PM PST
Version 1.0.5
- Too many bug fixes with statement logic.
- Ability to execute individual commands from a package have been added (press X on package).
- More slight tweaks and capabilities packed into the functions.
- Update: Fixed editINI adding new lines by mistake. - 05/29/23 05:16 PM PST
- Update: Fixed copy directory not copying subdirectories. - 05/29/23 05:59 PM PST
- Update: Edit ini key or value now. - 05/29/23 09:40 PM PST
Version 1.0.4
- Slight tweaks to libtesla. This is pre-release, but it is still commits ahead of 1.0.3 and stable.
- Update: Got new features as well as pattern searching implemented. New documentation coming soon. 05/29/23 9:11 AM PST
Version 1.0.3
- Improvements to code structure, menu layout, new commands (reset, shutdown), etc.
- Update: Copy function now can rename to file as well as copy to directory. This makes it simulate "cp" a bit better. - 05/27/23 7:37 AM PST
- Update: Fixed edit-ini bugs. - 05/27/23 2:21 PM PST
- Update: Fixed even more edit-ini bugs. Should be working. - 05/27/23 3:27 PM PST
- Update: Fixed one last edit-ini bug for handling command. Testing safer reboot method. - 05/27/23 9:40 PM PST
Version 1.0.2
- Folders have now been added.
- Future plans: cleaner UI, separation for "Packages" and "Commands" sections with titles.
- Update: Fixed a bug that occurred with linking folders. - 05/28/23 05:59 PM
Version 1.0.1
- New feature 'parse-ini'.
- Update: Delete directory bug fix. - 05/28/23 8:11 AM PST
Version 1.0
- First Release.
- Update: Improved structure and examples for testing. - 05/25/23 5:52 PM PST