feat: Confirm story emoji reaction
feat: Spanish translation
feat: Language switcher + import/export localization from Debug
feat: Swipe down to dismiss media viewer
feat: Manually add users to story/chat exclusion lists by username
feat: Keep stories visually seen locally — split mode (grey ring locally, seen receipt still blockedon server)
feat: Auto-scroll reels — IG default or RyukGram mode, keeps advancing after swiping back (#3)
fix: Messages-only mode — tab swiping disabled
fix: Settings quick-access broken in non-English languages
fix: Story seen-receipt block restored on IG v425+ (Sundial uploader), per-owner, both "Block all" and "Block selected" modes
fix: Block selected mode no longer marks listed stories as seen
imp: Story-interaction pipeline unifies confirm + seen/advance side effects
### Features
- **Open Instagram links in app (Safari extension)** — bundled Safari web extension (sideload IPA only). Enable in Safari → Extensions; instagram.com links open in the app.
- **Localization** — every user-facing string flows through a central translation layer. Globe button in Settings; missing keys fall back to English. Ships English only — see the "Translating RyukGram" section in the README to add more.
- **Action buttons** — context-aware menus on feed, reels, and stories (expand, repost, download, copy caption, etc.) with per-context default tap action and carousel/multi-story bulk download
- **Enhanced HD downloads** — up to 1080p via DASH + FFmpegKit with quality picker, preview playback, encoding-speed options, and 720p fallback
- **Repost**, **media viewer**, **media zoom** (long-press), **download pill** (frosted glass, stacks concurrent downloads)
- **Fake location** — overrides CoreLocation app-wide, map picker + saved presets, optional quick-toggle button on the Friends Map
- **Messages-only mode** — strips every tab except DM inbox + profile
- **Launch tab** — pick which tab the app opens to
- Full last active date in DMs — show full date instead of "Active 2h ago"
- Custom date format — 12 formats with per-surface toggles (feed, notes/comments/stories, DMs)
- Send files in DMs (experimental)
- View story mentions
- Hide suggested stories
- Story tray long-press actions — view HD profile picture from the tray menu
- Advance on story reply — auto-skip to next story after sending a reply or reaction
- Mark story as seen on reply or emoji reaction
- Hide metrics (likes, comments, shares counts)
- Hide messages tab
- Hide voice/video call buttons in DM thread header (independent toggles)
- Disable app haptics
- Disable reels tab refresh
- Disable disappearing messages mode in DMs
- Follow indicator — shows whether the profile user follows you
- Copy note text on long press
- Zoom profile photo — long press opens full-screen viewer
- Notes actions — copy text, download GIF/audio from notes long-press menu
- Confirm unfollow
- Feed refresh controls — disable background refresh, home button refresh, and home button scroll
### Improvements
- Default tap action: added copy URL, repost, and view mentions options; dynamic menu generation per context
- Settings pages reordered: General → Feed → Stories → Reels → Messages → Profile → Navigation → Saving → Confirmations
- Fake location picker: native Apple Maps-style UI (search, long-press to drop pin, current location)
- Liquid glass floating tab bar + dynamic sizing
- Upload audio: FFmpegKit re-encode + trim for any audio/video input
- Settings reorganized with per-context action button config; new Profile page
- Highlight cover: full-screen viewer replaces direct download
- Switched HD encoder to `h264_videotoolbox` (hardware) — no GPL FFmpegKit required
- Legacy long-press download deprecated (off by default), replaced by action buttons
### Fixes
- Hide suggested stories no longer removes followed users' stories on scroll
- Settings search bar transparency with liquid glass off; auto-deactivates on push
- HD download cancel: tapping pill aborts in-flight downloads + FFmpeg sessions cleanly
- Download pill stuck state on background/foreground, progress reset per download
- Disappearing messages mode confirmation not firing on swipe
- Detailed color picker not working on story draw `†`
- DM seen toggle menu not updating after tap
- Reel refresh confirmation appearing on first app launch `†`
- Reels action button displacing profile pictures on photo reels
- Disappearing DM media download (expand, share, save to Photos with progress pill)
- Carousel "Download all" not showing item count in feed
- Encoding speed setting being ignored for HD downloads
- Various upstream SCInsta merges (Meta AI hiding, suggested chats hiding, notes tray) — marked `†`
> `†` Merged from upstream [SCInsta](https://github.com/SoCuul/SCInsta) by SoCuul
### Credits
- Thanks to [@erupts0](https://github.com/erupts0) (John) for testing and feature suggestions
- Thanks to [@euoradan](https://t.me/euoradan) (Radan) for experimental Instagram feature flag research
- Safari extension forked/cleaned from [BillyCurtis/OpenInstagramSafariExtension](https://github.com/BillyCurtis/OpenInstagramSafariExtension)
### Known Issues
- Preserved unsent messages can't be removed via "Delete for you"; pull-to-refresh clears them (warning available in settings)
- "Delete for you" detection uses a ~2s window after the local action — a real unsend landing in that window may be missed (rare)
### Features
- **Open Instagram links in app (Safari extension)** — bundled Safari web extension (sideload IPA only). Enable in Safari → Extensions; instagram.com links open in the app.
- **Localization** — every user-facing string flows through a central translation layer. Globe button in Settings; missing keys fall back to English. Ships English only — see the "Translating RyukGram" section in the README to add more.
- **Action buttons** — context-aware menus on feed, reels, and stories (expand, repost, download, copy caption, etc.) with per-context default tap action and carousel/multi-story bulk download
- **Enhanced HD downloads** — up to 1080p via DASH + FFmpegKit with quality picker, preview playback, encoding-speed options, and 720p fallback
- **Repost**, **media viewer**, **media zoom** (long-press), **download pill** (frosted glass, stacks concurrent downloads)
- **Fake location** — overrides CoreLocation app-wide, map picker + saved presets, optional quick-toggle button on the Friends Map
- **Messages-only mode** — strips every tab except DM inbox + profile
- **Launch tab** — pick which tab the app opens to
- Full last active date in DMs — show full date instead of "Active 2h ago"
- Custom date format — 12 formats with per-surface toggles (feed, notes/comments/stories, DMs)
- Send files in DMs (experimental)
- View story mentions
- Hide suggested stories
- Story tray long-press actions — view HD profile picture from the tray menu
- Advance on story reply — auto-skip to next story after sending a reply or reaction
- Mark story as seen on reply or emoji reaction
- Hide metrics (likes, comments, shares counts)
- Hide messages tab
- Hide voice/video call buttons in DM thread header (independent toggles)
- Disable app haptics
- Disable reels tab refresh
- Disable disappearing messages mode in DMs
- Follow indicator — shows whether the profile user follows you
- Copy note text on long press
- Zoom profile photo — long press opens full-screen viewer
- Notes actions — copy text, download GIF/audio from notes long-press menu
- Confirm unfollow
- Feed refresh controls — disable background refresh, home button refresh, and home button scroll
### Improvements
- Default tap action: added copy URL, repost, and view mentions options; dynamic menu generation per context
- Settings pages reordered: General → Feed → Stories → Reels → Messages → Profile → Navigation → Saving → Confirmations
- Fake location picker: native Apple Maps-style UI (search, long-press to drop pin, current location)
- Liquid glass floating tab bar + dynamic sizing
- Upload audio: FFmpegKit re-encode + trim for any audio/video input
- Settings reorganized with per-context action button config; new Profile page
- Highlight cover: full-screen viewer replaces direct download
- Switched HD encoder to `h264_videotoolbox` (hardware) — no GPL FFmpegKit required
- Legacy long-press download deprecated (off by default), replaced by action buttons
### Fixes
- Hide suggested stories no longer removes followed users' stories on scroll
- Settings search bar transparency with liquid glass off; auto-deactivates on push
- HD download cancel: tapping pill aborts in-flight downloads + FFmpeg sessions cleanly
- Download pill stuck state on background/foreground, progress reset per download
- Disappearing messages mode confirmation not firing on swipe
- Detailed color picker not working on story draw `†`
- DM seen toggle menu not updating after tap
- Reel refresh confirmation appearing on first app launch `†`
- Reels action button displacing profile pictures on photo reels
- Disappearing DM media download (expand, share, save to Photos with progress pill)
- Carousel "Download all" not showing item count in feed
- Encoding speed setting being ignored for HD downloads
- Various upstream SCInsta merges (Meta AI hiding, suggested chats hiding, notes tray) — marked `†`
> `†` Merged from upstream [SCInsta](https://github.com/SoCuul/SCInsta) by SoCuul
### Credits
- Thanks to [@erupts0](https://github.com/erupts0) (John) for testing and feature suggestions
- Thanks to [@euoradan](https://t.me/euoradan) (Radan) for experimental Instagram feature flag research
- Safari extension forked/cleaned from [BillyCurtis/OpenInstagramSafariExtension](https://github.com/BillyCurtis/OpenInstagramSafariExtension)
### Known Issues
- Preserved unsent messages can't be removed via "Delete for you"; pull-to-refresh clears them (warning available in settings)
- "Delete for you" detection uses a ~2s window after the local action — a real unsend landing in that window may be missed (rare)
### Fixes
- Fixed liquid glass buttons and surfaces
- Fixed repost confirmation in reels
- Fixed visual messages never being marked as viewed
- Fixed keep deleted messages on the Instamadillo backend
- Fixed Disable video autoplay
- Fixed play/pause force-audio-onfalsely triggering Instagram's "Reel has no sound" message
- Fixed confirm reel refresh triggering on app launch
- Fixed confirm reel refresh not working after first pull
- and more...
### Features
- Profile copy button — copy username/name/bio from any profile
- Backup & Restore — export/import RyukGram settings
- Download disappearing DM media (photos + videos)
- Mark disappearing messages as viewed
- Upload audio as voice message (with trim editor)
- Download voice messages from DMs
- Auto mark seen on typing
- Mark seen on story like
- Advance to next story when marking as seen
- Advance on story like — automatically skips to the next story after liking
- Per-chat and per-story blocking lists with two modes: "Block all" (exclude list) or "Block selected" (include list). Independent lists per mode, long-press to add/remove, per-entry keep-deleted override
- Save to RyukGram album (optional)
- Unlock password-locked reels
- Read receipt modes (button / toggle)
- Auto mark seen on interact
- Unsent message indicator
- Unsent message notification pill
- Hide trailing action buttons on preserved messages
- Warn before clearing preserved messages on DM refresh
- Long-press menu on the DM seen button for quick actions
- Quick list buttons in chats and stories (toggleable)
- Story seen button mode (button / toggle)
- Long-press menu on the story seen button for quick actions
- Story audio mute/unmute toggle — button on story overlay and 3-dot menu
- Hide repost button in reels and feed
- Copy comment text from long-press menu
- Download GIF comments
- Replace domain in shared links with preset or custom embed domains
- Strip tracking params from shared links (igsh, utm)
- Open links in external browser
- Strip tracking from browser links
- Download highlight cover from profile long-press menu
### Improvements
- Excluding a chat or story now immediately marks as seen
- Tweak settings quick-access (hold feed tab) now on by default
- Disable auto-unmuting reels now off by default
- Opening tweak settings pauses any playing video/audio (toggleable)
- Reorganized DM settings into sub-pages
- Reorganized tweak settings — split "Stories and messages" into separate Stories and Messages pages, regrouped related options
- Hide custom story buttons during pinch-to-zoom
- Search bar in tweak settings
### Known Issues
- Preserved unsent messages can't be removed via "Delete for you"; pull-to-refresh in DMs clears them (warning available in settings).
- "Delete for you" detection uses a ~2 second window after the local action. If a real other-party unsend happens to land in the same window, it may not be preserved. Rare in practice and limited to that specific overlap.
keep-deleted override, and adaptive UI
feat: Quick list buttons in chats and stories — add/remove directly from DM threads and story viewer
fix: KVO observer crash from multiple registrations in story audio toggle
fix: Seen auto-bypass race condition when overlapping events (boolean → counter)
fix: Confirm reel refresh not working after first pull
fix: Startup class scan replaced with direct class lookup
imp: All menu/button text adapts to active blocking mode
imp: Mark-seen triggers at the correct point per mode
imp: Migrated unexclude_inbox_button to chat_quick_list_button
imp: Menu changes in settings now reload table for dynamic titles
feat: Remove user param from copied links
feat: Open links in External Browser
feat: Strip Instagram tracking from browser links
fix: Confirm reel refresh confirmation appears on app launch
#2
feat: Multi-select in excluded chats/story users lists with batch actions
feat: Dynamic count refresh on manage list buttons
imp: Opening tweak settings pauses any playing video/audio (toggleable in advanced settings)
imp: Tweak settings quick-access (hold feed tab) now on by default
imp: Disable auto-unmuting reels now off by default
imp: Excluding a chat or story now immediately marks as seen
feat: Story seen button mode (button / toggle)
feat: Long-press menu on the story seen button (mark seen, exclude, settings)
feat: Auto mark-seen on exclude for both stories and DM chats
imp: Cleaner exclusion menu wording across stories and DMs
imp: Tweak settings now update in real time for exclude ui
imp: Ability to batch select in both stories and messages exclude UI
Fix: Prevent play/pause patch from triggering Instagram’s “Reel has no sound” message when forcing audio on silent Reels
imp: Un-exclude button in excluded chats (toggleable)
imp: Show error for unsupported audio files that can't be processed - we can add ffmpeg at some point
chore: Remove qr code text from import/export buttons
fix: Keep-deleted messages now reliable for cold-start backlogs
fix: Fix downloading some audio file formats (tries converting falls back to original file type)
feat: Added copy button in profile page to copy various profile information
feat: Added export/import settings option - With Searchable, collapsible, editable preview before saving or applying
imp: Search bar in tweak settings
imp: Hide custom story buttons when zooming (follows ig buttons)
bug: Fix a bug in keep deleted messages marking removed reactions as unset messages
feat: Save to RyukGram album
feat: Hide trailing action buttons on preserved messages
feat: Confirmation when pulling to refresh the DMs tab if preserved messages would be cleared
- Fixed repost confirmation not working in reels
- Fixed visual message seen bug (messages were never marked as viewed)
- Download button works in DM disappearing messages (photos + videos)
- Mark as viewed button for DM disappearing messages
- Rebranded from SCInsta to RyukGram
- Built-in sideload patch
- Enhanced reels pause/play mode with auto-unmute and mute toggle hiding
- Playback toggle synced with overlay during hold/zoom across IG A/B variants
- Download buttons on feed posts, reels sidebar, and story overlay
- Download method toggle: button or long-press gesture
- Save action: share sheet or save directly to Photos
- Non-blocking pill-style download HUD with tap to cancel
- Story seen receipt blocking (toggleable at runtime, no restart)
- Keep stories visually unseen option
- Manual mark story as seen with allow-list for deferred uploads
- Stop story auto-advance
- Story download from overlay
- Reel download crash fix via runtime ivar scanning
- Proper auto-unmute blocking for reels
- New dylib build mode for Feather injection
- and more...
settings UI, build scripts, workflows, control file, and Makefile
- Added built-in sideload compatibility patch:
keychain access group discovery, SecItem rebinding via fishhook,
NSFileManager app group fallback, Cloud Kit entitlement patches
- Added fishhook library (modules/fishhook/) for C function rebinding
- Updated README with new features, repo links, and credits
- Updated GitHub Actions workflows for RyukGram naming
- Plist renamed from SCInsta.plist to RyukGram.plist