Morphe patches that fix load more comments and Reddit galleries in Sync for Reddit and
Sync for Reddit Pro, which broke when Reddit blocked /api/morechildren and /api/info for
third-party clients.
These patches are ported from notBrian2/revanced-rif-fixes (written for rif is fun) and adapted to Sync's Volley-based networking code. Use them with the Sync patches from wchill/patcheddit, which handle API access (Spoof client), login and the other fixes Sync needs.
Click the button below, or manually add this repo url to Morphe Manager: https://github.com/trulow/sync-reddit-fixes
v1.2.0 •
main• 8 patches total
📦 Sync for Reddit • 4 patches
Package name: com.laurencedawson.reddit_sync
🎯 Supported versions:
| v23.06.30-13:39 |
|---|
| 💊 Patch | 📜 Description | ⚙️ Options |
|---|---|---|
| Fix Reddit galleries | Fixes Reddit image galleries failing to load ("Could not load gallery") since Reddit blocked /api/info for third-party clients. Galleries are loaded from /comments instead. | |
| Fix Redgifs API | Fixes "Error connecting to Redgifs": answers the Redgifs endpoints Sync relies on that were removed, uses Redgifs' temporary token, and fixes video ids taken from links like redgifs.com/watch/{id}/?92. Works on Sync and Sync Pro. Turn off Patcheddit's "Fix Redgifs API" when using this one: both change the same code. | |
| Fix load more comments | Fixes "Error loading more comments" since Reddit blocked /api/morechildren for third-party clients. The missing comments are loaded from /comments instead. At the bottom of very large threads Reddit's 500 comment limit can still leave some out. | |
| Unlock Sync Ultra | Unlocks Sync Ultra Lifetime. |
📦 Sync for Reddit Pro • 4 patches
Package name: com.laurencedawson.reddit_sync.pro
🎯 Supported versions:
| v23.06.30-13:39 |
|---|
| 💊 Patch | 📜 Description | ⚙️ Options |
|---|---|---|
| Fix Reddit galleries | Fixes Reddit image galleries failing to load ("Could not load gallery") since Reddit blocked /api/info for third-party clients. Galleries are loaded from /comments instead. | |
| Fix Redgifs API | Fixes "Error connecting to Redgifs": answers the Redgifs endpoints Sync relies on that were removed, uses Redgifs' temporary token, and fixes video ids taken from links like redgifs.com/watch/{id}/?92. Works on Sync and Sync Pro. Turn off Patcheddit's "Fix Redgifs API" when using this one: both change the same code. | |
| Fix load more comments | Fixes "Error loading more comments" since Reddit blocked /api/morechildren for third-party clients. The missing comments are loaded from /comments instead. At the bottom of very large threads Reddit's 500 comment limit can still leave some out. | |
| Unlock Sync Ultra | Unlocks Sync Ultra Lifetime. |
All patches are enabled by default and are independent: each can be selected or deselected on its own.
Fix Redgifs API replaces Patcheddit's patch of the same name, which fails on Sync because Redgifs removed
the /info endpoint Sync calls (Error connecting to Redgifs). Both change the same code, so turn
Patcheddit's "Fix Redgifs API" off when you use this one. If both are on, one of them fails to apply.
| App | Package | Version |
|---|---|---|
| Sync for Reddit | com.laurencedawson.reddit_sync |
v23.06.30-13:39 (version code 23033) |
| Sync for Reddit Pro | com.laurencedawson.reddit_sync.pro |
v23.06.30-13:39 (version code 23033) |
This is Sync's final release. The free and Pro builds have the same code but different obfuscated names
(for example y8/q.b() vs j8/q.c()), so the patches find their targets by the source file names Sync keeps
(OAuthGalleryRequest.java, OAuthCommentsMoreRequest.java, CommentsPresenterImpl.java) plus strings and
method signatures, never by obfuscated names.
- Very large threads: Reddit returns at most 500 comments per request. Deep in very large threads the last few top-level comments can fall outside that window. Sync then shows Error loading more comments and keeps the "load more" row, instead of spinning or removing it.
- These patches only change where the two requests go. Sync still needs working API access (the patcheddit Spoof client patch with your own client ID), or no request succeeds.
You need your own copy of Sync for Reddit or Sync for Reddit Pro v23.06.30-13:39. This project doesn't
provide APKs.
- Add this repository as a patch source: tap Add to Morphe above, or in Morphe Manager add the source
https://github.com/trulow/sync-reddit-fixes. (Requires a GitHub release, see Releasing below.) To use a bundle you built yourself, copypatches-<version>.mppto the phone and add it as a local patch file. - Add the patcheddit source as well (
https://github.com/wchill/patcheddit) for Spoof client and its other Sync patches. - Select your original, unpatched Sync APK, then select the patches you want from this source along with the patcheddit patches you use. If you select Fix Redgifs API here, turn off patcheddit's patch of the same name.
- Patch and install.
Download morphe-desktop-<version>-all.jar from
MorpheApp/morphe-cli releases and run:
java -jar morphe-desktop-all.jar patch -p patches-<version>.mpp -p patcheddit.mpp -o sync-patched.apk sync.apkTo apply only some of the patches, add --exclusive and -e "<patch name>" for each one you want.
Use list-patches --patches=patches-<version>.mpp -p -v to see the patches with their supported packages and
versions.
Requirements:
-
JDK 17 or newer. Android Studio's bundled runtime works:
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home" -
The Android SDK with platform 36 (
ANDROID_HOMEset, orsdk.dirinlocal.properties). -
A GitHub token with the
read:packagesscope, since Morphe publishes its Gradle plugin and patcher to GitHub Packages. Either addgpr.user/gpr.keyto~/.gradle/gradle.properties, or exportGITHUB_ACTORandGITHUB_TOKEN. With the GitHub CLI:gh auth refresh -h github.com -s read:packages export GITHUB_ACTOR=<your-github-username> GITHUB_TOKEN=$(gh auth token)
Then build:
./gradlew buildAndroidThe bundle is written to patches/build/libs/patches-<version>.mpp. buildAndroid is required: it adds the
DEX that Morphe Manager needs on Android.
The layout follows patcheddit: one extension module per app under
extensions/, and the patches for an app under its own syncforreddit package.
extensions/syncforreddit/ Extension module, built to extensions/syncforreddit.mpe
build.gradle.kts
src/main/java/app/syncfixes/extension/syncforreddit/
FixLoadMoreCommentsPatch.java Builds the /comments request, converts its reply
FixGalleriesPatch.java Rewrites the gallery URL, unwraps its reply
Responses.java Shared Volley response helpers
stub/ Compile-only Volley stubs (Sync ships Volley unobfuscated)
patches/src/main/kotlin/app/syncfixes/patches/syncforreddit/
shared/Constants.kt Supported apps, versions, shared names
fix/comments/Fingerprints.kt Targets for "load more comments"
fix/comments/FixLoadMoreCommentsPatch.kt Bytecode hooks for "load more comments"
fix/gallery/Fingerprints.kt Targets for galleries
fix/gallery/FixGalleriesPatch.kt Bytecode hooks for galleries
The Kotlin patches only insert calls; the logic lives in the Java extension, which is merged into the app.
Fix Reddit galleries hooks OAuthGalleryRequest:
- Its static URL builder returns
https://oauth.reddit.com/comments/{id}.json?limit=1instead of/api/info.json?id=t3_{id}. This URL is also Volley's cache key, which Sync uses to remember the gallery position, so both stay consistent. parseNetworkResponse()first replaces the response with one whose body is the first element of the/commentsreply: the sameListing/api/inforeturned. Sync's parser and its cache handling are unchanged.
Fix load more comments hooks three places:
CommentsPresenterImpl's "load more" handler passes the "more" row to the extension, which reads itsparent_id(the request itself isn't given the parent).OAuthCommentsMoreRequest's constructor passes the post id, child ids and sort. Right before the super constructor, theapi/morechildrenPOST is replaced by a GET of/comments/{post}.json(top level,depth=2) or/comments/{post}/_/{parent}.json(nested,depth=10), withlimit=500, the sort, and a key to the child id list (hundreds of ids would make the URL too long).parseNetworkResponse()turns the comment tree into morechildren's flat{"json":{"data":{"things":[...]}}}: the requested comments and everything under them, in pre-order (parents before replies, which Sync uses for indentation), with "more" items for deeper replies. If nothing could be loaded it returns Reddit's error shape, so Sync shows its normal error and keeps the row.
Fix Redgifs API (adapted from KingOfPoptart/patcheddit,
wchill/patcheddit#100) installs an OkHttp interceptor on the
client behind Sync's Volley requests. The patch finds that client by following the getter Volley's
BasicNetwork calls to the field it returns, so it hooks the same client on Sync and Sync Pro.
- Sync asks
/v2/oauth/clientfor a token, then/infofor its IP address; Redgifs removed both. The interceptor answers both itself, using Redgifs' current temporary token (/v2/auth/temporary), cached per user agent. /v2/gifs/{id}goes out with that token and Sync's own user agent. If Redgifs rejects it (tokens are tied to the IP address that requested them, so switching networks invalidates one), the request is retried once with a new token.LinkHandler.getGfycatIdstrips the query before the trailing slash, so links likeredgifs.com/watch/{id}/?92no longer give an empty id.
This project keeps the template's release flow: commit to dev with semantic commit messages
(feat:, fix:, chore:), and release.yml builds, signs (optional), and publishes releases. Merge dev into
main for a stable release. See the
Morphe patches template for details. Before publishing,
update source in patches/build.gradle.kts and the links in this README if the
repository isn't trulow/sync-reddit-fixes.
Not affiliated with or endorsed by Laurence Dawson, Sync for Reddit, Reddit or the Morphe project. This repository contains only original patch code, no APKs and no code from Sync. You are responsible for using your own legally obtained copy of the app and for following the terms of the services it connects to.
Sync for Reddit Fixes are licensed under the GNU General Public License v3.0, with the additional conditions under section 7 in the NOTICE.