Original release notes
Divine 1.0.16 - Life in Loops
This one's all about creation. We poured this release into the tools that put more in your hands and less in the algorithm's: a deeper video editor, a sharper camera, and a feed that finally listens to you.
Make something wild
- New editor powers: clip transitions, reverse playback, a voice-over recorder, pinch-to-zoom canvas, crop/rotate/flip, multi-select to merge or delete clips, and timeline beat markers.
- Lip-sync camera mode - and yes, lip-sync can record past the 6.3s limit.
- Video stabilization, auto lens switching with a pinch-zoom ruler, and single-photo capture for stop-motion.
- Edit your own subtitles and republish them.
A feed that's yours
- Swipe left/right to tune your recommendations directly. No gaming the algorithm.
- Classics mode brings the archived Vines front and center.
- Instant cold-start - your home feed loads from disk cache the moment you open the app.
Talk to your people
- Double-tap a message to like it, react with combined reaction pills, and share reels straight into DMs with a quoted preview.
- Read state now syncs across your devices.
Own what you make, choose what you see
- At-rest encryption for your local data.
- Background uploads that survive the app getting suspended.
- ProofMode carries its human-made provenance forward when you download a watermarked clip.
- Website and monetization links on your profile, plus avatar and banner cropping before upload.
A safer playground
- New protections for under-16 accounts, adult content hidden by default until you opt in, and stronger blocklist and moderation controls.
Plus 284 translated strings across 17 languages, a unified search, and hundreds of fixes.
No slop. All human. Full commit-by-commit list below.
---
What's Changed
- feat(auth): add under-16 family guidance flow by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/3531
- fix(images): cancel orphaned thumbnail downloads by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/4695
- feat(l10n): localize Apps/Integrations directory (#3628) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/4889
- feat(l10n): localize share-copy + clipboard confirmations (#3628 Area K subset) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/4891
- fix(feed): filter blocked/muted authors from Funnelcake REST feeds (#4782) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/4887
- feat(l10n): localize remaining hardcoded UI strings - #3628 sweep (Auth, Comments, Inbox, ProofMode, For-You, Sounds, Discovery, Misc) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/4890
- fix(ios): enable Swift Package Manager by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/4893
- ci(codemagic): publish Android builds to production by @rabble in https://github.com/divinevideo/divine-mobile/pull/4898
- fix(timeline): simplify maxDuration calculation for track by @hm21 in https://github.com/divinevideo/divine-mobile/pull/4915
- fix: explore search by opening unified search route by @hm21 in https://github.com/divinevideo/divine-mobile/pull/4901
- feat(timeline): add width parameter to TimelineTrimHandles for improved drag interaction by @hm21 in https://github.com/divinevideo/divine-mobile/pull/4907
- fix(startup): prevent entire app rebuild twice on startup by @hm21 in https://github.com/divinevideo/divine-mobile/pull/4918
- fix(router): prevent video feed teardown on background review-status refetch by @hm21 in https://github.com/divinevideo/divine-mobile/pull/4913
- chore(toolchain): upgrade Flutter 3.41.9 3.44.0 / Dart 3.12.0 by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/4917
- fix(notifications): reclassify misattributed video notifications as actor-anchored by @untreu2 in https://github.com/divinevideo/divine-mobile/pull/4920
- fix(feed): content filters not reactively applied to feeds by @untreu2 in https://github.com/divinevideo/divine-mobile/pull/4921
- feat(quick-actions): add home/lock screen camera widget by @hm21 in https://github.com/divinevideo/divine-mobile/pull/4880
- fix(categories): degrade to emoji when a category SVG asset is missing by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/4926
- fix(bluesky): correct crosspost status endpoint and response key mapping by @rabble in https://github.com/divinevideo/divine-mobile/pull/4922
- feat(feeds): send viewer language hints by @rabble in https://github.com/divinevideo/divine-mobile/pull/4909
- feat(video-editor): composite proof mode progress tracking by @hm21 in https://github.com/divinevideo/divine-mobile/pull/4810
- fix(auth): clarify returning-user sign-in and post-review route by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/4911
- fix(auth): remove local accounts from device cleanly by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/4924
- fix(test): de-flake minor-account-review under-13 support screen test by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/4949
- chore: update video-editor package to support SPM by @hm21 in https://github.com/divinevideo/divine-mobile/pull/4935
- fix(nip17): NIP-17/44/59 crypto hardening (security review for #570) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/4943
- fix(ci): handle FlutterFramework SPM deployment target by @rabble in https://github.com/divinevideo/divine-mobile/pull/4957
- refactor(videos_repository): compose author feed via getAuthorFeed (#4788) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/4931
- feat(dm): route NIP-17 DMs to kind-10050 inbox relays + harden moderation report DM (#570) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/4944
- fix(feed): preserve seeded engagement counts by @rabble in https://github.com/divinevideo/divine-mobile/pull/4904
- refactor(state): migrate profile feed to ProfileFeedCubit (#4788) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/4937
- fix(feed): paginate for you recommendations with cursors by @rabble in https://github.com/divinevideo/divine-mobile/pull/4961
- chore(ci): track iOS extension signing contract by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/4966
- fix(feed): filter blocked/muted authors on detail surfaces via shouldHideVideo (#4782) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/4970
- fix(ci): remove archive-time Crashlytics upload by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/4971
- fix(reaction): centre DM reaction emoji on Android (#4954) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/4984
- fix(video-editor): ensure speed-up feature works correctly by @hm21 in https://github.com/divinevideo/divine-mobile/pull/4978
- fix(timeline): rebase markers after clip reorder and trim by @hm21 in https://github.com/divinevideo/divine-mobile/pull/4979
- fix(dm): recover full conversation list after reinstall (#4953) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/4973
- fix(feed): retry native age-gated playback by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/4884
- feat(db): SQLCipher at-rest encryption full implementation + device-QA plan (#570) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/4981
- fix(inbox): limit notification label text to one line with ellipsis by @hm21 in https://github.com/divinevideo/divine-mobile/pull/4982
- fix(ci): harden iOS SPM target patch by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/4959
- chore(deps): trim video editor lockfile churn by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/4963
- test(nip44): make vector fixture lookup workspace-safe by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/4955
- fix(drafts): migrate legacy drafts atomically to stop disappearing drafts by @untreu2 in https://github.com/divinevideo/divine-mobile/pull/4988
- fix(notifications): keep most-recent timestamp when consolidating follows by @untreu2 in https://github.com/divinevideo/divine-mobile/pull/4987
- ci(architecture): ratchet sanctioned ChangeNotifiers (#4738) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/4789
- fix(profile): preserve tapped fullscreen video by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/4993
- fix(profile): backfill partial profile video loads by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/4994
- fix(language): remove ChangeNotifier from preference service by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/4995
- test(profile_feed): cover loadMore recovery and realtime ordering by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/5007
- fix(timeline): rebase markers for speed, delete, duplicate, split by @hm21 in https://github.com/divinevideo/divine-mobile/pull/5005
- fix(playback): handle HTTP 202 as transient and abort stale source fallbacks by @hm21 in https://github.com/divinevideo/divine-mobile/pull/5000
- fix(upload): preserve uploaded thumbnail URL on success (#4997) by @hm21 in https://github.com/divinevideo/divine-mobile/pull/5002
- fix(event-cache): queue signed events until PersonalEventCache initializes by @hm21 in https://github.com/divinevideo/divine-mobile/pull/5001
- fix(videos_repository): split live engagement counts in author-feed hydration by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/5006
- feat(moderation): engagement-list block filters + search blocklist reactivity (#948) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/5014
- test(l10n): pin the content-policy disclosure invariant (#948) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/5013
- feat(blocklist): read our own kind 10000 mute list (#948) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/5012
- refactor(hashtag): move hashtag REST fetch into VideosRepository (#948) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/5024
- feat(moderation): canTarget affordance gating + profile-search block filters (#948) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/5025
- fix(deep-link): profile links use push/go/skip parity with video links by @untreu2 in https://github.com/divinevideo/divine-mobile/pull/5023
- feat(funnelcake): log unrecognised list response shapes in _unwrapListResponse by @untreu2 in https://github.com/divinevideo/divine-mobile/pull/5022
- fix(feed): stop replaying stale For You feed on cold start by @untreu2 in https://github.com/divinevideo/divine-mobile/pull/5021
- fix(feed): preserve For You recommendation order on load-more by @rabble in https://github.com/divinevideo/divine-mobile/pull/5033
- fix(video-player): guard millisecond conversions against NaN/infinite AVFoundation times by @rabble in https://github.com/divinevideo/divine-mobile/pull/5034
- fix(blocklist): reset per-account state on identity change (#4969) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/5031
- feat(audio): implement J-Cut audio anchoring and rebasing logic by @hm21 in https://github.com/divinevideo/divine-mobile/pull/5032
- feat(video-editor): add reverse playback functionality for clips by @hm21 in https://github.com/divinevideo/divine-mobile/pull/4716
- fix(feed): warm next video before preload grace by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/5015
- fix(notifications): refresh inbox on app resume by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/5018
- fix(timeline): preserve markers in clip history writes by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/5016
- fix(feed): open collaborator picker from attribution row by @rabble in https://github.com/divinevideo/divine-mobile/pull/5037
- fix(feed): keep content-warned videos paused until View Anyway is tapped by @rabble in https://github.com/divinevideo/divine-mobile/pull/5039
- fix(audio): enhance audio extraction with playback speed adjustments by @hm21 in https://github.com/divinevideo/divine-mobile/pull/5048
- fix(lists): make curated list creation reliable and visible by @rabble in https://github.com/divinevideo/divine-mobile/pull/5040
- chore(docs): relax rebase rule - only required at publish, handoff, and on conflicts by @hm21 in https://github.com/divinevideo/divine-mobile/pull/5049
- fix(notifications): consume authoritative FCM target fields in the push path by @dcadenas in https://github.com/divinevideo/divine-mobile/pull/5054
- fix(comments): load video threads from v2 API by @rabble in https://github.com/divinevideo/divine-mobile/pull/5076
- fix(notifications): harden resume refresh and remove dead realtime subsystem by @dcadenas in https://github.com/divinevideo/divine-mobile/pull/5051
- feat(profile): render website field in profile header by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/5106
- fix(firebase): guard default app initialization by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/5070
- feat(profile): add website field to Edit Profile screen by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/5109
- fix(feed): preserve home video position by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/5019
- fix(video): tombstone addressable deletes by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/5030
- fix(auth): redact BYOK verifier (embeds raw nsec) in verification error log by @rabble in https://github.com/divinevideo/divine-mobile/pull/5055
- fix(feed): close check-then-act race in subscribeToVideoFeed by @rabble in https://github.com/divinevideo/divine-mobile/pull/5059

