Versions in this module Expand all Collapse all v0 v0.3.2 Nov 3, 2026 v0.3.1 Nov 1, 2026 v0.3.0 Nov 1, 2026 Changes in this version + const ImageBackdrop + const ImageBanner + const ImageChannel + const ImageLogo + const ImagePerson + const ImagePoster + const ImageStill + const ImageThumb + const KindEpisode + const KindExtra + const KindSeason + const KindShow + const LibraryCollagePrefix + const SeriesNextUpLimit + var ErrAlreadyMounted = errors.New("frontend already mounted") + var ErrBadPlaylist = errors.New("invalid playlist request") + var ErrIdentityUnavailable = errors.New("frontend identity operation unavailable") + var ErrImageBatchLimit = errors.New("frontend: invalid artwork batch") + var ErrInvalidPreferences = errors.New("invalid frontend preferences") + var ErrNotAvailable = core.ErrNotAvailable + var ErrNotFound = core.ErrNotFound + var ErrNotRegistered = errors.New("frontend not registered") + var ErrPartyConflict = errors.New("watch party conflict") + var ErrPartyDenied = errors.New("watch party denied") + var ErrPartyForbidden = errors.New("watch party forbidden") + var ErrPartyNotFound = errors.New("watch party not found") + var ErrPeopleQuery = errors.New("frontend: invalid people query") + var ErrPreferencesLimit = errors.New("frontend preferences limit exceeded") + var ErrPreferencesNotFound = core.ErrNotFound + var ErrQuickConnectPending = errors.New("frontend quick connect pending") + var ErrRateLimited = errors.New("frontend identity rate limited") + var ErrRowViewStale = errors.New("frontend: row view snapshot expired or changed") + var ErrSessionBusy = errors.New("session operation capacity exhausted") + var ErrSourceGone = errors.New("frontend: offered playback source is gone") + var ErrTrackNotFound = errors.New("selected track is not available") + var ErrTrackSourceUnavailable = errors.New("verified track source unavailable") + var ErrTranscodeCapacity = errors.New("transcode capacity exhausted") + var ErrUnauthorized = core.ErrUnauthorized + func AdvertisedName(settings Settings) string + func ApplyDetailHeader(tagline, overview, header string) (string, string) + func ArtworkTitle(ctx context.Context, key core.RatingKey) (*core.Title, bool) + func ClientIP(ctx context.Context) (netip.Addr, bool) + func DefaultPort(id Protocol) (int, bool) + func KnownSDR(stream StreamInfo) bool + func LatestPlayedFilter(ctx context.Context) (played bool, ok bool) + func NormalizeLanguage(tag string) string + func QuietIdentity(ctx context.Context) bool + func SameImage(a, b Image) bool + func SynchronousArtworkDeadline(ctx context.Context) (time.Time, bool) + func WithArtworkTitle(ctx context.Context, title *core.Title) context.Context + func WithClientIP(ctx context.Context, ip netip.Addr) context.Context + func WithLatestPlayed(ctx context.Context, played bool) context.Context + func WithQuietIdentity(ctx context.Context) context.Context + func WithRequestMemo(ctx context.Context) context.Context + func WithSynchronousArtworkMetadata(ctx context.Context, budget time.Duration) context.Context + func WithoutSynchronousArtworkMetadata(ctx context.Context) context.Context + type ActivityPage struct + Items []Title + More bool + Total int + TotalExact bool + type AiredMemo struct + Err error + Items []core.Title + Total int + type Announcer interface + Close func() error + Start func(context.Context) error + type Artwork interface + List func(context.Context, ArtworkRequest) (images []Image, complete bool, err error) + Read func(context.Context, ArtworkRequest, Image, ArtworkTransform) (data []byte, contentType string, err error) + type ArtworkOwner struct + Authoritative bool + Images []Image + Item RatingKey + type ArtworkRequest struct + Channel string + Device core.Device + Item core.RatingKey + Viewer *core.Viewer + type ArtworkTransform struct + Blur bool + Format string + Height int + Width int + type AuthenticatedLazyStreams interface + ServeAuthenticated func(http.ResponseWriter, *http.Request, string, PlanRequest) + type Capabilities interface + Build func(context.Context, CapabilityRequest) (CapabilityResult, error) + type CapabilityRequest struct + Device caps.DeviceInfo + Profile caps.DeviceProfile + ProtocolInfo []string + UserAgent string + Viewer *core.Viewer + type CapabilityResult struct + Client core.ClientCaps + Quality core.QualityProfile + type CertifiedApp struct + Name string + Steps []ConnectStep + type CinemaIntros interface + Trailers func(context.Context, *core.Viewer, core.Device, core.RatingKey, int) ([]Extra, error) + type ClientCaps = core.ClientCaps + type Collection = core.Collection + type CollectionPage struct + Items []core.Collection + Total int + type CollectionQuery struct + Limit int + Offset int + Types []core.MediaType + type Command struct + ControllerSessionID string + Kind CommandKind + Message string + Position time.Duration + StreamIndex int + type CommandKind string + const CommandMessage + const CommandPause + const CommandSeek + const CommandSetAudio + const CommandSetSubtitle + const CommandStop + const CommandUnpause + type ConnectStep string + const ConnectAddServer + const ConnectInstallAddon + const ConnectOpenApp + const ConnectSignIn + type Continuation string + const ContinuationExhausted + const ContinuationMore + const ContinuationUnknown + type DecideOptions = core.DecideOptions + type Decision = core.Decision + type Descriptor struct + CertifiedApps []CertifiedApp + Clients []string + DefaultPort int + DocsURL string + ID Protocol + Logo string + Name string + SettingsSchema any + Version string + type DetailFacts struct + Community *float64 + Critic *float64 + Header string + RatingsKnown bool + Sources []ExternalRating + type DetailFactsSource interface + DetailFacts func(context.Context, *core.Viewer, core.Title) DetailFacts + PageRatings func(context.Context, *core.Viewer, []core.Title) map[core.RatingKey]DetailFacts + type DetailPlanner interface + DetailPlan func(ctx context.Context, request PlanRequest) (PlayPlan, error) + MatchDetailSession func(ctx context.Context, scope VersionScope, handle, sessionID string) error + ResolveDetailSource func(ctx context.Context, scope VersionScope, handle string) (DetailSourceTarget, error) + type DetailSourceTarget struct + ETag string + Item RatingKey + type Device = core.Device + func LANDevice(peer netip.Addr) Device + type DeviceIdentity interface + ResolveDevice func(context.Context, string, Device) (*Viewer, time.Time, error) + type DiscoveryRequest struct + Data []byte + Endpoint string + Peer netip.AddrPort + type DiscoveryResponder interface + RespondDiscovery func(context.Context, DiscoveryRequest) ([]byte, bool) + type EditionBatch interface + EditionsMany func(context.Context, *core.Viewer, core.Device, []core.RatingKey) (map[core.RatingKey][]Version, error) + type Editions interface + Editions func(context.Context, *core.Viewer, core.Device, core.RatingKey) ([]Version, error) + type Event struct + ActorViewerID int64 + Command *Command + Item core.RatingKey + OriginClientID string + OriginProtocol Protocol + OriginSessionID string + Session *Session + SessionID string + SubjectID string + SubjectKind string + TargetDeviceID string + TargetProtocol Protocol + Timeline *Timeline + Type string + ViewerID int64 + type EventScope struct + Device core.Device + Owner bool + Protocol Protocol + SessionID string + Viewer *core.Viewer + type Experience interface + Ancestors func(context.Context, *core.Viewer, core.Device, core.RatingKey) ([]core.Title, error) + Children func(context.Context, *core.Viewer, core.Device, core.RatingKey, ItemQuery) (core.Page, error) + Collections func(context.Context, *core.Viewer, core.Device, CollectionQuery) (CollectionPage, error) + EntityFavorites func(context.Context, *core.Viewer, []FavoriteRef) (map[FavoriteRef]bool, error) + Facets func(context.Context, *core.Viewer, core.Device, string, string) ([]core.FacetValue, error) + Item func(context.Context, ItemRequest) (ItemDetail, error) + LibraryItems func(context.Context, *core.Viewer, core.Device, string, ItemQuery) (core.Page, error) + NamedFacetIDs func(context.Context, *core.Viewer, core.Device, core.RatingKey, string, []string) (map[string]string, error) + NotInterested func(context.Context, *core.Viewer, core.Device, PageQuery) (NotInterestedPage, error) + NotInterestedItem func(context.Context, *core.Viewer, core.Device, core.RatingKey) (NotInterestedEntry, error) + PersonFacetIDs func(context.Context, *core.Viewer, core.Device, core.RatingKey, []int64) (map[int64]string, error) + RemoveFromContinue func(context.Context, *core.Viewer, core.RatingKey) error + ResolveEventSubject func(context.Context, *core.Viewer, core.Device, FavoriteRef) (ResolvedEventSubject, error) + ResolveExternal func(context.Context, *core.Viewer, core.Device, ExternalRequest) (core.RatingKey, error) + ResolveFacet func(context.Context, *core.Viewer, core.Device, string, string, string) (core.FacetValue, error) + Rows func(context.Context, RowRequest) ([]Row, error) + Search func(context.Context, *core.Viewer, core.Device, string, ItemQuery) (SearchPage, error) + SetEntityFavorite func(context.Context, *core.Viewer, FavoriteRef, bool) error + SetFavorite func(context.Context, *core.Viewer, core.RatingKey, bool) error + SetLikes func(context.Context, *core.Viewer, core.RatingKey, *bool) error + SetNotInterested func(context.Context, *core.Viewer, core.RatingKey, bool) error + SetPlayed func(context.Context, *core.Viewer, core.RatingKey) error + SetRating func(context.Context, *core.Viewer, core.RatingKey, float64) error + SetUnplayed func(context.Context, *core.Viewer, core.RatingKey) error + SetWatchlist func(context.Context, *core.Viewer, core.RatingKey, bool) error + Similar func(context.Context, *core.Viewer, core.Device, core.RatingKey, ItemQuery) (SearchPage, error) + UserData func(context.Context, *core.Viewer, []core.RatingKey) (map[core.RatingKey]core.WatchStatus, error) + Views func(context.Context, *core.Viewer) ([]View, error) + type ExternalRating struct + Display string + Name string + Score float64 + Source string + Votes int64 + type ExternalRequest struct + Episode *int + ID string + Season *int + Source string + Type core.MediaType + type Extra struct + Duration time.Duration + Height int + Key core.RatingKey + Kind string + Language string + Official bool + ParentKey core.RatingKey + PublishedAt time.Time + Source string + SourceID string + Title string + type ExtraStreams interface + Lookup func(core.RatingKey) (Extra, bool) + Open func(context.Context, core.RatingKey) (container, rawURL string, headers map[string]string, err error) + type FavoriteKind string + const FavoriteChannel + const FavoriteCollection + const FavoritePerson + const FavoriteTitle + type FavoriteRef struct + ID string + Kind FavoriteKind + type Frontend interface + Describe func() Descriptor + Mount func(context.Context, Host) (Instance, error) + type GrantDeviceIdentity interface + ResolveGrantDevice func(context.Context, string, string) (*Viewer, Device, time.Time, error) + type GrantedImage struct + Image Image + Secret string + type HLSSession = core.HLSSession + type Host struct + Artwork Artwork + AudioOrder func(audio []string, server, original string, preferOriginal bool) []string + Capabilities Capabilities + Cinema CinemaIntros + ClientIP func(*http.Request) (netip.Addr, bool) + ClientSeen func(deviceID string) + Config func() Settings + DirectProxy func(*http.Request) (*url.URL, error) + Editions Editions + Events Subscriber + Experience Experience + ExtraStreams ExtraStreams + IDs ids.Codecs + Identity SurfaceIdentity + ImageGrants ImageGrants + Images Images + LANStreams LANLazyStreams + LANViewer func(context.Context, *http.Request) (*Viewer, error) + LastPlayedSource LastPlayedSourceReader + LazyStreams LazyStreams + LiveTV LiveTV + Log *slog.Logger + MetadataLanguage func() string + PageFreshness func() PageFreshness + PersonalHomes PersonalHomeStore + PickAudio func(MediaInfo, []string) int + Preferences Preferences + SecurePortalURL func(context.Context, *http.Request) (string, error) + Sessions Sessions + SourceOffers SourceOffers + Subtitles SubtitleCatalog + SurfaceURL func(context.Context, *http.Request) (string, error) + Tickets Tickets + TrackPreferences TrackPreferenceService + VersionHandles VersionHandles + ViewerCapabilities ViewerCapabilitiesFunc + ViewerPolicy ViewerPolicy + ViewerPortalURL func(context.Context, *http.Request) (string, error) + VirtualPaths VirtualPaths + WatchParty WatchParty + type Image struct + BlurHash string + Height int + Kind string + Path string + Subject string + Tag string + ThumbHash string + Width int + type ImageBatchItem struct + Authoritative bool + Images []GrantedImage + Item core.RatingKey + type ImageBatchRequest struct + Credential string + Device core.Device + Items []core.RatingKey + Kinds []string + type ImageGrantBatch interface + IssueBatch func(context.Context, ImageBatchRequest) ([]ImageBatchItem, error) + type ImageGrantRequest struct + Channel string + Credential string + Device core.Device + Image Image + Item core.RatingKey + type ImageGrants interface + Issue func(context.Context, ImageGrantRequest) (string, error) + Revoke func(context.Context, string, string) error + Serve func(http.ResponseWriter, *http.Request, string) + type ImagePageRequest struct + Credential string + Device core.Device + Kinds []string + Titles []core.Title + type ImagePageSigner interface + SignPage func(context.Context, ImagePageRequest) ([]ImageBatchItem, error) + type Images interface + ServeHTTP func(http.ResponseWriter, *http.Request) + type Instance interface + Close func(context.Context) error + Discovery func() []Announcer + Handler func() http.Handler + Listeners func() []ListenerSpec + Status func(context.Context) Status + type ItemArtwork interface + ItemArtwork func(context.Context, *core.Viewer, core.Device, core.RatingKey) ([]Image, bool, error) + type ItemArtworkPage interface + ItemArtworkPage func(context.Context, *core.Viewer, core.Device, []core.RatingKey) (map[core.RatingKey][]Image, error) + type ItemDetail struct + CanPlay *bool + Collection *core.Collection + Extras []Extra + Images []Image + ImagesAuthoritative bool + Markers []Marker + Playlist *core.Playlist + Title core.Title + Tracks []core.StreamInfo + TracksEstimated bool + UserData core.WatchStatus + Versions []Version + type ItemProgress interface + ReportItemProgress func(context.Context, SessionAccess, core.RatingKey, Timeline) error + type ItemQuery struct + AdjacentTo core.RatingKey + Desc bool + Favorite *bool + Filter core.Filter + Limit int + Offset int + Recursive bool + Season *int + Sort core.SortOrder + StartAt core.RatingKey + Types []core.MediaType + Watched *bool + func SeriesNextUpQuery() ItemQuery + type ItemRequest struct + Device core.Device + Key core.RatingKey + Viewer *core.Viewer + type LANLazyStreams interface + IssueLAN func(context.Context, *http.Request, PlanRequest) (string, error) + ServeHTTP func(http.ResponseWriter, *http.Request) + type LastPlayedSourceReader interface + LastPlayedSource func(context.Context, *Viewer, Device, RatingKey) (*PlaybackSourceHistory, error) + type LatestItem struct + AddedAt *time.Time + Title Title + type LazyHLSStreams interface + IssueHLS func(context.Context, string, PlanRequest, StreamRequest) (string, error) + type LazyStreams interface + Issue func(context.Context, string, PlanRequest) (string, error) + ServeHTTP func(http.ResponseWriter, *http.Request) + type LibraryActivity interface + LatestAdded func(context.Context, *Viewer, Device, string, int) ([]LatestItem, error) + Resume func(context.Context, *Viewer, Device, string, []MediaType, int, int, bool) (ActivityPage, error) + type LibraryActivityGrouping interface + LatestAddedGrouped func(context.Context, *Viewer, Device, string, int, bool) ([]LatestItem, error) + type LibraryCollageSource interface + LibraryCollage func(context.Context, *Viewer, Device, string) (Image, error) + type LineupStreams interface + IssueLineup func(context.Context, string, PlanRequest) (string, error) + type ListenerSpec struct + Address string + PathPrefix string + Shared bool + TLS bool + type LiveChannel struct + Favorite bool + ID string + Images []Image + Kind string + Logo string + Name string + Number string + Rating string + type LiveGuideQuery struct + Channels []string + Device core.Device + From time.Time + Limit int + Until time.Time + type LiveProgramme struct + Artwork string + ChannelID string + End time.Time + Episode int + EpisodeTitle string + ID string + Images []Image + Item core.RatingKey + Rating string + Season int + ShowTitle string + Start time.Time + Summary string + Title string + type LiveTV interface + Channels func(context.Context, *core.Viewer) ([]LiveChannel, error) + Guide func(context.Context, *core.Viewer, LiveGuideQuery) ([]LiveProgramme, error) + ResolveChannelGUID func(context.Context, *core.Viewer, string) (LiveChannel, error) + ResolveProgrammeGUID func(context.Context, *core.Viewer, string, LiveGuideQuery) (LiveProgramme, error) + type Marker struct + End time.Duration + Start time.Duration + Type string + type MediaInfo = core.MediaInfo + type MediaType = core.MediaType + type Membership struct + AddedAt *time.Time + Present bool + type MembershipReader interface + FavoriteItem func(context.Context, *Viewer, Device, RatingKey) (Membership, error) + WatchlistItem func(context.Context, *Viewer, Device, RatingKey) (Membership, error) + type NotInterestedEntry struct + AddedAt time.Time + Key core.RatingKey + type NotInterestedPage struct + Items []NotInterestedEntry + Total int + type OpenRequest struct + Device core.Device + PlanID string + Protocol Protocol + Viewer *core.Viewer + type Page = core.Page + type PageArtwork interface + ListPage func(context.Context, *core.Viewer, core.Device, []core.Title) (map[core.RatingKey][]Image, error) + type PageFreshness struct + Accounts uint64 + ArtBucket int64 + Catalog uint64 + Config uint64 + Favorite uint64 + Grants uint64 + Hidden uint64 + Images uint64 + Listed uint64 + Safety uint64 + Watch uint64 + type PageQuery struct + Limit int + Offset int + type PartyActor struct + Device core.Device + Protocol Protocol + Viewer *core.Viewer + type PartyCommand struct + Action string + ExecuteAt time.Time + ID string + IssuedAt time.Time + Jellyfin string + Playback string + PlaylistItemID string + Position time.Duration + Rate float64 + SelectionRevision int64 + SessionID string + type PartyCreate struct + Mode string + Name string + RoomID string + type PartyEvent struct + ClientSent time.Time + Command PartyCommand + ErrorCode string + ErrorMessage string + GroupData any + GroupKind string + Reason string + Received time.Time + Sent time.Time + Type string + View PartyView + type PartyInput struct + Action string + Position time.Duration + Rate float64 + type PartyJoin struct + Code string + GroupID string + Token string + type PartyMember struct + Blocked bool + Buffering bool + Connected bool + DeviceID string + Host bool + IgnoreWait bool + Lobby bool + Name string + Protocol Protocol + Ready bool + Self bool + ViewerID int64 + type PartyPick struct + FileID string + Item core.RatingKey + LibraryID string + type PartyQueue struct + Index int + Items []core.RatingKey + Kind string + PlaylistItemID string + Position time.Duration + Repeat string + Shuffle string + type PartyQueueItem struct + ContentID string + Item core.RatingKey + PlaylistItemID string + type PartyReport struct + ClientSent time.Time + CommandID string + Ignore *bool + Kind string + Lobby *bool + Paused *bool + Playing bool + Playlist string + Position time.Duration + Rate float64 + Ready *bool + SessionID string + When time.Time + type PartySocket struct + Actor PartyActor + Close func() + Events <-chan PartyEvent + type PartyTicket struct + ExpiresIn int + MaxSeconds int + Protocol string + Ticket string + type PartyView struct + AnchorAt time.Time + AttachedSessionID string + CanManage bool + CanTransport bool + Code string + ContentID string + FileID string + Generation int64 + GuestPolicy string + HostConnected bool + IgnoreWait bool + InvitePath string + Item core.RatingKey + JoinToken string + LibraryID string + Members []PartyMember + Name string + Paused bool + Phase string + Playback string + Position time.Duration + Queue []PartyQueueItem + QueueIndex int + Rate float64 + Repeat string + Role string + RoomID string + RoomToken string + SelectionMode string + SelectionRevision int64 + Shuffle string + UpdatedAt time.Time + type PeopleImageReader interface + AuthorizePersonImage func(context.Context, *Viewer, Device, RatingKey, Image, ...) error + type PeopleQuery struct + Limit int + Query string + Scope PeopleScope + type PeopleReader interface + People func(context.Context, *Viewer, Device, PeopleQuery) ([]PersonDetail, error) + Person func(context.Context, *Viewer, Device, string, PersonReadOptions) (PersonDetail, error) + PersonCredit func(context.Context, *Viewer, Device, RatingKey, int64) (PersonDetail, error) + type PeopleScope string + const PeopleAll + const PeopleEpisodes + const PeopleMovies + const PeopleSeries + const PeopleVideo + const PeopleVideoWithEpisodes + type Person = core.Person + type PersonArtwork interface + PersonImages func(context.Context, ArtworkRequest, Title) ([]Image, error) + type PersonDetail struct + ArtworkItem RatingKey + ID string + IMDB string + Images []Image + Name string + TMDB int64 + type PersonReadOptions struct + Prefetch bool + type PersonalHomeStore interface + LoadPersonalHome func(ctx context.Context, protocol string, viewerID int64, config string) ([]byte, error) + PersonalHomeViewers func(ctx context.Context) ([]core.User, error) + SavePersonalHome func(ctx context.Context, protocol string, viewerID int64, config string, ...) error + type Placement string + const PlacementDetail + const PlacementHome + const PlacementLibrary + type PlanRequest struct + Caps core.ClientCaps + Channel string + DetailSource string + Device core.Device + ExpectedSourceETag string + Intent PlayIntent + Item core.RatingKey + Protocol Protocol + ResolvedRelease string + Version string + Viewer *core.Viewer + type PlayIntent struct + AllowTranscoding *bool + AudioOrdinal *int + AudioSet bool + ClientSessionID string + Estimate bool + ExactVersion bool + Options core.DecideOptions + PlaybackID string + Plex *PlexHints + Position time.Duration + PreferRemux bool + SubtitleSet bool + SubtitleStreamIndex *int + type PlayPlan struct + Decision core.Decision + DetailSource string + DirectPlay bool + DirectStream bool + ETag string + Estimated bool + HLS bool + HLSContainer string + ID string + Media core.MediaInfo + Transcoding bool + type PlaybackSourceHistory = core.PlaybackSourceHistory + type Playlist = core.Playlist + type PlaylistLibrary interface + AddPlaylistItems func(context.Context, *core.Viewer, core.RatingKey, []core.RatingKey) error + CreatePlaylist func(context.Context, *core.Viewer, string, []core.RatingKey) (*core.Playlist, error) + DeletePlaylist func(context.Context, *core.Viewer, core.RatingKey) error + MovePlaylistItem func(context.Context, *core.Viewer, core.RatingKey, int, int) error + Playlists func(context.Context, *core.Viewer, PageQuery) (PlaylistPage, error) + RemovePlaylistItem func(context.Context, *core.Viewer, core.RatingKey, int) error + type PlaylistPage struct + Items []core.Playlist + Total int + type PlexHints struct + AudioSelection int + Collection string + MediaIndex int + PartReleaseID string + SubtitleSelection int + SubtitleSet bool + SubtitleStream *core.StreamInfo + type Preferences interface + Delete func(context.Context, *core.Viewer, string, string) error + Get func(context.Context, *core.Viewer, string, string) (json.RawMessage, error) + Put func(context.Context, *core.Viewer, string, string, json.RawMessage) error + type ProgressSample struct + InstallationID string + Paused bool + PositionSeconds float64 + Sequence uint64 + Stop bool + type Protocol = core.Protocol + type PublicViewer struct + HasConfiguredPassword *bool + ID int64 + Name string + type QuickConnectDetails struct + Approved bool + Code string + CreatedAt time.Time + Device core.Device + ExpiresAt time.Time + Secret string + type RatingKey = core.RatingKey + func ExtraKey(id int64) RatingKey + func MovieKey(tmdb int64) RatingKey + func SeasonKey(show int64, season int) RatingKey + func ShowKey(tmdb int64) RatingKey + type Registry struct + func NewRegistry(host func(Protocol) Host) *Registry + func (r *Registry) Descriptors() []Descriptor + func (r *Registry) Instance(id Protocol) (Instance, bool) + func (r *Registry) Mount(ctx context.Context, id Protocol) (Instance, error) + func (r *Registry) Register(f Frontend) error + func (r *Registry) Unmount(ctx context.Context, id Protocol) error + func (r *Registry) ValidateSettings(id Protocol, settings Settings) (bool, error) + type RelatedArtwork struct + People []Image + PeopleAuthoritative bool + Season *ArtworkOwner + Series *ArtworkOwner + type RelatedArtworkProvider interface + RelatedArtwork func(context.Context, *Viewer, Device, RatingKey) (RelatedArtwork, error) + type ReportOutcome string + const ReportApplied + const ReportConflict + const ReportReplayed + const ReportStale + type RequestMemo struct + Aired map[core.RatingKey]AiredMemo + Mu sync.Mutex + Viewer *core.User + Visible map[core.RatingKey]bool + func RequestMemoFrom(ctx context.Context) *RequestMemo + type ResolvedEventSubject struct + Favorite bool + PersonFacetID string + Ref FavoriteRef + UserData *core.WatchStatus + type RouteSource interface + Routes func() []conform.Route + type Row struct + Collection core.RatingKey + Entries []RowEntry + Handle string + ID string + ImpressionID string + Items []core.Title + Kind string + Layout RowLayout + More bool + Promoted bool + Purpose RowPurpose + Rank int + Style string + Title string + type RowDirectory struct + Description string + ID string + Image string + Kind string + Title string + type RowEntry struct + Collection *core.Collection + Directory *RowDirectory + Handle string + Kind RowEntryKind + LiveChannel *RowLiveChannel + Playlist *core.Playlist + Title *core.Title + type RowEntryKind string + const RowEntryCollection + const RowEntryDirectory + const RowEntryLiveChannel + const RowEntryPlaylist + const RowEntryTitle + type RowInteraction struct + Device core.Device + Handle string + Kind RowInteractionKind + Protocol Protocol + Viewer *core.Viewer + type RowInteractionKind string + const RowClick + const RowImpression + const RowPlay + type RowInteractionReporter interface + ReportRowInteraction func(context.Context, RowInteraction) error + type RowLayout struct + Order int + Paint RowPaint + Style string + type RowLiveChannel struct + Current *RowProgramme + GuideReference string + ID string + Images []Image + Logo string + Name string + Next *RowProgramme + Number string + type RowPaint struct + Accent string + Artwork string + Background string + Foreground string + type RowProgramme struct + End time.Time + Episode int + EpisodeTitle string + ID string + Item core.RatingKey + Season int + Start time.Time + Title string + type RowPurpose = core.RowPurpose + const RowCollection + const RowContinue + const RowLive + const RowNextUp + const RowRecentlyAdded + const RowRecentlyReleased + const RowRecommendation + const RowWatchlist + type RowRequest struct + Device core.Device + Item core.RatingKey + Limit int + Placement Placement + Purpose RowPurpose + ViewID string + Viewer *core.Viewer + type RowView struct + ID string + Kind string + Layout RowLayout + Purpose RowPurpose + Rank int + Title string + type RowViewPage struct + Entries []RowEntry + ImpressionHandle string + More bool + Total int + TotalExact bool + Truncated bool + type RowViewPageRequest struct + Device Device + ID string + Kinds []RowEntryKind + Limit int + Offset int + Protocol Protocol + Viewer *Viewer + type RowViewRequest struct + Device Device + Item RatingKey + Placement Placement + Protocol Protocol + Refresh bool + ViewID string + Viewer *Viewer + type RowViews interface + ListRowViews func(context.Context, RowViewRequest) ([]RowView, error) + ResolveRowView func(context.Context, RowViewPageRequest) (RowViewPage, error) + type SampleReporter interface + ReportSample func(context.Context, SessionAccess, string, ProgressSample) (ReportOutcome, error) + type ScopedMedia interface + ServeMediaAccess func(http.ResponseWriter, *http.Request, SessionAccess) + type ScopedTrackPreferenceService interface + DeleteScoped func(context.Context, *Viewer, string, string, string) error + GetScoped func(context.Context, *Viewer, TrackScope) (TrackPreferences, int, int, string, map[string]string, error) + SetAppearance func(context.Context, *Viewer, json.RawMessage) error + SetAudio func(context.Context, *Viewer, []string) error + SetBitrate func(context.Context, *Viewer, int) error + SetHeight func(context.Context, *Viewer, int, string) error + SetScoped func(context.Context, *Viewer, string, string, TrackPreferencePatch) error + SetSubtitleLanguage func(context.Context, *Viewer, []string) error + SetSubtitleMode func(context.Context, *Viewer, string) error + type SearchPage struct + Continuation Continuation + Page core.Page + TotalExact bool + type Session struct + Capabilities *SessionCapabilities + Channel string + ClientSessionID string + Device core.Device + ID string + Item core.RatingKey + Media *core.MediaInfo + MediaPath string + Protocol Protocol + StartedAt time.Time + ViewerID int64 + type SessionAccess struct + Device core.Device + Owner bool + Protocol Protocol + Viewer *core.Viewer + type SessionBusyError struct + RetryAfter time.Duration + func (*SessionBusyError) Error() string + func (*SessionBusyError) Is(target error) bool + type SessionCapabilities struct + AppStoreURL string + DeviceProfile json.RawMessage + IconURL string + PlayableMediaTypes []string + SupportedCommands []string + SupportsMediaControl *bool + SupportsPersistentIdentifier *bool + SupportsRemoteControl *bool + type SessionMarkers struct + Known bool + Markers []Marker + SourceETag string + type Sessions interface + Capabilities func(context.Context, SessionAccess) (SessionCapabilities, error) + Command func(context.Context, *core.Viewer, string, Command) error + Events func(context.Context, EventScope) (<-chan Event, error) + Markers func(context.Context, SessionAccess, string) (SessionMarkers, error) + Open func(context.Context, OpenRequest) (Session, error) + Plan func(context.Context, PlanRequest) (PlayPlan, error) + Recover func(context.Context, string, string, time.Duration) error + Report func(context.Context, SessionAccess, string, Timeline) error + ServeMedia func(http.ResponseWriter, *http.Request) + Sessions func(context.Context, SessionAccess) ([]Session, error) + StartStream func(context.Context, SessionAccess, string, StreamRequest) (string, error) + Stop func(context.Context, SessionAccess, string) error + SubtitleURL func(context.Context, SessionAccess, string, int, string) (string, error) + TranscodeFor func(context.Context, string) (core.HLSSession, bool) + UpdateCapabilities func(context.Context, SessionAccess, SessionCapabilities) error + type Settings map[string]any + type SettingsValidator interface + ValidateSettings func(Settings) error + type SortOrder = core.SortOrder + type SourceOffer struct + ExpiresAt time.Time + ID string + Target SourceOfferTarget + type SourceOfferTarget struct + DetailSource string + ETag string + Item RatingKey + VersionHandle string + type SourceOffers interface + Issue func(context.Context, VersionScope, SourceOfferTarget) (SourceOffer, error) + IssueBatch func(context.Context, VersionScope, []SourceOfferTarget) ([]SourceOffer, error) + Resolve func(context.Context, VersionScope, string) (SourceOffer, error) + Revoke func(context.Context, VersionScope, string) error + type Status struct + Addresses []string + Clients24h int + Clients24hKnown bool + Conformance string + ConnectURLs []string + Error string + LAN string + LiveStreams int + LiveStreamsKnown bool + Mounted bool + TargetVersion string + WAN string + Warnings []string + type StreamFormat string + const StreamDASH + const StreamDirect + const StreamHLS + const StreamHTTP + type StreamInfo = core.StreamInfo + type StreamRequest struct + Format StreamFormat + Position time.Duration + SegmentDuration time.Duration + type Subscriber interface + Subscribe func(context.Context, EventScope) (<-chan Event, error) + type SubtitleCatalog interface + Download func(context.Context, *core.Viewer, core.Device, core.RatingKey, string) (int, error) + Enabled func() bool + Search func(context.Context, *core.Viewer, core.Device, core.RatingKey, string) ([]SubtitleOffer, error) + type SubtitleOffer struct + AITranslated bool + Author string + Downloads int + Forced bool + Format string + HashMatch bool + HearingImpaired bool + ID string + Language string + Name string + Provider string + Rating float64 + type SurfaceIdentity interface + IssueRefresh func(context.Context, string, core.Device) (string, error) + PublicViewers func(context.Context) ([]PublicViewer, error) + QuickConnectApprove func(context.Context, *core.Viewer, string) error + QuickConnectDetails func(context.Context, string) (QuickConnectDetails, error) + QuickConnectInitiate func(context.Context, core.Device) (code, secret string, err error) + QuickConnectPoll func(context.Context, string) (string, error) + QuickConnectStatus func(context.Context, string) (approved bool, err error) + Refresh func(context.Context, string, core.Device) (string, string, error) + Resolve func(context.Context, string) (*core.Viewer, error) + Revoke func(context.Context, string) error + SetupComplete func() bool + SignIn func(context.Context, string, string, core.Device) (string, error) + ViewerTimes func(context.Context, string, int64) (ViewerTimes, error) + func BindIdentity(resolver core.Identity, surface Protocol) SurfaceIdentity + type Ticket struct + Device Device + SourceHash string + Viewer *Viewer + type Tickets interface + Active func(context.Context, Ticket) (bool, error) + Consume func(context.Context, string, string) (Ticket, error) + Issue func(context.Context, string, Device, string) (string, error) + type Timeline struct + ClientSessionID string + Duration time.Duration + PlaybackID string + Position time.Duration + Sequence uint64 + State string + type Title = core.Title + func LoadSeriesNextUp(ctx context.Context, exp Experience, viewer *Viewer, device Device, ...) (*Title, error) + func SeriesNextUp(eps []Title, st map[RatingKey]WatchStatus, series RatingKey, resumable bool, ...) *Title + type TrackPreferencePatch struct + AudioLanguages *[]string + MaxBitrateKbps *int + MaxHeight *int + PreferredQuality *string + SubtitleAppearance *json.RawMessage + SubtitleLanguages *[]string + SubtitleMode *string + type TrackPreferenceService interface + Get func(context.Context, *Viewer) (TrackPreferences, error) + SetSubtitle func(context.Context, *Viewer, []string, string) error + type TrackPreferences struct + AudioLanguages []string + PreferOriginal bool + SubtitleAppearance json.RawMessage + SubtitleLanguages []string + SubtitleMode string + type TrackScope struct + Device string + Library string + Series string + type TranscodeCapacityError struct + Cause error + RetryAfter time.Duration + func (e *TranscodeCapacityError) Error() string + func (e *TranscodeCapacityError) Is(target error) bool + func (e *TranscodeCapacityError) Unwrap() error + type TrickplayOffer struct + Bandwidth int + Columns int + Count int + Height int + Interval time.Duration + Rows int + Width int + type TrickplayTiles interface + TrickplayOffer func(context.Context, SessionAccess, core.RatingKey) (TrickplayOffer, bool) + TrickplaySheet func(context.Context, SessionAccess, core.RatingKey, int) ([]byte, error) + type Version struct + AddedAt time.Time + DateModified *time.Time + ETag string + Edition string + FileName string + FirstObservedAt *time.Time + ID string + Markers []Marker + Media core.MediaInfo + Name string + PartCount *int + PublishedAt *time.Time + type VersionHandleBatch interface + IssueBatch func(context.Context, VersionScope, core.RatingKey, []string) (map[string]string, error) + type VersionHandles interface + Issue func(context.Context, VersionScope, core.RatingKey, string) (string, error) + MatchSession func(context.Context, VersionScope, string, string) error + Resolve func(context.Context, VersionScope, string) (VersionTarget, error) + type VersionScope struct + Caps core.ClientCaps + Device core.Device + Protocol Protocol + Viewer *core.Viewer + type VersionTarget struct + Item core.RatingKey + Release string + type VersionedPreferences interface + GetVersioned func(context.Context, *core.Viewer, string, string) (json.RawMessage, int64, time.Time, error) + PutVersioned func(context.Context, *core.Viewer, string, string, json.RawMessage) (int64, time.Time, error) + type View struct + ID string + Name string + Type core.MediaType + Virtual bool + type Viewer = core.Viewer + type ViewerCapabilities struct + AllowedLibraries *[]View + BlockedTags *[]string + CanDownload *bool + CanManageLiveTV *bool + CanPlay *bool + CanPlayRemote *bool + CanRemux *bool + CanTranscode *bool + CanTranscodeAudio *bool + CanTranscodeVideo *bool + CanUseLiveTV *bool + HasLocalPassword *bool + IsOwner *bool + MaxActiveSessions *int + MaxRating *string + PeerRemote *bool + RemoteBitrateKbps *int + type ViewerCapabilitiesFunc func(context.Context, *Viewer, Device, netip.Addr) (ViewerCapabilities, error) + type ViewerPolicy interface + SetMaxRating func(context.Context, *Viewer, string) error + type ViewerTimes struct + LastActivity time.Time + LastLogin time.Time + type VirtualPaths interface + Base func(context.Context, *http.Request) (string, error) + Path func(context.Context, *Viewer, Device, RatingKey) (string, error) + Paths func(context.Context, *Viewer, Device, []RatingKey) (map[RatingKey]string, error) + type WatchParty interface + Create func(context.Context, PartyActor, PartyCreate) (PartyView, error) + End func(context.Context, PartyActor, string, string) error + Get func(context.Context, PartyActor, string, string) (PartyView, error) + IssueTicket func(context.Context, PartyActor, string, string) (PartyTicket, error) + Join func(context.Context, PartyActor, PartyJoin) (PartyView, error) + Leave func(context.Context, PartyActor) error + List func(context.Context, PartyActor) []PartyView + OpenSocket func(context.Context, string, string) (PartySocket, error) + Policy func(context.Context, PartyActor, string, string, string) (PartyView, error) + Queue func(context.Context, PartyActor, PartyQueue) error + Report func(context.Context, PartyActor, PartyReport) error + Select func(context.Context, PartyActor, string, string, PartyPick) (PartyView, error) + Start func(context.Context, PartyActor, string, string) (PartyView, error) + Stop func(context.Context, PartyActor, string, string) (PartyView, error) + Subscribe func(PartyActor) (<-chan PartyEvent, func()) + Transport func(context.Context, PartyActor, string, string, PartyInput) error + type WatchStatus = core.WatchStatus