Original release notes
Stop motion is the big one in this build. Open the camera, choose Stop Motion, and make a loop one frame at a time. You can reorder or delete frames, change how long they stay on screen, add audio and layers, save a session to Clips, and come back to it later.
There's plenty more:
- Clip splitting is now instant, audio waveforms appear on the timeline, and trimmed moments can be saved back to Clips.
- Drafts can be duplicated, so you can take the same project in two different directions.
- Long-press a shared video in DMs to save it.
- Interrupted publishes can pick up where they left off, with sturdier background publishing on iOS.
- Tap Home while already on Home to jump back to the top and refresh. For You should also repeat fewer videos you've just watched.
- Existing sessions can open offline and recover when the connection returns.
- Saved videos now use the refreshed Divine wordmark.
We also fixed sticky camera zoom on iOS, ProofMode retry failures, age-gated media loading, Bluesky username claims, broken navigation, playback crashes, and a pile of smaller rough edges.
Please hammer on Stop Motion: shoot a few frames, undo one, reorder them, change the timing, add sound, leave and come back, then publish. Tell us if anything disappears, drifts out of sync, or gets stuck.
---
What's Changed
- fix(video): bump pro_video_editor to 2.6.0 to fix clip split freeze by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6048
- fix(nostr): add signature verification policy setting by @rabble in https://github.com/divinevideo/divine-mobile/pull/5934
- docs(l10n): translate Nostr signature verification settings by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/6052
- test(vgv): gate per-package merged-isolate channel leaks (#5838) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6061
- chore: remove dead support-key placeholder constant by @mbradley in https://github.com/divinevideo/divine-mobile/pull/5963
- fix(profile): offline-tolerant username save (#3161) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6063
- fix(video-editor): preserve allow_audio_reuse when editing cached videos by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6051
- chore(minor-safety): scrub the dead support-pubkey from bug-report docs by @mbradley in https://github.com/divinevideo/divine-mobile/pull/6073
- fix(audio-attribution): credit the original creator for reused audio by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6066
- test(packages): stop leaked platform singletons across merged isolates by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6060
- fix(minor-safety): point minor-review endpoints at the relay-manager host by @mbradley in https://github.com/divinevideo/divine-mobile/pull/6072
- test(vgv): gate Tier-3/Tier-4 process-globals in the merged isolate by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6059
- fix(dm): make DM message delivery durable (OK-confirm + queue-aware retry + 10050 routing) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6046
- chore: remove dead code found during #4803 icon-migration audit by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6078
- fix(dm): classify Keycast verified_minor policy-denial (403) as terminal, not retryable by @mbradley in https://github.com/divinevideo/divine-mobile/pull/6069
- style(design-system): migrate error-state and people/group icons to DivineIcon (#4803) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6077
- fix(dm): address post-merge review of #6046 (Keycast timeout, group-send cancel/dedup, retry heartbeat, relay repair) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6075
- fix(divine_video_player): prevent SIGABRT from invalid AVVideoComposition by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6079
- chore(minor-safety): replace personal-key test fixture 78a5c21b with a synthetic pubkey by @mbradley in https://github.com/divinevideo/divine-mobile/pull/6096
- refactor(divine-ui): unify DiVineAppBarIconButton and DivineIconButton by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6076
- fix(follow): drop invalid pubkeys from the contact list by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6104
- fix(likes): floor the addressable like count against the relay resolve (#6022) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6102
- fix(dm): use a bottom sheet instead of a snackbar for failed-send recovery by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6082
- fix(trust-safety): log moderation-pubkey pin divergence + ignore NIP-05 redirects (#4948) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6106
- fix(db): recover automatically from runtime SQLite corruption by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6107
- fix(categories): fall back to emoji when a category has no bundled SVG by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6131
- fix(ios): bump connectivity_plus to 7.3.0 to stop background engine crash by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6130
- fix(camera): scope iOS Now Playing session to foreground by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6110
- fix(likes): own "liked" heart un-fills on your own video after an edit by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6123
- feat(video): emit an inspired-by p-tag so the referenced creator is notifiable by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6132
- fix(nostr): guard queryEvents against a disposed client's closed pool by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6089
- feat(deep-links): open playlist links in-app via /list/:pubkey/:listId by @mbradley in https://github.com/divinevideo/divine-mobile/pull/6094
- chore: Prevent relay reconnects during Nostr startup by @dcadenas in https://github.com/divinevideo/divine-mobile/pull/6101
- fix(video_editor): instant trim-based clip split + guard teardown races by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6134
- fix(auth): handle NIP-46 auth_url challenge as non-terminal in nostrconnect pairing by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6151
- fix(dm): create app-shell badge cubits eagerly to stop re-entrant lazy create (#6115) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6146
- feat(video_editor): draw each clip's waveform over its thumbnails by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6149
- feat(video-editor): save a trimmed clip to the clip library (#5322) by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6155
- feat(account): opt-in @divine.video username burn on account deletion (#6126) by @mbradley in https://github.com/divinevideo/divine-mobile/pull/6138
- test(integration): exception-safe ErrorWidget.builder/onError restores (#5839) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6156
- chore(release): bump app version to 1.0.17 by @rabble in https://github.com/divinevideo/divine-mobile/pull/6160
- refactor(config): remove legacy backend host references by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6159
- fix(camera): stop zoom sticking at random positions on iOS by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6064
- fix(proofmode): let users recover when C2PA signing or rendering fails by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6068
- feat: add tap to refresh on home tab by @missaustraliana in https://github.com/divinevideo/divine-mobile/pull/4834
- test(event-router): restore coverage and document unsupported routing kinds by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6164
- chore(deps): remove misplaced/unused root dependencies (#3631, #3632) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6165
- chore(deps): migrate media_kit_video to pub and harden the c2pa_flutter git pin by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6167
- chore(fonts): register OFL licenses for bundled fonts and de-duplicate font assets by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6168
- feat(account): delete-account identity + username confirmation (#6137) by @mbradley in https://github.com/divinevideo/divine-mobile/pull/6158
- fix(feed): guard ref-after-await in ClassicVinesTab._refreshClassics by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6162
- fix(upload): re-drive stuck uploads on app resume and startup by @rabble in https://github.com/divinevideo/divine-mobile/pull/6084
- docs: fix stale Linux desktop dependency documentation by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6172
- fix(feed): ignore double-tap-to-like on your own video by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6169
- fix(nostr): guard against spurious startup NostrClient rebuild and run the #2144 repair after auth restore by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6173
- chore(cache-sync): add MigrationStrategy + wipe legacy key residue by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6175
- test(upload): de-flake in-flight marker assertion when file is missing by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6193
- refactor(badges): move BadgeRepository to a repository-consistent home by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6190
- ci(testing): guard test/unit re-accretion + mirror-structure cleanup (#4337 WS-7) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6192
- fix(crash): treat MediaCacheImageProvider load failures as non-fatal by @rabble in https://github.com/divinevideo/divine-mobile/pull/6180
- test(perf): cover VideoEventService trace completion idempotency by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6191
- fix(crash): guard GoRouter extra casts against restored maps by @rabble in https://github.com/divinevideo/divine-mobile/pull/6182
- fix(profile): stop stale kind-0 events blanking the cached profile by @rabble in https://github.com/divinevideo/divine-mobile/pull/6179
- fix(blurhash): own spec-correct codec, drop unmaintained blurhash_dart by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6189
- feat(profile): read NIP-39 claims from kind 10011 and persist verification cache (#3936) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6176
- fix(bluesky): route users without a claimed handle to the claim flow (#3275) by @rabble in https://github.com/divinevideo/divine-mobile/pull/6139
- fix(ios): finish background publishes and recover routes by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/6199
- feat(upload): resume interrupted publishes from the server's last offset by @rabble in https://github.com/divinevideo/divine-mobile/pull/6086
- fix(router): keep New video taps in pooled feed by @rabble in https://github.com/divinevideo/divine-mobile/pull/6204
- fix(nostr): snapshot query results before persistence by @rabble in https://github.com/divinevideo/divine-mobile/pull/6202
- docs(architecture): add a discoverable app-layering reference by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6206
- fix(video-player): stop EventChannel sends while app is backgrounded by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6220
- feat(perf): trace video generation and camera startup time by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6218
- fix(media-cache): cancel in-flight downloads when app is backgrounded by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6222
- fix(crash): downgrade all NetworkImage HTTP failures to non-fatal by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6228
- fix(video-recorder): crash-proof clip-delete Undo and finalize it on recorder exit by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6232
- fix(analytics): align creator video count with profile by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/6207
- fix(comment-video): preserve video metadata from REST comments by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/6208
- fix(support): ignore unknown moderation labels by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/6211
- feat(drafts): add duplicate project option by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6231
- fix(video): migrate off video_player (FVP) to divine_video_player by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6225
- chore(ui): add design-system drift ratchets (#6145) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6230
- fix(feed): deprioritize recently seen For You videos by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/6212
- fix(authentication): allow offline access for existing sessions by @NotThatKindOfDrLiz in https://github.com/divinevideo/divine-mobile/pull/6245
- fix(auth): read keycast login error code and nudge toward sign-in options by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6247
- feat(dm): save shared videos from messages by @rabble in https://github.com/divinevideo/divine-mobile/pull/6213
- chore(feature-flags): remove unused feature flags by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6256
- fix(video-recorder): meet 48dp min touch target on mode selector by @hm21 in https://github.com/divinevideo/divine-mobile/pull/6258
- fix(router): make every route-error screen escapable (safePop + home button) by @realmeylisdev in https://github.com/divinevideo/divine-mobile/pull/6264

