Using Sofa King¶
This page covers the guide, the library, recordings, the channels the guide lists, multiview, the remote and keyboard controls, captions and the settings. Getting started connects the app to a server first.
Guide¶
The app opens where you left it, and Open on start changes that. With no server set, the guide shows Connect to your Sofa King server with the header's Settings button focused; press OK and connect to the server.
Moving around the guide¶
The Now chip, the Guide key and the Menu key return to the current time on the focused channel. Fast Forward and Rewind move the grid a whole day ahead and back, up to six days, keeping the time of day and the focused channel; the range above the channel names reads Tomorrow or the weekday, and a day's programs load the first time you move to it. Coming back to the app after half an hour or more away (Home, the screen off or standby) moves the grid to the current time on the focused channel, unless you had moved it to another day.
Search and filters¶
Search filters by channel name, number or current program, and lists a channel's later programs that match on a Later today line under its row, each with its start time; OK on one moves the grid to that program. The Search key starts voice search through the TV's speech recognizer and focuses the first match; the Search chip, a TV without a recognizer, or a dismissed recognizer open the text field instead. All, Favorites, Recent (the last ten channels watched full screen for at least 10 seconds, newest first) and category chips select channel groups, and the app reopens on the chip you chose last. Movies now, Sports now, Kids now and News now list the channels whose current program the guide files under that kind; each shows only while some channel has one, and the lists are read again every five minutes. On a server that offers it, the last chip, On later, opens a page of what is coming up today and tomorrow on the channels the guide shows, in Movies, Sports, Kids and Premieres (a new first episode of a season), soonest first, each with its day, time, channel and marks; OK on one opens its details, where Record, Record series, Add to watchlist and Watch work as in the guide, and Back returns to the guide.
Preview¶
The focused channel plays in a muted preview after 350 ms. Focus resting on it then does the following:
| Rest | Happens |
|---|---|
| 5 s | Preview sound comes on |
| 10 s | Channel opens full screen, continuing the preview's stream |
Settings → Live TV sets the 10 s delay (Off, 10 or 30 seconds) and turns preview sound off. The channel never opens by itself while a screen reader is on (TalkBack, VoiceOver) or while the preview shows Preview unavailable.
- A key press restarts both timers and mutes the preview. A touch, mouse press or scroll restarts them too, and the channel then stays closed until the next key press, so scrolling by hand never opens a channel under your finger.
- OK opens the channel full screen at once.
- Back returns to the guide focused on the channel you were watching (including one you changed to in the player), preview muted. A filter or search that hides it switches back to All, and a time cursor in the past moves to now. The channel just left does not reopen by itself until focus moves to another.
- On Android the muted preview leaves other apps' sound playing and takes over only when its own comes on. A channel that opened by itself lets the screen saver start until you press a key.
Program details¶
The Info key, or holding OK on a program, opens its details: the image, title, episode, time with how long is left or until it starts, rating and description, with Watch, Add to favorites (or Remove from favorites) and Close, and Watch from start while the program is being recorded, which plays the recording from its start; on a TV the details open in a panel beside the grid, elsewhere in a sheet.
On a server that records, a program that has not ended also has Record, which schedules it (Cancel recording takes it off again), and Record series, which records every airing of its title on that channel (Stop series deletes the rule and the recordings it scheduled, keeping the ones already made); beside Record series, Padding steps a new rule's padding and the channel button switches it between this channel only and any channel. A sports program whose title or episode title names two sides, such as Bears at Packers, also has Record for each team, which records every sports program naming that team on any channel (Stop recording takes the team's rule off again); Record next 30 min, Record next hour and Record next 2 hours record the channel from now for that long, program or not, so a channel with no guide can be recorded too; the one-off Record keeps the server's padding. The server's recordings page describes what happens next. When the server does not take the change, a line under the buttons says so.
Add to watchlist puts the program's title on the household's watchlist, for every channel (Remove from watchlist takes it off again). When the guide lists the same title at other times or on other channels, More airings (with how many) lists them, soonest first, each with its day, time and channel and the New and Live marks; OK on one on now watches it, OK on a later one opens its details, and Back returns to the details you came from. Airings match by title, so a title that several shows share, such as a newscast, lists them all.
Channel rows and refresh¶
Each channel shows its logo beside its number. The details above the grid show the focused program's episode label and title, a New badge for a first airing, its rating and its image, when the guide source has them. Times follow the device's 12- or 24-hour clock setting. A channel without programs says why: No listing when its guide source lists nothing then, No guide for this channel when the server has no guide source mapped to it, and Guide out of date when the guide source's data has run out.
The app shows its saved lineup while refreshing. Channels load before guide data. Automatic refresh runs every three hours and when the app returns to the front; Settings → Server → Reload requests a new load.
Library¶
Library tab¶
When the server keeps media libraries, the app shows a Library tab beside Live. On a TV both tabs sit in the header next to the app's name, Up from the guide's chips reaches them, and Settings stays the header's last button; on a phone the tabs are a bar along the bottom, and on a tablet, desktop or browser a rail at the side, with Settings as the last item; the bar or rail stays on every page but the full-screen players. On a TV the Guide key (or Menu) on any Library or DVR page opens the guide at Now. The Library tab reads its shelves again each time it is opened. A server without libraries shows no Library tab; the app asks again every five minutes, so the tab appears within five minutes of the first library being added.
The Library tab opens with a Search chip and a chip for each library at the top, then Continue watching (what you stopped partway through and the next episode of a show you are watching), the household's Watchlist, newest first, and each library's recent additions. A spotlight above them shows the backdrop, title and a one-line summary of the Continue watching or Recently added card that has focus; it never takes focus itself, and on a phone, where it is the page's first card, it shows the first item with a Resume or Play button. OK or a tap on a Continue watching card resumes it where you stopped, an episode as the episode, and plays on to the next one; the item's page is Details in the card's menu (hold OK, a long touch or a right click) or the remote's Info key. Every other shelf's cards open the item's page. Holding OK on a Continue watching card also offers Remove from Continue watching, which takes it off the shelf for the whole household until someone plays it again. While the shelves load the page shows placeholder rows at card size, and off a TV, pulling the shelves down reads them again.
Search finds movies, shows, episodes and videos by title, show or cast across every library as you type, in rows of Movies, Shows, With and the people found (what the actors and directors whose names hold the search are in, named by the server, or by the search itself on an older server), Episodes and Videos; the remote's Search key on the Library tab starts it by voice, and Back returns to the Library tab.
Library grids¶
A library opens as a grid of posters with chips to sort by title, recently added, year, rating or recently watched and to show only what is unwatched, and a row of the library's genres to show only one; more load as you scroll. In title order, a library of 80 or more titles also has a row of first letters (# for titles that start with a digit or a symbol); OK on a letter moves to the first title under it, loading the grid that far. Cards show a bar for how far in you are, a check mark once watched (a rewatch stopped part way shows both and resumes) and, on a show, how many episodes are unwatched. OK opens an item's page; the remote's Play key plays a movie or episode straight from its card, and holding OK on a card (a long touch or a right click elsewhere) opens a menu, as the key comes up, with Play from beginning for something partway in and Mark watched or Mark unwatched. An item page's overview that runs past four lines takes focus, and OK shows the rest.
On a phone, tablet, desktop or browser window 840 dp or wider, a library's grid stays on the left and the title you pick opens beside it, with Pick a title to see it here until you do. Picking another title from the grid takes the place of the one open, and Back closes the title page and leaves the grid. A title opened from the Library tab, search or Continue watching fills the window, as everywhere on a TV.
Back and Watch Next¶
Back goes from an item's page to where you opened it and from a library's grid to the Library tab; from the tab it climbs as Remote controls lists. On Android TV, the home screen's Watch Next row (Continue watching on Google TV) carries the same list: selecting an entry plays it in the app from where you stopped, and Back returns to the Library tab. An entry removed from the row stays off it until it leaves Continue watching. Google TV reads the row through its Engage service once Google enrolls the app, kept on the TV and not synced to a Google account; until then the app writes the Watch Next row itself.
Item pages¶
An item's page shows its backdrop over a page tinted with the picture's dominant color, title, year, length, rating, genres and badges for the picture (4K, HD, HDR), a line with the sound of its first audio track, its audio and subtitle languages and the studio or network, the overview, who directed it, and its cast as a row of chips; OK on a cast member searches the libraries for that name, and Back returns to the page. Focus starts on Play, or Resume from the time you stopped, with Play from beginning beside it and Mark watched or Mark unwatched after; a movie's, show's or video's page then has Add to watchlist (Remove from watchlist once it is there), which puts it on the Library tab's Watchlist for the whole household; an episode's or a season's page ends the row with Go to show, which opens the show's page.
A show's page plays or resumes its next episode, lists its seasons in a row of chips (opening on the season with that episode, which takes focus when you come down to the row) and the season's episodes under them, each with its own still; OK on an episode plays it, resuming where you stopped, and holding OK on one opens the card menu with Details added, which opens the episode's own page; Back from that page returns to the episode.
Under them, a movie's or show's page has Extras, its trailers, featurettes and other extras the server found beside its files, which OK plays, and back from one focus returns to it; and More like this, others in the library that share its genres, which OK opens.
A movie's or show's trailer plays muted over the backdrop once the page has rested for about three seconds with nothing else playing: no channel or guide preview, no library item and no song queued or held. A key or touch starts the rest over, and the app leaving the front or the page being covered stops the trailer, which rests again on return. Once the trailer ends, fails or loses the player, it does not start again on that page. Playing a title, a song or a channel takes the player at once, and kids mode plays the trailer only of a title it allows.
Music¶
A Music library opens as a grid of artists' square pictures. Chips switch it to albums (cover, artist, year) or songs (album cover, artist); OK on a song plays it. Each view sorts by name, date added, last played or play count (albums also by year) and has a row of genres. A Favorites chip lists the songs the household liked. A song counts as played after 30 seconds, which feeds Recently played, Most played and the radio.
- Artist page. The year born or formed, the country, a band's members (each searches the libraries), then albums newest first, with focus on the first. Under them, Popular lists up to 10 songs that ListenBrainz's listeners play most, played on through the list, and More like this lists the library's artists that listeners play alongside them, then those sharing their genres.
- Start radio (artist or album). Plays the artist's songs, then songs of artists listeners play alongside them and of artists sharing their genres. The most played come more often, and never more than two of one artist in a row.
- Album page. Artist, year, song count and length; Play (from the first song), Shuffle and Go to artist; then the songs in disc and track order with their number (2-05 on a multi-disc album), their own artist when it differs from the album's, and length.
OK on a song opens Now playing: the cover over a blurred copy of itself tinted with its dominant color, the title, artist and album, a seek bar, and Shuffle, Previous, Play or Pause, Next, Repeat and Favorite (a heart that likes the song for the household). Songs continue through the album.
| Control | Does |
|---|---|
| Previous | Restarts the song once a few seconds in, else goes back a song |
| Repeat | Album again after its last song, then one song over and over, then off |
| Lyrics | Appears when the server has them; replaces the cover. Synced lyrics light the sung line and keep it near the top; plain lyrics show as written |
| Visualizer | A MilkDrop-style picture behind Now playing, where the app can hear its output (Android, Android TV, desktop, web, iOS except songs the server converts to HLS). A new look comes with each song and every 45 seconds: a few made for Sofa King, then over a thousand classic presets, shuffled. Next look skips |
Back leaves Now playing and the music plays on, also in the background and on a locked screen (with controls in the notification and on the lock screen on Android and iOS). Away from a TV a bar under the pages shows Play or Pause and Next, and a click opens Now playing. On a TV a button with the song's title sits beside Settings in the Library and DVR headers. Google TV's Now playing card and the media keys work anywhere.
The music ends after the album's last song or when a channel, movie or recording plays, so opening Live on a TV ends it. Settings pauses it and Play resumes. On a TV, Now playing dims and moves after 30 seconds without a key so its cover does not mark the screen; the next key brings it back and does nothing else. A song found in search plays alone. Music has no watched state, resume or watchlist, so it has no Mark watched, Play from beginning or Add to watchlist.
Recently added shows a Music library's newest albums, and search lists artists, albums and songs after the other rows.
On Apple TV the grid, artist and album pages work the same, without Go to artist. Now playing shows how far the song is instead of a seek bar, with Favorite as a heart beside Repeat. Menu leaves it with the music playing on, also behind the app, and Now playing at the top of the Library tab reopens it. Control Center shows Play or Pause, Next, Previous, Like and a scrubber. The tvOS screen saver covers Now playing when the remote rests.
Library player¶
Playing a library item opens the full-screen player. Left and Rewind step back 10 seconds and Right and Fast Forward 30, or the steps set in Settings → Library and DVR → Step back and Step forward (5 to 90 seconds each), which the bar's step buttons, the media keys and a double tap follow too; holding the key moves a minute and then five at a time. With the bar up the target shows on it under the title; with the bar down it stays down and a badge low in the middle names how far the presses move and where they land. Once the server has made a file's scrub thumbnails, a picture of the target shows above the bar's mark or above the badge, and above a dragged seek bar too. The target plays once you stop pressing, or at once on OK; Back while moving cancels it, and Back otherwise returns to the item's page with the episode you watched focused.
OK pauses and resumes and shows the bar; Play/Pause, Play and Pause (Space and K on a keyboard) do it without bringing the bar up, and a disc in the middle of the picture confirms it, with Paused at the top left while it holds. Up or Info show the bar, which shows where you are, when the item ends at the current time if it plays on, and its length.
Down shows the bar too, and on the bar moves into its buttons: Skip break while a recording plays a commercial break, Skip intro while an episode plays its intro, Skip credits while it plays its end credits, Audio and subtitles when the file has more than one audio track or has subtitles, Captions on a recording, Zoom, Sleep timer (see below), Speed, Start over once you are 30 seconds in, Next episode when the episode has one, and Back to live on a recording still being made, which leaves it for its channel, live. Left and Right move along them, OK presses one, and Up or Back returns to the picture. CC (C on a keyboard) turns subtitles off, or back on with the ones shown last; on a recording it switches its captions, as on live TV. The remote's Audio track key opens Audio and subtitles, Stop returns to the page, and a gamepad's shoulder buttons step back and forward as Left and Right do.
Skip breaks, intros and credits¶
When a recording runs into a commercial break with Skip commercials set to With a button, the bar comes up with Skip break focused, so OK skips it. When an episode reaches the intro the server found in it (the theme and titles its show repeats in every episode), the bar comes up with Skip intro focused, so OK jumps past it; it is offered once per intro, once the episode plays, and not while Audio and subtitles is open. Nothing is skipped without a press unless Settings → Library and DVR → Skip intros is set to Automatically: then Skip intro counts down from 5 and skips the intro, and any key, a tap or a pause stops the countdown and leaves the button. The end credits the server found come up the same way, with Skip credits focused; when they run to the end of an episode that has a next one, the button reads Next episode and plays it at once. With Settings → Library and DVR → Skip credits set to Automatically, Skip credits counts down the same way and skips to the end, where Up next takes over. Set to Off, Skip commercials, Skip intros or Skip credits offers no button at all for that kind and lets it play.
Mouse, touch and keyboard¶
With a mouse or touch, the bar has a Back button at the top left, the step-back, play and step-forward buttons and the same buttons in one row, and a seek bar you drag or tap; a double tap on the left or right third of a phone or tablet's picture steps back or forward as those settings say. On a desktop or in a browser, Space or K pauses and resumes, and moving the mouse shows the bar. The bar leaves 5 seconds after the last key, tap or mouse movement unless the item is paused, you are scrubbing, the stream has failed or an intro skip is counting down. The live player's bar stays up while playback is paused or the stream has failed.
Speed, audio and subtitles¶
Speed steps through 1×, 1.25×, 1.5× and 2× with each press, keeping the voices' pitch; the bar's end time follows it, and each item starts at 1×.
The Audio and subtitles card closes after 15 seconds without a key or tap. In Audio and subtitles, picking another audio track plays the item again from where it is, and subtitles are drawn over the picture. Settings → Captions and subtitles sets the subtitles' size, how high they sit and whether a box is behind them. With a text subtitle on, Subtitle timing at the bottom of the card has Earlier and Later, which move the subtitles a quarter of a second a press, up to 10 seconds either way, for a file whose subtitles run ahead of the speech or behind it; each item starts with the file's own timing. A forced subtitle track, which carries only the dialogue the audio does not, is on from the start; the others start off. The tracks you pick in a show are kept on the device, by language, and its other episodes start with them. Subtitles inside the file and subtitle files beside it, such as the ones Bazarr downloads, are listed, the files marked External; when a show starts its next episode with your subtitle language, a file in that language wins over the subtitles inside the video. Picture subtitles (PGS from Blu-ray, VobSub from DVD) are drawn into the picture by the server, so picking one, or turning one off, plays the item again from where it is.
Conversion, progress and Up next¶
The server plays a file your device can play as it is; for anything else it converts the file as it plays, and a jump past what it has converted restarts it there, which takes a moment. When the server is already converting as many files as it allows, the player shows Waiting for a free converter and asks again every 5 seconds; after 20 seconds it shows the failure card.
Where you stop is saved every 10 seconds, when you leave and when another app comes to the front; the server marks an item watched past 90%. Returning to the app picks up where you were.
When an episode ends, an Up next card shows the next one, the next in its season or the first of the next season (Specials aside), and plays it after 10 seconds; OK or Play plays it at once and Back returns to the page. After two episodes in a row that Up next played by itself, with no key, tap or click since, the card asks Still watching? instead: OK or Keep watching plays the next one, and with no answer it returns to the page after 30 seconds. Anything else, or a show's last episode, returns to the page at the end.
A stream that stops more than 10 seconds before the item's end dropped rather than finished, so it plays again from where it stopped, up to twice until playback moves on by 30 seconds, and then shows the failure card instead of Up next.
DVR¶
On a server that records, a DVR tab sits beside Live and Library. It lists what is recording now, then recordings newest first, then scheduled ones soonest first, with the recordings folder's free space on top. A row shows the program's picture, title, episode, channel, air time and whether it was watched, failed or is still recording. A bar on the picture shows progress in a partly watched recording, and a recording in progress has a bar under its text for how much is on disk. The first recording takes focus.
| Row says | Meaning |
|---|---|
| Protected | Cleanup skips it when the recordings disk runs short. Protect or Unprotect toggles it (Apple TV: hold the touch surface on a finished recording) |
| Won't record: other recordings fill the server's slots then (red) | Scheduled, but more recordings overlap it than the server has playback slots. The program's details in the guide say the same under Cancel recording; Apple TV's details show the line beside Record |
Play opens a recording full screen. One started before shows Resume and From start, and one in progress plays as it grows. Commercial breaks the server found show on the seek bar, and Skip commercials handles them. Stopping within the last tenth marks a recording watched.
Stop, Cancel and Delete end a running recording, take a scheduled one off, or delete a finished one with its file. Each asks a second press first: the button then names the recording and Keep it backs out. On a phone, tablet, desktop or browser, Cancel on a scheduled recording acts at once instead and shows Canceled with an Undo button for a few seconds. Undo reschedules the same program and channel, and a recording a series rule made returns as a one-off without the rule's padding. A TV keeps the second press for Cancel, since the snackbar's button would take focus from the list.
Series, below the recordings, lists the series rules:
| Setting | Steps |
|---|---|
| Record repeats too / New episodes only | Which airings the rule takes |
| Keep | All, 1, 3, 5, 10 recordings |
| Padding | Default (1 minute before, 2 after), None, 5 min, 15 min, Long games (30 minutes past the end) |
| Any channel | Shown on a one-channel rule; makes it take every channel |
| Stop series | Deletes the rule and its scheduled recordings after a second press (Keep it backs out); finished recordings stay |
A rule's priority, and putting a rule back on one channel, are set on the server's portal.
With the guide's search open (two or more characters), Record everything matching “text” adds a keyword rule: every program on any channel whose title, episode title or description holds that word or phrase. Series lists it by its text, and Stop recording “text” removes it and deletes the recordings it scheduled.
Back goes from a recording to the DVR tab, then climbs as Remote controls lists.
Channels¶
Channels come from the server's lineup. The app lists a channel when the server reports it as playable and gives it a numeric display number, and lists them in number order. The server tags each channel with its lineup group, such as News, and each tag is a guide category with its own chip; a channel with several tags is under each, and one without a tag is under Other. Chips show how many channels they list.
Multiview¶
On a server that draws multiview, the live player's bar has a Multiview button, before Guide. It opens a list of channels beside the picture, with the channel you were watching ticked, then your favorites, your recent channels and the rest; tick two to four and press Watch. The server draws them into one picture: two side by side, or three or four in a grid. Only one channel's sound plays, marked by a white border and a speaker by its name. The arrows move the sound to the next tile that way, and OK watches the channel with the sound full screen; with a mouse or touch, a tap on a tile moves the sound there and a double tap watches it. Names show for 5 seconds after each press. Back returns to the list to change the channels, and Back from the list returns to the channel you opened it on. A channel that will not play is a black tile. When the server has no working graphics card for the drawing, the bar has no Multiview button. On Apple TV, Multiview is in the transport bar's menu: tick two to four channels and choose Watch; the arrows move the sound, a click on the touch surface watches the channel with the sound full screen, Menu returns to the list, and Menu from the list to the channel you opened it on.
Remote controls¶
| Key | Guide | Player |
|---|---|---|
| D-pad Up | Move focus | The channel above in the guide |
| D-pad Down | Move focus | The channel below in the guide |
| D-pad Left / Right | Move focus | Show the info bar; on the info bar, move into its buttons. For a few seconds after the CC key, adjust the channel's caption timing |
| OK | Watch the channel | Show the info bar; on the info bar, open the channel list. Also tunes an entered number or retries a failed stream |
| Long-press OK | Open the program's details | Return to the previously watched channel |
| Channel Up / Down | Move a page (4 rows) | The next higher / lower channel number |
| Captions (CC) | Toggle captions | |
| Play/Pause | Pause or resume and show the info bar, which stays up while paused; resume after 30 seconds returns to live | |
| Digits | Move to the row with that number, showing All when the filter hides it; OK or a 1.5-second pause commits | Enter a channel number; OK or a 1.5-second pause tunes it |
| Next / Previous | The next higher / lower channel number, as Assistant's next and previous do | |
| Last channel | Return to the previously watched channel, also after picking a channel in the guide | |
| Info | Open the program's details | Toggle the info bar; held, open the stream card |
| Fast Forward / Rewind | A day ahead / back | |
| Guide / Menu | Jump to Now (on a Library or DVR page, open the guide at Now) | Open the guide at Now |
| Search | Search by voice | Open guide search by voice |
| Back | Close search; climb from the grid to the selected filter chip, then to the header's open tab, then exit. On Library and DVR, from the page to the open tab, then Live's tab, where one more Back exits | Close the channel list or the stream card, or return to the guide |
| Audio track | Open the stream card | |
| Record | Record the program on now, or cancel its recording, on a server that records | |
| Zoom | Step the picture's zoom: Fit, Fill, Stretch | |
| Stop | Return to the guide | |
| Gamepad L1 / R1 | The next lower / higher channel number |
On an Android TV or Google TV, a pointer remote or a mouse moves a cursor: the control under it takes focus as the D-pad would give it, a click presses it, and the D-pad carries on from there. A cursor left resting where the D-pad scrolls a row under it takes nothing.
On a desktop or in a browser, the arrow keys move like the D-pad, Enter or the keypad's Enter is OK (hold it for a long press), Escape is Back, Page Up and Page Down move a page, the digit keys enter a channel number, C toggles captions and Space or K pauses and resumes; a letter shortcut (C, K, M, F) does nothing while Ctrl, Meta or Alt is held. Touch and a mouse select directly. In the full-screen player, a tap, a click or moving the mouse shows the info bar with a Back button at the top left, then channel down, pause or play and channel up, the bar's buttons, the volume and full screen; another tap hides it, a tap with the channel list or the stream card open closes it, and a swipe up on a touch screen opens the channel list.
On a Linux desktop the full-screen player appears in the desktop's media controls (MPRIS): the sound menu, the lock screen and phone companions such as KDE Connect show the channel and program, and their play, pause, next and previous buttons pause, resume and change the channel, as the keyboard's media keys do. Windows and macOS do not show it yet.
With a screen reader on, the player's bar stays up instead of leaving after five seconds, and the picture is a button named Show controls (on live TV with an Open channel list action for the swipe up). Large system text grows the guide's rows off a TV, and a selected filter chip and the program airing now carry a check or a bar as well as a color. With the system's animations off, the break screen's logo holds still and a focused control does not grow.
The players fill the window. On a desktop or in a browser, F in a player, F11 on any page, a double click on the picture or the Full screen button at the end of the player's button row switches the window to full screen and back; a browser also leaves it on its own Escape. On Android the system bars hide while a player is on top, and a swipe from the edge shows them for a moment. On an Android phone or tablet, going home or to another app while a channel, a library item or a recording plays shrinks it into a picture-in-picture window that keeps playing, with play and pause in the window's controls; tap the window to open the app again, or close it to stop the stream. A TV has no picture-in-picture.
On a desktop or in a browser the players have their own volume, which the guide's preview sound follows too. The Mute button and the Volume slider sit at the end of the player's button row, before Full screen; in a full screen player, + (or =) and - step the volume by 5, M mutes and unmutes, and the mouse wheel or a two-finger scroll over the picture steps it up and down. A pill at the top left shows the new level for a moment. The level and the mute stay set across channels and restarts. A TV, a phone and an Apple TV use the system volume and the remote's or the device's volume keys instead.
A window narrower than 600 dp shows the guide's channel column as logo and number only, and one narrower than 600 dp or shorter than 480 dp leaves out the preview so the grid keeps its rows. Architecture has the layout metrics.
A channel opened from Favorites or a category chip keeps channel up and down and the channel list inside that filter, and the info bar names it with the channel's place, for example "Sports 3/214". Typing a number outside it widens them to the whole lineup. Leaving the app stops playback and releases its session on the server; returning opens a new one for the same channel at the live edge, paused if it was paused.
The info bar ends with a row of buttons, so a remote with only a D-pad, OK and Back reaches everything the dedicated keys do. Left or Right on the bar moves into the row, OK presses a button, and Up or Back returns to the picture; Up and Down never change the channel while a button has focus, and the focused button's name shows under the row. The buttons are:
| Button | Does |
|---|---|
| Channels | Opens the channel list |
| Previous channel | Returns to the channel watched before, once there is one, as a long press of OK does |
| Pause or Play | Try again while the stream has failed |
| Captions | Toggles them and hands the remote back to the picture so Left and Right set the timing |
| Stream info | Opens the stream card |
| Zoom, Sleep timer | See below |
| Watch from start | Plays the recording from the program's start, while the program on now is being recorded |
| Record | On a server that records: records the program on now, or cancels it, and says so at the top left |
| Star | Adds the channel to the favorites or removes it |
| Multiview | On a server that draws it |
| Guide | Opens the guide at Now |
With a mouse or touch the same buttons follow the channel and pause buttons, with pause and play there instead of in the row.
Zoom on either player's bar, or the remote's Zoom key, steps how the picture meets the screen: Fit shows all of it with bars at the sides or top, Fill fills the screen and crops what overhangs, and Stretch stretches the picture. It holds from channel to channel and item to item until the app closes. The guide's preview always fits.
Sleep timer on either player's bar steps through 15, 30, 60 and 90 minutes, the end of what plays (the program on now, or the library item or recording, whose Up next it skips) and off; the button names what it is set to, as Sleep in 24 min. When it runs out the player leaves for the page it was opened from, as Back would, so the TV can go to sleep on its own. It lasts through zaps and Up next, and leaving the player turns it off.
The channel list opens on OK while the info bar shows, or from Channels on the bar. Its chips are Recent (the channels watched lately, newest first), Favorites, the guide filter the channel was opened from, and All; Up/Down select a channel, Left/Right move along the chips, OK tunes the focused channel, Back closes the list, and it closes on its own after 8 seconds without a key. Each row shows the channel's number, logo, name, the program on now with its progress, and the next program with its start time. The last channel watched is pinned above the All and filter lists, and picking a channel under All widens channel up and down to the whole lineup.
The info bar shows the channel's logo and the current program's title, badges, episode, time and description, with the program's image when the guide source has one. The first three bars after install end with a one-line key legend, which the stream card carries from then on.
Info held, or Stream info on the bar, opens the stream card: the stream's audio tracks when it offers more than one (focus starts on the one playing; Up/Down and OK pick another, and the choice lasts for the channel), the video codec, picture size, frame rate and bitrate the player reports, the audio codec, on Android how the audio leaves the device (passed through encoded, or decoded here to stereo, 5.1 or another layout), the seconds buffered, the server's source for the stream and the session id, and, from a server that reports it, the stream's health: the rate it sends the stream at, how many times the source stalled and how many times the server moved the channel to another source. Back, Info, Left or Right closes it, OK does too when there are no tracks to pick, and it closes on its own after 15 seconds. On a desktop the card lists libVLC's tracks and media information; on iOS it shows the picture size and bitrate only; in a browser it shows the picture size.
Pause shows how many seconds the picture is behind live and that resuming after 30 seconds paused rejoins live; when it does, "Live" shows for a moment. A failed stream's card counts down to the next automatic reconnect, and a channel the server has no working source for says so.
Links¶
The app opens sofaking:// links on Android, Android TV, iOS and Apple TV, so a home automation, a shortcut or another app can start something:
| Link | Opens |
|---|---|
sofaking://live/NUMBER |
The channel with that number full screen on Live, such as sofaking://live/5.1; a channel's name works in place of its number. Back lands on the guide. |
sofaking://vod/ID |
The library item with that id in the player, from where the household stopped. Back lands on the Library tab. |
sofaking://vod/ID?t=SECONDS |
The same item, that many seconds in. |
sofaking://pair?server=URL&code=CODE |
Pairs with that server, as the admin portal's QR code does. With no server saved, or with the one the link names, it pairs at once; with another server saved, a dialog asks "Switch to HOST?" and says that this device stops using the saved one. Cancel is focused first; Switch pairs, Cancel drops the link. The Apple TV app asks in a confirmation dialog with the same words. A code typed into Settings never asks. |
On Android and Android TV only pair opens from a web page; live, vod and item (sofaking://item/ID, an item's page without playing it) open from another app, from the home screen's Watch Next row, or from adb shell am start -a android.intent.action.VIEW -d sofaking://live/5.1, the way Home Assistant's Android TV integration starts an app. A channel or item the server does not have leaves the app where it was. The Apple TV's Top Shelf uses the same vod links, and its older sofaking://channel/ID links still open the channel.
Captions¶
Enable captions with the CC key, the Captions button on the player's bar or in Settings. They show in the guide's preview as well as the player. Recordings show them too, and their player has the same CC key and Captions button; a library item shows only the subtitles picked in its Audio and subtitles card, which CC turns off and on.
Where captions are drawn depends on the platform:
- On Android, the app draws them in the selected caption style.
- On a desktop, libVLC draws them into the picture, and on iOS and Apple TV, AVPlayer draws them in the system's caption style. The app's caption style does not apply. AVPlayer shows only the captions a channel's playlist declares, so the server declares the CEA-608 captions it finds in a stream whose playlist leaves them out.
- In a browser, the app draws them in the selected style while it draws the video into its own canvas. When it falls back to the browser's video element, without WebGL2 or when the server sends no CORS headers on media, the browser draws them. Chrome's built-in HLS player shows none.
On Android, caption timing shifts captions against the picture so live captions align with speech. Press CC, then within three seconds use Right to show them earlier or Left to show them later, in half-second steps, up to 8 seconds either way; each press keeps the window open and the toast shows the timing. The info bar shows the channel's timing as "CC 2.0 s early" or "CC 1.5 s late". Timing is saved per channel; Settings sets the default timing. Showing captions earlier buffers the video by that much, so it also means a longer wait when a channel starts; showing them later does not.
Apple TV¶
The Apple TV app works as the other apps do, apart from these differences.
- Guide. The grid shows 90 minutes under a row of times, from the half hour now is in. Right past a row's last program and Left past its first move it half an hour, up to 24 hours ahead. A red mark shows a program set to record. Select a program on now to watch its channel, or a later one for its details. The preview sits above the grid beside the focused program's title, times and summary. Search beside the filters opens a page that finds a channel by name or number, with what is on it now. Favorites keep the order you starred them in. Menu from the player returns to the guide on the channel you watched, back at now, showing All when a filter hid it.
- Program details. Hold the touch surface on a program instead of holding OK; the same menu adds the channel to the favorites.
- Live player. Swipe down for the transport bar. Its menu records the program on now, stars the channel, lists the recent channels, the favorites and every channel so switching never leaves the player, and offers Sleep timer and, while the program is being recorded, Watch from start (Menu from it returns to the channel live). The info panel, Control Center and Siri show the program on now with the channel's number and name, its summary and the channel's logo, and follow the guide as programs change.
- Captions. Settings › Live TV › Captions shows the closed captions of channels and recordings, and the transport bar's Subtitles panel turns them on and off, which Settings remembers. The panel's On and Off are the Apple TV's own captions setting, which the app reads and never changes: with the system's Closed Captions + SDH always on, captions show whatever Settings says, in the track the Apple TV's preferred languages and SDH choice rank first.
- Library tab. It sits between Live and Settings in the tab bar. The spotlight fades from one card to the next unless Reduce Motion is on, and VoiceOver skips it. Hold the touch surface on a card for its menu, which has Details, and on a Continue watching card Remove from Continue watching; holding it on an episode opens Details, starts it over or marks it watched. Play/pause on the remote plays a movie or episode straight from its card. Search at the top opens the system's search keyboard.
- Library player. It is the system player: swipe to scrub by times only, since it has no place for scrub thumbnails, and swipe down for the item's details. The transport bar's Audio, Subtitles, Playback Speed and Subtitle timing menus do what their counterparts do. Text subtitles take the look set in the Apple TV's Settings › Accessibility › Subtitles and Captioning (colors, opacity, size, font and edge style). The info panel, Control Center and Siri show the item's title, its show and episode, its summary and its poster.
- Skips and Up next. Skip break, Skip intro, Skip credits and Next episode show over the picture, and pausing stops a countdown. The Up next card has Play now and Cancel (or Menu), and Still watching? has Keep watching.
- DVR. Hold the touch surface on a recording for From start and Delete (Stop on a running one, Cancel recording on a scheduled one).
- Settings. The Settings tab takes the server address and the API token, or a pairing code with Pair. Settings › During ads has Show picture over it, which brings the picture back until that break ends. Settings › Channels holds Share favorites across devices. With a PIN set, kids mode titles the channel list Sofa King Kids and keeps the Top Shelf to its channels and titles. There is no Open-source licenses page.
- Top Shelf. While the app is in the Home screen's top row, it shows the library's Continue watching, with how far in each item is, and then the last ten channels watched, newest first; selecting an item opens its page and Play plays it where you stopped, and selecting a channel opens the app on it.
Settings¶
Settings opens from the header's Settings button on a TV and from the navigation bar or rail elsewhere. On a TV focus starts on the first setting and the remote's Back key is the way back, so Settings and its pages draw no Back button until a mouse or touch is used; elsewhere focus starts on Back. Back returns to the tab it was opened from, with focus on the Settings button. Settings is a list of pages, each with a line saying what it holds or where it stands: Live TV, Library and DVR (on a server with libraries or recordings, named for what it offers), Captions (Captions and subtitles on a server with libraries), Playback (Android and desktops) and Parental controls. Under them sit Appearance (not on a TV), the Server section, Diagnostics once a server is set (Android and desktops) and About. Select a page to open it; Back returns to the list with focus on that page's row. Switches and choices apply at once. The Server section reads Connected to with the server's address, or Couldn't reach when the lineup could not load from it, with a Change button and Reload, which loads the lineup and the library again. Under it, Manage server opens the server's admin portal in the browser; a TV shows none. In a browser whose saved server is at another address than the page and cannot be reached, Use this page's address opens the server fields with the page's origin filled in; Change opens the server fields, which apply when you select Save & reload under them, and Cancel closes them. On a device with no server yet, Server comes before the pages, with its fields open and focus on Server address. While the fields are open, Servers on this network lists the Sofa King servers advertising themselves on the device's network, by name and address; selecting one fills Server address and moves focus to Pairing code. Android, Android TV, desktops, iPhone, iPad and Apple TV look; the web app does not.
| Page | Setting | Default | What it does |
|---|---|---|---|
| Settings | Appearance | System | Not on a TV, which is always dark. System follows the device's dark mode, Dark and Light pin one on this device only. The players stay dark over the picture in both |
| Live TV | Open on start | Where I left off | What a cold start opens. Where I left off reopens the tab the app was last on: on Live the channel watched last, full screen, and Back shows the guide focused on it; on Library or DVR that tab, with nothing playing. Guide opens the guide, Library (on a server with one) the Library tab, and A channel a channel chosen from the lineup with Choose. A first run, or a chosen or last channel the lineup no longer has, opens the guide, and a tab the server no longer offers opens Live |
| Live TV | Open focused channel automatically | After 10 seconds | Off, 10 or 30 seconds; see Preview |
| Live TV | Play preview sound | On | Sound in the preview; see Preview |
| Live TV | During ads | Show them | Show them, Logo (muted) or Logo (sound on); see During ads |
| Live TV | Guide rows | Comfortable | The height of the guide's rows; Compact fits more channels on screen |
| Live TV | Manage channels | Opens the channel manager, below | |
| Library and DVR | Skip commercials | With a button | On a server that records. Automatically, With a button or Off; see Skip breaks, intros and credits |
| Library and DVR | Skip intros | With a button | On a server with libraries. Automatically, With a button or Off; see Skip breaks, intros and credits |
| Library and DVR | Skip credits | With a button | On a server with libraries. Automatically, With a button or Off; see Skip breaks, intros and credits |
| Library and DVR | Step back, Step forward | 10 s, 30 s | On a server with libraries or recordings. 5 to 90 seconds; see Library player |
| Library and DVR | Hide spoilers | Off | On a server with libraries. An episode not started yet shows Unwatched episode in place of its summary, on its show's page and its own, and its picture blurred (dimmed only before Android 12) |
| Captions | Subtitle size | Medium | On a server with libraries, under Library subtitles. Small, Medium or Large text subtitles in a library item. Live TV and recordings follow Caption style |
| Captions | Subtitle position | Bottom | Raised or Higher lifts a library item's subtitles clear of a letterbox's bar or a ticker |
| Captions | Subtitle background | On | A dark box behind a library item's subtitles; off, they are white with a shadow |
| Captions | Closed captions | Off | Shows captions; see Captions |
| Captions | Smooth live captions | On | Android only. Holds roll-up text until each line is complete, so captions appear a line at a time |
| Captions | Caption style | System | System follows Android's caption preferences, or white on black in a browser; Large, high contrast overrides them |
| Captions | Default caption timing | As broadcast | Android only. The timing for channels without their own; steps and range as in Captions |
| Captions | Open system caption settings | On Android, opens the system's captioning preferences; on iOS, the app's page in Settings. | |
| Playback | Night listening | Off | Android and desktops. Evens out the sound for watching quietly: quiet speech comes up and explosions come down. On Android it applies at once, through the system's dynamics processing; on a desktop libVLC's compressor applies from the next channel or item opened. Audio passed through to a receiver plays as it is |
| Playback | Test surround sound | Android and desktops. Play sounds a tone from each speaker of a 5.1 setup in turn (front left, center, front right, surround right, surround left, then the subwoofer) and names the one that should sound, so a swapped or silent speaker shows. The app builds the tone and decodes it like any multichannel sound, so it goes out as multichannel PCM, also to a receiver set to pass audio through; the stream card's Audio out line shows what a channel does | |
| Playback | Match frame rate | Off | Android only. Switches the display to the stream's frame rate while it plays, through the window's preferred display mode, so 29.97 fps video plays at 59.94 Hz and 25 fps at 50 Hz. Some TVs show a black screen for a moment at each switch, and a pause the box sends during the switch is ignored for 4 seconds so playback does not stop; the launcher's rate returns when the app leaves the player |
| Playback | Decoder | Auto | Android only. Software puts the software decoders first, for the odd channel a hardware decoder cannot play; it uses more power and may drop frames at high resolutions |
| Playback | Buffer | Standard | Android only. How much of a stream downloads before it plays: Start faster waits for 0.5 s (1 s after a stall), Standard 1 s (2 s), Smoother 4 s (6 s) |
| Server | Server address | Empty | The server's HTTP(S) address with a host and optional port, for example http://server.example:9193. A bare host, such as server.example or server.example:8080, gets http://, and port 9193 when it has none. Embedded credentials, queries and fragments are refused |
| Server | API token | Empty | The server's API token, found as getting started describes: letters, digits and punctuation with no spaces. Leave it empty when the server runs without one. The field masks all but its last four characters (security) |
| Server | Pairing code | Empty | Six digits from the admin portal's Devices page, entered with the Server address instead of the token. Pair claims the code and stores the token the server hands out; a sofaking://pair link pairs without typing (Links) |
| Server | Reload | Loads the lineup and the library home again from the server | |
| Server | Manage server | Opens the server's admin portal, /admin at the server's address, in the browser. Not on a TV |
|
| Diagnostics | Send crash reports to your server | On | Shown once a server is set. Android and desktops; see crash reports |
| Parental controls | Set a PIN | Off | Four digits, entered twice, that Settings asks for before it opens; see settings lock and kids mode. Remove the PIN takes it off, and kids mode with it. With a PIN set, Turn on kids mode starts kids mode |
About shows the version and how many channels are loaded, the notice for the TMDB details the server can add to libraries, Open-source licenses, then whether a newer build is published; the Apple TV app shows that notice under About too. Open-source licenses lists the libraries the app on that platform ships, each with its version, authors and licenses. On a TV and in a wide window the list sits beside the focused library's license, and Right moves into the license, where Up and Down scroll it; in a narrow window selecting a library opens its license, and Back returns to the list. The Apple TV app has no licenses page yet. On a snapshot, every build shows a version ending in -dev.BUILD+COMMIT, the build number and the short commit, the same version the server's admin portal shows for a server built from that commit. The .deb carries the same version, the MSI shows 0.1.BUILD, and the macOS app shows 0.1.0.
During ads¶
On streaming channels that mark their ads, such as Pluto TV, Tubi, Whale, LG, Roku, Samsung TV Plus, some Stirr stations and many on Xumo and Plex, the Sofa King logo bounces around the screen through each break, with the sound off (Logo, muted) or on (Logo, sound on). The screen starts black, and on each bounce takes the color the logo wore into it, with the picture just showing through. In the middle, the screen counts down to the show once the stream says how long the break runs, from the start on cued breaks such as Tubi's and near the end on stitched ones such as Pluto TV's. Under it are a line picked for the break, the program you're watching, a fact about it that changes every 8 seconds (the episode, what TMDB says about the show or movie when the server has a TMDB token, such as when it first aired, its seasons, cast and creators, and what is on next), and the ads dodged today, which Settings → Live TV → During ads shows too; a corner hit gets a line of its own. The time sits in the top corner, and the logo squashes against each wall it hits, unless the device turns animations off (Remove animations on Android, Reduce Motion on Apple TV). OK or Back shows the picture until that break ends; zapping and the info bar work as ever. On a desktop the screen can come and go a few seconds off the break's edges, since libVLC does not say how much it has loaded.
Update check¶
Opening Settings asks GitHub once per app start for the newest build of the running build's channel: a snapshot compares its build number with the rolling snapshot prerelease, and a release, such as 0.2.0, compares its version with the latest release. The line reads Sofa King fresh when it is up to date, Update available with the published version, or Couldn't reach GitHub; Check again asks once more. A local build reports the catalog version, so it compares with the latest release. When an update is available, What's new lists the upgrade notes and new features and then the fixes since the running build (of every snapshot since it, or of the newer release), up to six lines and a count of the rest, from the release notes.
With an update available on Android, Install update downloads the package inside the app and verifies it before handing it to Android's installer. The first time, Android asks to allow Sofa King to install apps and to confirm the install; on Android 12 and later, later updates install without a prompt once you choose Install update. Sofa King closes while the update installs; open it again afterward. A build an app store installed (Google Play, F-Droid or Amazon) offers no Install update, and a package signed with another key is refused before Android sees it, as troubleshooting explains. On a desktop or in a browser, Get the update opens the release page; a Linux desktop with the apt source from getting started takes each snapshot with its other system updates instead. No package is published for iOS or tvOS, and the line says so. Nothing downloads or installs until you choose to.
Settings lock and kids mode¶
With a PIN set, opening Settings shows a lock page instead: enter the PIN and select Unlock. The PIN keeps a child or a guest out of Settings, the channel manager and the startup picker; watching, zapping, the CC key, favorites in the player and pairing from a sofaking://pair link are not affected. The unlock lasts until you leave Settings. After five wrong PINs in a row, Unlock waits 30 seconds. The PIN is stored on this device as a salted hash, never on the server, and does not sync to other devices.
Forgot the PIN, on the lock page, takes the server's API token instead: the admin portal shows it under Settings, Advanced, Reveal the API token, and a match removes the PIN. On a server that runs without a token, the PIN can only be removed by clearing the app's data on the device.
With a PIN set, Turn on kids mode, under Parental controls, locks Settings again and returns to the guide in kids mode, and the header shows Kids next to the app's name on a TV. The guide, the channel list and zapping keep only the channels filed under a kids' group (one whose name has Kids or Children in it), and a channel outside them, from a link or a number, does not play. The library keeps only titles rated G, PG, TV-Y, TV-Y7, TV-G or TV-PG on its shelves, its grids and in search; a title without a rating is hidden, and a library's row of letters goes away. The DVR tab is hidden, and on Android TV the home screen's Watch Next row is emptied. Kids mode filters channels by their group, not programs by their rating, since guide ratings vary by source. To leave it, open Settings, enter the PIN and select Turn off kids mode. Kids mode is this device's own and does not sync. On Apple TV the channel list's title reads Sofa King Kids, and the Top Shelf shows only kids mode's channels and titles.
Channel manager¶
Manage channels, under Live TV, lists the favorites in the order the guide's Favorites filter and the player's channel list show them; the arrows beside a favorite move it. Channels not yet placed follow by number. Below, the lineup's groups (the guide's chips) each have a switch and a count of how many of their channels are shown: switched off, every channel of the group leaves the guide and the channel list on this device only, so the server and other devices keep it; switched on, they all return. The arrow beside a group opens its channels as switches of their own, so one channel can be hidden or shown by itself; a channel filed under two groups appears under both and follows the last switch that touched it. Skip hidden channels with Channel Up and Down takes them out of zapping too; a hidden channel entered by number still plays, with the full lineup around it.
On a server that keeps a shared copy, Share favorites across devices sits at the top of Manage channels, off by default. Turned on, the device keeps its favorites, their order and its hidden channels the same as every other device of the household that has it on: it takes the household's list over when another device saved one, otherwise it saves its own as the household's, and each change after that reaches the others the next time they start. The recent list stays each device's own.
Troubleshooting covers connection errors, empty guides and streams that do not play.