# Player audiobook bookmarks
> Owner/scope: profile-owned Bookmarks collections, frozen Book Title queues and manual marks. The
> common immutable playback execution contract remains [Player queues](player-queues.md).
## Collection and identity
A Book Title is an Album browsed in Books mode. The first Mark in a Title playback context
atomically creates that profile's Bookmarks collection for the Title and freezes the complete
ordered queue of its exact occurrences and MediaIDs. This queue may mix FILM and FILF and retain
repeated IDs. Later Marks append to that same collection without seeking, pausing or rebuilding
active playback. A collection displays only `
` in the Bookmarks list, has a stable Title
identity, one frozen ordered queue, and at least one mark. No empty Bookmarks collection exists. A
book's automatic saved resume context is separate: finishing the book does not delete manual marks.
A profile owns its own collections; profile or content-mode changes do not rewrite an active
playback queue.
The live Title queue persists the full retained Title membership, including unavailable items, and
the playable-to-Title ordinal mapping so this freeze remains exact after a mode change or process
restart. A mark stores the frozen queue occurrence, local microsecond position relative to that
logical playable item, and stable section title. Media3 millisecond observations are stored in
microseconds at millisecond precision. It never stores a physical source offset as the user
position. The Bookmarks list shows marks only, not every queue member, ordered by frozen queue
ordinal then local timestamp. Each row shows the section title and `(HH:)?MM:SS`, for example
`1. Испытание, 3:21`. The same queue item may have multiple marks. Selecting an available mark
activates the frozen queue at that occurrence and position, then ordinary sequential playback
continues through all following queue items. It does not jump between marks. A collection row opens
its mark list but has a visible, disabled Play action; playback starts only by selecting an
available mark. Shuffle is disabled for Books.
## Mark action and spacing
The playback Like slot becomes an equally sized Bookmark control when the active queue was started
from a Book Title or from a specific mark in that Title's frozen Bookmarks collection. A Mark made
during Bookmarks playback appends to the same collection at the exact frozen occurrence and never
rebuilds the active queue. Merely playing an effective Book file through Folders, Music, AI or an
ordinary Music playlist does not authorize Mark. A Mark of a queue item not representable at its
exact occurrence in the existing frozen collection is rejected; new Title parts are not appended to
that collection. The command captures the actual service occurrence and position, not a periodic UI
checkpoint. One press writes one mark without dialog or confirmation. A repeated delivery or
concurrent tap cannot create a duplicate.
A new mark must be at least `player.bookmarkMinSpacingSeconds` from every existing mark on the
continuous time axis of the frozen book, regardless of queue-item or chapter boundary. The
[file-only configuration](project-configuration.md#configuration-registry) defaults to 15 seconds;
equality is allowed. Existing marks remain unchanged when this startup value changes. Compare all
marks, including temporarily unavailable ones. Use known durations of intervening logical items;
update durable observations when playback provides them. Unknown required durations or unprovable
distance reject creation.
The visible Bookmark control retains its slot, size, icon and halo, uses the shared disabled role
and disabled semantics, and exposes no activation while the current position is too close, distance
is unprovable, or its exact occurrence cannot be represented. Recompute from service position on
playback updates, seeks and queue changes, and from committed marks/durations after changes or
restart. A Title without marks permits its first mark under the ordinary context and motion gates.
The active queue's source profile owns the marks, independently of the currently browsed profile.
One shared distance/admission mechanism serves the read-only UI snapshot and the atomic store guard.
Playback/UI position updates use immutable cached marks, frozen membership and durations; they
perform no SQLite queries or SAF traversal. Snapshot refreshes follow successful relevant
transactions. The command captures actual service position and rechecks inside the durable
transaction, so stale enabled state or concurrent delivery cannot bypass spacing. Disabled pointer,
keyboard and accessibility actions cannot create a mark.
Strict aaos permits Mark only while motion is UNRESTRICTED; RESTRICTED and UNKNOWN disable the
control and command. Automotive and phone permit Mark in motion without extra confirmation. This is
the sole exception to ordinary playlist-mutation policy; deleting or renaming still follows the
existing policy. The official host surface rules remain in force.
## Visibility, expiry and deletion
Books MAIN calls the launcher Bookmarks and enables it iff this profile has at least one stored
mark, even when all its media is temporarily unavailable. Music MAIN calls it Playlists and enables
it iff a nonempty Music playlist exists. Bookmarks rows and their retained section titles remain
visible but gray and non-playable while unavailable; Remove and named collection Delete remain
possible under ordinary policy. Removing the final mark deletes the collection. Named Delete
requires confirmation. Deleting a collection never changes its already active immutable playback
queue.
Temporary cached unavailability never deletes a collection or changes the frozen queue. After a
MediaID in the frozen queue disappears from the complete accepted Cuetree snapshot at TTL expiry,
delete the entire Bookmarks collection, even if no mark targets that item. If another source with
the same MediaID remains, retain it. For a Music playlist, remove expired occurrences of that ID and
delete the playlist only if it becomes empty. An available-only catalog projection, failed scan,
missing grant or temporary disconnection is not evidence of expiry. The retained Cuetree attributes
supply labels until actual expiry; never show an `Unavailable track` placeholder.