/placetv <item>. With an inventory, only staff can use it
CommandAce
false
An ACE like 'tv.place' to limit /placetv when there is no inventory
PickupCommand
'pickuptv'
Pick up a TV, for servers without ox_target or qb-target
MaxPerPlayer
3
TVs one player can have placed. 0 is no limit
PlaceDistance
6.0
Metres you can aim when placing
PickupDistance
2.5
Metres from a TV to pick it up
Save
true
Keep placed TVs across restarts, in placed.json
Control style
Option
Default
What it does
Config.ControlStyle
'tv'
'tv': you use the TV itself, the camera frames the screen and everyone nearby sees the menus. 'remote': the older side panel with a link box, buttons and a recent list
SAF OS
Config.Os sets the home screen.
Option
Default
What it does
Name
'SAF OS'
Name of the TV system
Network
'LSFiber 5G'
Shown in the Wi-Fi pill on the home screen
ScreenSaverSeconds
90
An untouched home screen turns into a slideshow after this long. 0 is never
Clock
'game'
'game' shows the in-game time and date, 'real' the player's own clock
TourKey
nil
A key like 'o' that runs the showcase tour while using a TV. nil is off
Config.TourCameraDrift
1.0
How much the camera drifts around the TV during the tour. 0 is still
Apps
Config.Apps lists the home screen apps in order. To add an app, copy a line and give it a new id,
label, logo and tile colour.
Key
What it does
id
Unique id. Rows in Config.HomeRows point at it
kind
What the app is, see below
label
Name on the home screen
logo
A file in html/os/logos/ or a full https link
tile
Colour behind the logo
about
One line shown on the home screen
home, search
Web apps only: start page and search link (%s is the query)
Kind
What it is
'video'
YouTube browsing and search
'feed'
A channel-style app built from YouTube searches
'web'
Web browser
'radio'
The live stations in Config.Radio
'link'
Play any video, music or stream link, or an IPTV playlist
'settings'
Volume, sleep and about
Lua
{ id = 'eyefind', kind = 'web', label = 'Eyefind', logo = 'eyefind.png', tile = '#4a8fc7',
home = 'https://duckduckgo.com', search = 'https://duckduckgo.com/?q=%s',
about = 'Browse the web on the big screen.' },
Video rows
Config.HomeRows lists rows of videos. Each row is a YouTube search, refreshed every FeedCacheMinutes.
Key
What it does
app
Which app shows the row, in its tabs and on the home screen shelf
title
Row title
query
The YouTube search
live
true for live streams only
Lua
{ app = 'vinewood', title = 'Pursuits', query = 'gta 5 police chase cinematic' },
{ app = 'vinewood', title = 'Live now', query = 'gta rp live', live = true },
Radio
Config.Radio lists the stations. Each plays whatever live stream tops its search.
Key
What it does
name
Station name
query
The YouTube search for its live stream
logo
A file in html/os/logos/
color
Tile colour
about
One line under the name
Search and caching
Option
Default
What it does
Config.FeedCacheMinutes
30
How long search results and rows are kept before asking YouTube again
Config.SearchRateMs
1500
Minimum time between searches per player
Command and access
Option
Default
What it does
Config.Command
'tv'
Puts you in front of the nearest TV with the remote open
Config.DefaultKey
''
Default key for the command. Players can rebind it. '' is no default
Config.AcePermission
false
false lets everyone use TVs. Set an ACE like 'tv.use' to restrict
Ranges
Distances are in metres (15 m is about 50 ft).
Option
Default
What it does
Config.RenderRange
15.0
TVs this close show the home screen or what's playing
Config.AudioRange
15.0
Sound fades out over this distance
Config.WebRange
8.0
Web pages load only this close. A web page's own sound can't be faded by distance
Config.ControlRange
4.0
How close you must be to use /tv
Timing
Option
Default
What it does
Config.ScanInterval
1000
Milliseconds between scans for TV props
Config.VolumeInterval
250
Milliseconds between distance volume updates
Config.SyncInterval
2000
Milliseconds between position re-syncs. The screen corrects when it is more than 2 s off
Screen page and picture
Option
Default
What it does
Config.ScreenUrl
'auto'
Where TVs load their home screen. 'auto' hosts it through your cfx.re address. See The TV page
Config.FitCommand
'tvfit'
Command to line the picture up with a TV model's glass. Saved for everyone in fits.json
Config.FitAce
'tv.fit'
ACE for /tvfit. The command ACE admins have also works
Config.DrawMode
'target'
'target' draws into the TV's own screen surface for an exact fit. 'glass' draws over the model's front face, sized by screen and /tvfit
Config.SharpWhenControlling
true
Whoever holds the remote sees a full-resolution picture laid over the glass
Config.DuiWidth
1920
Width of the TV page in pixels
Config.DuiHeight
1080
Height of the TV page in pixels
Server checks
Option
Default
What it does
Config.MaxUrlLength
512
Longest link a player can load
Config.RateLimitMs
350
Minimum time between actions per player
Config.MaxTvStates
400
Most TVs that can play something at once
Config.BlockedHosts
{}
Hosts nobody may load. Substring match on the host
Config.AllowPrivateAddresses
false
Allow links to localhost and LAN addresses. Off so a link can't reach players' routers or local apps
Lua
Config.BlockedHosts = { 'example.com' }
TV models
Config.Models lists the base-game TV props and the render target their screen uses. One render target is
shared by every prop linked to it, so TVs of the same target in range all show the nearest TV's content.
Normally there is only one TV per room.
Key
What it does
model
Prop model name
target
Render target name, usually 'tvscreen'
screen
Optional inset of the screen inside the front face: left, top, right, bottom as 0 to 1 fractions. Used to map the mouse onto web pages
draw
Optional 'glass' to override Config.DrawMode for this model