Skip to content

feat: GUI Overhaul#98

Open
prateek-who wants to merge 57 commits intoMorpheApp:devfrom
prateek-who:gui-overhaul
Open

feat: GUI Overhaul#98
prateek-who wants to merge 57 commits intoMorpheApp:devfrom
prateek-who:gui-overhaul

Conversation

@prateek-who
Copy link
Copy Markdown
Contributor

No description provided.

prateek-who and others added 30 commits February 11, 2026 09:04
Fixed a bunch of issues with the simplified version. It should behave better now.
Fixed minor UI bugs and URL pointing issues
Builds an apkmirror link to link the app . Might want to change the implementation later
Fixed "Download original APK" button UI for reddit.
Added more extensive timestamp for when patches are published.
Added Patch notes section in the patches screen.
Fixed minor UI problems
Added a device indicator on the top which allows to see if a device is connected or not.
Other minor UI and logic fixes.
No more hardcoded disabled patches, directly read from the patches files
Made a bunch of UI improvements for the patch screen.
Simplified mode loading now shows a circular icon instead of making up progress numbers.
User can remove libs if they do not need it
We can now generate a single cross platform jar file.
Fixed an issue where cache wasn't clearing on windows
No more code duplication. The patching logic is present in a central engine that both the cli and the gui can call to make it run however they want.
Minor fixes for various stuff
Better patching logging Simplified version.
Added --force for unsupported versions.
Added a button for --continue-on-error to allow gui users to continue patching even when if a patch throws an error.
added fixes from other branches and new mini theme
Added a better offline mode experience for the user.
Minor UI improvemments to the patches and patchselection screens.
Added some updates from other branch (but not all, might lack some functionality that are present in other branches)
@prateek-who
Copy link
Copy Markdown
Contributor Author

prateek-who commented Apr 2, 2026

  • Title bar issue on mac (positioning issue) and windows (doesn't even exist. The minimize, close, etc buttons need to be integrated into the window).
  • Colors palette contrast issues on various themes.
  • Animation fix for matcha theme. (Remove that lottie file if not used perhaps.)
  • Result screen centering issue.
  • Read App name from patch file.
  • Change the look of the Supported apps. Currently we are not showing experimental version

These are issues I need to fix (from the top of my head). Let's delay the merge until this gets ready.

@prateek-who
Copy link
Copy Markdown
Contributor Author

prateek-who commented Apr 3, 2026

Could you check if the morphe window looks decent on windows now?

@LisoUseInAIKyrios
Copy link
Copy Markdown
Contributor

I don't use Windows but maybe someone else can check:

https://github.com/MorpheApp/morphe-cli/suites/63221859474/artifacts/6259679436

@prateek-who
Copy link
Copy Markdown
Contributor Author

Oh wait, are you on Linux? How does it look on that?

@LisoUseInAIKyrios
Copy link
Copy Markdown
Contributor

I'm on Mac. It looks good for me.

@prateek-who
Copy link
Copy Markdown
Contributor Author

oh lmao, I am on mac too. It looks decent on mac, but the second I switch to my windows laptop, the colors look a bit washed. I don't if it's a colors issue or my screen issue.

@prateek-who
Copy link
Copy Markdown
Contributor Author

prateek-who commented Apr 4, 2026

Screenshot 2026-04-04 at 1 55 01 PM

Does this look too washed out? The contrast is much better, but I kinda feel it lacks emotion. Feels like strawberry syrup. But what do you think?

@LisoUseInAIKyrios
Copy link
Copy Markdown
Contributor

LisoUseInAIKyrios commented Apr 4, 2026

what if the grey text is black, and the red is white or black?

Revamped supported apps cards to show experimental versions.
Revamped App info card to now handle experimental version, stable version and a bunch of edge cases.
Patching result screen is now properly centered.
Unable to strip archs bug fixed.
Minor UI fixes. (Still a lot of work to do here)
@prateek-who
Copy link
Copy Markdown
Contributor Author

See how the Supported apps section looks now. What are your opinions on it? Please tell me your ideas to improve it, if you have any.

@LisoUseInAIKyrios
Copy link
Copy Markdown
Contributor

LisoUseInAIKyrios commented Apr 6, 2026

I think it looks great. I like the fixed width font that gives off a console vibe.

Picking an experimental version shows a "this may not work" warning but it can instead show a 🧪 experimental warning message (can use same message shown in Manager).

Details Experimental

@LisoUseInAIKyrios
Copy link
Copy Markdown
Contributor

The console output of the GUI is so much easier to read when the patch is displayed last:

Patch applied: Hide video action buttons
Patch applied: Loop video
Patch applied: Miniplayer
Patch applied: Navigation bar
Patch applied: Open Shorts in regular player
Patch applied: Open links externally
Patch applied: Open videos fullscreen
Patch applied: Playback speed
Patch applied: Remove background playback restrictions
Patch applied: Remove viewer discretion dialog
Patch applied: Restore old search filters
Patch applied: Return YouTube Dislike
Patch applied: Sanitize sharing links
Patch applied: Seekbar
Patch applied: Shorts autoplay
Patch applied: SponsorBlock
Patch applied: Spoof app version
Patch applied: Spoof device dimensions
Patch applied: Spoof video streams
Patch applied: Swipe controls
Patch applied: Theme
Patch applied: Video ads
Patch applied: Video quality

Compared to CLI:

INFO: "Check watch history domain name resolution" succeeded 
INFO: "Copy video URL" succeeded 
INFO: "Custom branding" succeeded 
INFO: "Custom player overlay opacity" succeeded 
INFO: "Disable DRC audio" succeeded 
INFO: "Disable QUIC protocol" succeeded 
INFO: "Disable Shorts resuming on startup" succeeded 
INFO: "Disable double tap actions" succeeded 
INFO: "Disable haptic feedback" succeeded 
INFO: "Disable layout updates" succeeded 
INFO: "Disable player popup panels" succeeded 
INFO: "Disable rolling number animations" succeeded 
INFO: "Disable sign in to TV popup" succeeded 
INFO: "Disable video codecs" succeeded 

I think the CLI console could be changed to use the same 'patch last' format of:

INFO: Success: Check watch history domain name resolution
INFO: Success: Copy video URL
INFO: Success: Custom branding
INFO: Success: Custom player overlay opacity
INFO: Success: Disable DRC audio
INFO: Success: Disable QUIC protocol
INFO: Success: Disable Shorts resuming on startup
INFO: Success: Disable double tap actions
INFO: Success: Disable haptic feedback
INFO: Success: Disable layout updates
INFO: Success: Disable player popup panels
INFO: Success: Disable rolling number animations
INFO: Success: Disable sign in to TV popup
INFO: Success: Disable video codecs

@eksan127
Copy link
Copy Markdown

eksan127 commented Apr 7, 2026

I don't use Windows but maybe someone else can check:

https://github.com/MorpheApp/morphe-cli/suites/63221859474/artifacts/6259679436

image wow that cool, animation background

@eksan127
Copy link
Copy Markdown

eksan127 commented Apr 7, 2026

I don't use Windows but maybe someone else can check:

https://github.com/MorpheApp/morphe-cli/suites/63221859474/artifacts/6259679436

image if i uncheck in strip native libraries still got this error

i was report this on the Reddit a day ago use this version
https://github.com/MorpheApp/morphe-cli/actions/runs/23846854173/artifacts/6219563344

patch version: 1.23.0-dev.8
YouTube version: 21.14.482

@prateek-who
Copy link
Copy Markdown
Contributor Author

@eksan127 Sorry that was the old build. Try this:
https://github.com/MorpheApp/morphe-cli/suites/63516598277/artifacts/6293794474

@prateek-who
Copy link
Copy Markdown
Contributor Author

Picking an experimental version shows a "this may not work" warning but it can instead show a 🧪 experimental warning message (can use same message shown in Manager).

Yea, will change this.

I think the CLI console could be changed to use the same 'patch last' format

Roger that

@eksan127
Copy link
Copy Markdown

eksan127 commented Apr 7, 2026

@eksan127 Sorry that was the old build. Try this: https://github.com/MorpheApp/morphe-cli/suites/63516598277/artifacts/6293794474

@prateek-who patching work but output file still have all architecture
image_2026-04-07_17-04-47

@prateek-who
Copy link
Copy Markdown
Contributor Author

Will look into this

@prateek-who
Copy link
Copy Markdown
Contributor Author

@wchill Had a small confusion.

When a user passes --striplibs, we pass it using keepArchitectures right. The patcher does its job, and when it gets to the lib stripping part, it does it correctly on its temp directory. It properly deletes the unwanted arch dirs from disk, and even logs "Stripped N lib files". This is good.

But here's the issue now. The way the engine rebuilds the output APK is by copying the original input APK and then applying PatcherResult.applyTo() to splice in the changes. applyTo() only knows what to delete from the rebuilt zip via ResourceCoder.getDeletedFiles(). And in ArsclibResourceCoder that method is currently a hard-coded no-op:

    /**
     * No-op, not currently supported by ArsclibResourceCoder.
     */
    override fun getDeletedFiles(): Set<String> = emptySet()

The deletion set handed to applyTo() is always empty. And that means no libs get stripped. Unless I am reading this wrong (which also could be true), this is the issue right now. Could you check if this is true? Or if there is some issue on my end in this PR? (Because I messed up earlier and had to solve a lot of conflicts, so there could be chances that maybe something changed during my merge fest.)

@wchill
Copy link
Copy Markdown
Contributor

wchill commented Apr 7, 2026

It's a no-op because we already delete the files on disk. So there's no need to delete them in the later step.

At least, that's how it's supposed to work.

@prateek-who
Copy link
Copy Markdown
Contributor Author

prateek-who commented Apr 7, 2026

Is the manager using the keepArchitecture form the patcher? If yes, then how is it doing that properly?

I tested --striplibs on v1.6.4-dev.2 and v1.6.4-dev.1, and striplibs seems broken on all of them. It seems to be broken ever since dev.1. The stable v1.6.3 strips libs perfectly. Here's how to test it:

  1. Run the patching with the above mentioned cli versions. Add --striplibs and whatever cpu arch at the end. I tested with arm64-v8a
  2. Check the resultant apk's size. Could also run this command: unzip -l patched_app.apk | grep '^.*lib/' | awk '{print$4}' | cut -d/ -f1-2 | sort -u

This should show the archs present. Could you check once too. I could've made a mistake, but it seems broken.

@wchill
Copy link
Copy Markdown
Contributor

wchill commented Apr 7, 2026

This is where the stripping happens: https://github.com/MorpheApp/morphe-patcher/blob/dev/src/main/kotlin/app/morphe/patcher/resource/coder/ArsclibResourceCoder.kt#L220

I don't have time to investigate this for the next few days, but you could set a breakpoint there and see what is happening on the file system to debug.

@prateek-who
Copy link
Copy Markdown
Contributor Author

Did the line 220 check via the filesystem instead of a debugger.
Checking: patched-temporary-files/patcher/apk/root/lib/
gave me:arm64-v8a

stripNativeLibraries() is working correctly. The libs are being stripped. The bug is most likely with the applyTo() method. Ran it with AI and this is what it says:
"So stripNativeLibraries() at L220 works perfectly — armeabi-v7a, x86, x86_64 are gone from the scratch dir. The bug is downstream: applyTo() builds the output APK as originalApk.copyTo(rebuilt); applyTo(rebuilt) and only removes entries reported by getDeletedFiles(), which is currently = emptySet() in ArsclibResourceCoder.kt:356. So the original APK's lib entries get carried straight through into the output, and the on-disk strip is invisible to applyTo()."

@wchill
Copy link
Copy Markdown
Contributor

wchill commented Apr 7, 2026

Honestly we shouldn't be copying the original APK anyway for arsclib because all of the resources are already being repacked.

Feel free to send a PR to fix this. Easy fix is you can populate the set returned by getDeletedFiles() by modifying detectFileChanges to also record deleted files, harder fix is to redo the APK repacking.

@prateek-who
Copy link
Copy Markdown
Contributor Author

Sure thing, will submit a PR using your easy approach. I asked claude what the harder fix would be and I've been trying to make sense of its explanation for 30 mins now. From what I understand, we would have to rework how the patcher assembles the final APK. Currently it's built by copying the original and applying a diff, and the harder fix seems moves to packing it from scratch out of the working dir. It makes some sense on the surface but I don't seem to understand how it is going to work. Seems like the right long term direction, but maybe we do that in the future.

@wchill
Copy link
Copy Markdown
Contributor

wchill commented Apr 7, 2026

Conceptually it's just taking the resources.apk and adding the dex files, which I think should work but is likely to have edge cases. So it's safer to just go with the deleted files approach.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants