Summary
Add support for attaching and playing reusable sounds on image and carousel posts.
Motivation
Reusable sounds currently work naturally for videos because the rendered video already contains the actual audio. The post-level sound reference is only an indicator/indexing reference for discoverability, attribution, and sound pages.
Images and carousels do not contain audio, so using a sound there requires explicit client playback behavior in addition to the existing sound reference.
Context
Related code:
- Image/carousel posting:
lib/src/core/network/atproto/data/repositories/feed_repository_impl.dart
- Image review flow:
lib/src/features/posting/ui/pages/image_review_page.dart
- Feed post sound hydration/display:
lib/src/core/network/atproto/data/models/feed_models.dart
- Sound picker/editor plumbing under
lib/src/core/pro_video_editor/
The lexicon shape already allows so.sprk.feed.post#sound alongside image media, so, as far as I know, there aren't any changes on the server that are needed.
The main client work is likely selecting a sound for image posts and playing the hydrated sound audio for static media.
Proposed direction
- Let image/carousel posts select a reusable sound during creation.
- Persist the selected sound as the post-level
sound strong ref.
- For videos, keep current behavior: do not derive playback from
sound; use the video's embedded audio.
- For images/carousels, play the hydrated sound audio when the post is active/visible.
- Treat carousel sound as post-level continuous audio, not per-image audio.
Acceptance criteria
- Image and carousel posts can be created with a selected reusable sound.
- Sound pages include image/carousel posts that use the selected sound.
- Static media posts with sounds play audio in-feed without affecting video sound behavior.
- Visibility, pause/resume, and carousel swipes do not cause obvious audio desync or unintended restarts.
Summary
Add support for attaching and playing reusable sounds on image and carousel posts.
Motivation
Reusable sounds currently work naturally for videos because the rendered video already contains the actual audio. The post-level
soundreference is only an indicator/indexing reference for discoverability, attribution, and sound pages.Images and carousels do not contain audio, so using a sound there requires explicit client playback behavior in addition to the existing
soundreference.Context
Related code:
lib/src/core/network/atproto/data/repositories/feed_repository_impl.dartlib/src/features/posting/ui/pages/image_review_page.dartlib/src/core/network/atproto/data/models/feed_models.dartlib/src/core/pro_video_editor/The lexicon shape already allows
so.sprk.feed.post#soundalongside image media, so, as far as I know, there aren't any changes on the server that are needed.The main client work is likely selecting a sound for image posts and playing the hydrated sound audio for static media.
Proposed direction
soundstrong ref.sound; use the video's embedded audio.Acceptance criteria