Skip to content

feat: Add desktop GUI#42

Open
prateek-who wants to merge 34 commits intoMorpheApp:devfrom
prateek-who:gui-update
Open

feat: Add desktop GUI#42
prateek-who wants to merge 34 commits intoMorpheApp:devfrom
prateek-who:gui-update

Conversation

@prateek-who
Copy link
Contributor

@prateek-who prateek-who commented Feb 6, 2026

The GUI update with most of the stuff. Some stuff might be broken, will keep fixing them as they appear. Also, please check the build.gradle.kts file once just to make sure I didn't mess up anything that the team might have added there.

Tired of using the old CLI? Not sure where to get what files to get the CLI running? Too busy to read the documentation? Worry not ladies and gentlemen, we present to you the Morphe GUI!

We got shiny new look coat of paint to suit your needs with more coming on the way!

home_screen

Select the patch you want to use, including stable and dev patches!

Patch_selection_screen

See all the patches that will be applied even before they are applied! Are you a power user and want to make small tweak to the final command? With one click copy, your command will be all yours to experiment with! Also, see the morphe team's most deselected patches and decide if you want to listen to them :)

patches_application_screen

See the patch getting applied in real time just like how it does on the mobile patcher!

patch_getting_applied

Directly install the app to your phone over ADB if you are plugged in to your computer and not worry about transferring the app and installting it again!

Untitled design

And in case you happen to be in a hurry want the entire process to be done ASAP, we got your back there too!

quickmode

Visit your nearest morphe github to grab your CLI's GUI

@prateek-who

This comment was marked as resolved.

@LisoUseInAIKyrios LisoUseInAIKyrios changed the title feat: GUI Update feat: Add desktop GUI Feb 6, 2026
@LisoUseInAIKyrios

This comment was marked as resolved.

@LisoUseInAIKyrios LisoUseInAIKyrios linked an issue Feb 6, 2026 that may be closed by this pull request
2 tasks
@prateek-who

This comment was marked as resolved.

@prateek-who

This comment was marked as resolved.

@prateek-who

This comment was marked as resolved.

@LisoUseInAIKyrios

This comment was marked as resolved.

@prateek-who

This comment was marked as resolved.

@LisoUseInAIKyrios

This comment was marked as resolved.

@prateek-who

This comment was marked as resolved.

@LisoUseInAIKyrios

This comment was marked as resolved.

@prateek-who

This comment was marked as resolved.

@prateek-who
Copy link
Contributor Author

Maybe we relocate the 'Code Preview' and the 'Suggested Deselected Patches' sections to the TopBar in the Patch Selection Screen? It's kinda looks ugly and cramped right now I feel. Will try to figure something out for this soon.

@LisoUseInAIKyrios
Copy link
Contributor

If code preview you mean the CLI command, then yes it can be at the top of the screen. It can be show if "expert mode" is enabled. The simplified mode setting can be inverted to "expert mode" and it's default off, to match Android Manager app.

Suggested deselected patches can be removed entirely. Patches already declare if they are default included, and we don't want hard coded patch preferences or anything else.

Ideally the only hard coded thing we should use, is a package name to app name lookup, so a human readable app name is shown and not the ugly package name. Eventually this will change so it's not needed, but for now it's ok.

@LisoUseInAIKyrios
Copy link
Contributor

The simple mode progress UI stub can be removed too since it's not easy to use with CLI text usage.

@prateek-who
Copy link
Contributor Author

prateek-who commented Feb 9, 2026

If code preview you mean the CLI command, then yes it can be at the top of the screen. It can be show if "expert mode" is enabled. The simplified mode setting can be inverted to "expert mode" and it's default off, to match Android Manager app.

Suggested deselected patches can be removed entirely. Patches already declare if they are default included, and we don't want hard coded patch preferences or anything else.

Ideally the only hard coded thing we should use, is a package name to app name lookup, so a human readable app name is shown and not the ugly package name. Eventually this will change so it's not needed, but for now it's ok.

Got it. I'll remove the suggested patches thingy entirely. Will integrate it into the patch card iteslf just like how mobile manager does it.

@prateek-who
Copy link
Contributor Author

The simple mode progress UI stub can be removed too since it's not easy to use with CLI text usage.

Do I do what the normal mode does and show the progress bar just spinning but no actual number?

@prateek-who
Copy link
Contributor Author

prateek-who commented Feb 9, 2026

Ok, it just says 'patching' now with a circular spinning icon, no progress or numbers and shows the latest text of the CLI in there like this:

Screenshot 2026-02-09 at 9 08 51 AM

@prateek-who
Copy link
Contributor Author

Was looking at adding this #26 . Saw your comment https://github.com/MorpheApp/morphe-patches/issues/336 on keeping them separate for the manager and the CLI. So, we add a flag that keeps only our needed lib and deletes other libs right? Or we could make this a GUI only option too and the Expert Mode gets the option to do this now since we are able to track the user device's architecture if they are connected over ADB (or give them an option to choose).
What do you think?

@LisoUseInAIKyrios
Copy link
Contributor

Rip-libs can be a cli argument. Can be something like --riplibs (architectures to keep, separated by commas)

--riplibs arm64-v8a,x86 strips all except for armv8 and x86.

I think this should be do-able by deleting subdirectories before apktool recompiles the app. Or remove before zipping the files into the final apk, or possibly even remove from the apk after it's created. Deleting before APKTool would be preferred if possible, but whatever is simplest may be the best.

@prateek-who
Copy link
Contributor Author

If a patch is not recommended the patches.mpp file sets "use" to false right? For youtube, only 2 out of the 61 patches have this field set to false,so naturally the gui auto selects the rest 59 and unselects those 2 and then lets the user decide what they want to do. However on the mobile patcher seems to deselect many more patches and shows only 54/61 selected. How is it doing that?

@LisoUseInAIKyrios
Copy link
Contributor

The Android Manager still auto selects all patches with use == true, so it includes 59 patches like CLI does.

But it will remember the last selected patches if using expert mode. Maybe you already patched using expert mode and excluded some patches?

@prateek-who
Copy link
Contributor Author

The Android Manager still auto selects all patches with use == true, so it includes 59 patches like CLI does.

But it will remember the last selected patches if using expert mode. Maybe you already patched using expert mode and excluded some patches?

Ah, that's probably it.

@prateek-who
Copy link
Contributor Author

Rip-libs can be a cli argument. Can be something like --riplibs (architectures to keep, separated by commas)

--riplibs arm64-v8a,x86 strips all except for armv8 and x86.

I think this should be do-able by deleting subdirectories before apktool recompiles the app. Or remove before zipping the files into the final apk, or possibly even remove from the apk after it's created. Deleting before APKTool would be preferred if possible, but whatever is simplest may be the best.

Added --riplibs like you said here. Right as it re-aligns the apk and before the signing it, it rips the libs that the user doesn't want. Right now it does it only for youtube. Will test and add reddit too since reddit says universal too. Size seems to be dropping by 50% for youtube.

@LisoUseInAIKyrios
Copy link
Contributor

Please make a separate PR with riplibs. Can merge that now.

@prateek-who
Copy link
Contributor Author

Add the CLI changes to the new PR, this PR has those changes and the GUI changes that riplibs needs. I am hoping I did it right here too? Those files won't cause nay conflicts in the future when this merges with dev branch right?

@LisoUseInAIKyrios
Copy link
Contributor

Correct there shouldn't be problems after riplibs PR is merged.

@prateek-who
Copy link
Contributor Author

Could you check once just in case I properly merged everything. Seems right me (it was 90% accepting the incoming changes)

@LisoUseInAIKyrios
Copy link
Contributor

CLI usage seems to be working. json file works as expected. I didn't check GUI but it should be ok.

@LisoUseInAIKyrios
Copy link
Contributor

If anyone wants to try this now, download from here:

https://github.com/MorpheApp/morphe-cli/actions/runs/22274835244/artifacts/5606348672

@prateek-who
Copy link
Contributor Author

prateek-who commented Feb 28, 2026

If anyone wants to try this now, download from here:

https://github.com/MorpheApp/morphe-cli/actions/runs/22274835244/artifacts/5606348672

@ArcherLegend You can try this out now and see how it runs

@ArcherLegend
Copy link

@prateek-who downloading right now

@ArcherLegend
Copy link

The base is solid. If you use Crowdin I may make the translations to Italian.

Just one thing, for now ot doesn't let costumisation of some patches right? Apart from being able to manually choose which uArch to build the .apk for I have not found a way to tell which custom package name to use or header for example (basically all the patches which have a gear icon inside Morphe Manager on Android).

@prateek-who
Copy link
Contributor Author

The base is solid. If you use Crowdin I may make the translations to Italian.

Just one thing, for now ot doesn't let costumisation of some patches right? Apart from being able to manually choose which uArch to build the .apk for I have not found a way to tell which custom package name to use or header for example (basically all the patches which have a gear icon inside Morphe Manager on Android).

I am hoping you used it in expert mode. But yea, patch customization is something I need to implement. Also, once this version is out in dev, I'll slowly extract the strings.

@ArcherLegend
Copy link

Of course I am running expert mode. Once you pull out the strings let me know so I can translate to IT.
Amazing job btw, thank you.

@prateek-who
Copy link
Contributor Author

Of course I am running expert mode. Once you pull out the strings let me know so I can translate to IT. Amazing job btw, thank you.

Thank you to you too for the translation work! Will ping you once I push the customization update too

@prateek-who
Copy link
Contributor Author

I had a question regarding the sources in the manager app. A source is essentially a different patch file right? So if we were to use something similar in the cli, we would simply use a different patch file right? I might be getting this completely wrong?

@LisoUseInAIKyrios
Copy link
Contributor

Yes a source is just a different place to get the mpp file. Manager supports both GitHub repos and local mpp files.

@prateek-who
Copy link
Contributor Author

For the CLI, the user simply has to pass a different .mpp file. However, right now, the GUI only supports morphe patches. So, maybe in the patch file selections screen, we'll have to give the user options to use default morphe patches or a custom source. And maybe an option to use a local patch file too (this will provide better offline support too for the gui users)? Will have to look into this.

@LisoUseInAIKyrios
Copy link
Contributor

Yes adding repos might be cool. Would need to figure out where to save the mpp files. CLI might be useful to support a url, but unless it downloads the mpp file everytime it'll need to save it somewhere. Maybe just stick it in the patcher cache folder since a lot of stuff already stays there.

@prateek-who
Copy link
Contributor Author

Yea, that sounds good. Keeping the file in the cache folder sounds good. Maybe we give a flag that downloads from the given link and does the patching. We could also print a message saying "Patch saved at path/to/patch use this file for consecutive runs"

But then when the user clears cache, all of this gets deleted. Maybe we keep give two separate delete options? One for cache and one for patches. Then we'll be able to store everything in the cache folder, with proper structure and the app won't forget where it has kept stuff.

The GUI will use configs and stuff to store custom repo link giving users the ability to give nicknames and stuff for whatever custom repo they want to use.

@LisoUseInAIKyrios
Copy link
Contributor

I think just one delete option is ok. Everything in the temp folder can be deleted no problem.

For the mpp files downloaded it could save only one per repo of the last fetched (save patch-bundles.json and mpp file to patcher temp folder). Or maybe one bundle/mpp per repo and branch.

Manager uses GitHub urls to automatically figure out what raw JSON url to use because the default bundle names are all the same for every Morphe repo. But how to handle pre-release? GitHub url doesn't indicate stable/pre-release. Maybe a --prerelease argument is needed to use dev branch patch bundle JSON.

@prateek-who
Copy link
Contributor Author

Right now, here's what I brainstormed:

  1. If they just pass repo url, then we save the latest stable version. If --prerelease is included, then the latest dev version is saved as you mentioned. Running it again can check the version and if the version is the same, skip download and use saved patch file.

  2. In case they pass the full url something like this:
    https://github.com/MorpheApp/morphe-patches/releases/tag/v1.17.0-dev.3
    then we download the exact version they mention.

One question here, if we go by our one .mpp file per repo, then in a case where the user first downloads v17 patch file and then in the next run they specify a v16 patch file, do we delete the v17 file and download v16 file or keep both?

  1. The GUI:
  • Default Morphe Patches source (always present, non-deletable)
  • Custom GitHub repo sources (URL + nickname, persisted in config)
  • Local .mpp file source (pick from disk, offline)
  • One active source at a time ofc
  • Cache: patches// — hoarding allowed, same as current Morphe behavior
  • Also, editable options needs to be updated. Currently it only shows the available options, doesn't allow for editing.

What do you think of this?

@LisoUseInAIKyrios
Copy link
Contributor

1 and 2 sound ok to me.

I think a user downgrading to an older release is rare, and the new release mpp can be deleted. Keeping only the last release used per repo keeps the file system from getting cluttered with junk and blowing up in size.

3 gui changes sound appropriate to me.

@prateek-who
Copy link
Contributor Author

prateek-who commented Mar 5, 2026

Also, we need another flag to specify a url. Maybe something like patch-link (please suggest better name here). Or else how would we distinguish between a patch file and an url. In case we go with a command, it would look something like this:
java -jar morphe-desktop-*-all.jar patch --patches-link "https://github.com/MorpheApp/morphe-patches"

Does this sound right to you?

@LisoUseInAIKyrios
Copy link
Contributor

If it's easy, then a separate PR for the URl stuff is better. But if it's too much work making a second PR (needs too many changes from GUI branch), then put it in GUI branch.

@LisoUseInAIKyrios
Copy link
Contributor

LisoUseInAIKyrios commented Mar 5, 2026

A patch file and a url can be distinguished by looking at the parameter.

--patches https://github.com/MorpheApp/morphe-patches can check the parameter value starts with http/https

@prateek-who
Copy link
Contributor Author

A patch file and a url can be distinguished by looking at the parameter.

--patches https://github.com/MorpheApp/morphe-patches can check the parameter value starts with http/https

ahh yea, that's much better

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.

feat: Simplify the usage of CLI by improving UX

5 participants