Which route do you need?
Install Art Frame TV from Google Play on the TV and open it once. Then check Settings → Device Preferences → Screen saver.
- Art Frame TV is in that list: select it. You are done.
- There is no Screen saver menu, only Ambient mode (most Google TV devices): Google does not let Ambient mode use other apps. Use a launcher (route 1) or ADB (route 2).
Use version 1.0.5 or later. Earlier versions close the screensaver the moment it starts, so update from Google Play first.
You never have to set the screensaver up to use the app. It works fully from its own icon; the screensaver is for when you want the frame to appear by itself once the TV goes idle.
Route 1: a launcher with Screensaver Override
No computer, no terminal, and no pairing. Replacement launchers such as Projectivy Launcher or FLauncher add the screensaver choice that Google TV hides.
- Install the launcher from Google Play and make it the home screen when asked.
- Open its settings and find Screensaver Override.
- Choose Art Frame TV Screensaver.
The trade-off is that you are changing your home screen. If you would rather not, use route 2.
Route 2: ADB over Wi-Fi
ADB is Android's developer tool. You run it once, on a computer that is on the same Wi-Fi network as the TV, and the setting then stays on the TV.
1. Install ADB on your computer
ADB ships in Google's platform-tools. Pick the line for your system and run it in a terminal:
# macOS (Homebrew)
brew install --cask android-platform-tools
# Windows (PowerShell)
winget install Google.PlatformTools
# Debian / Ubuntu
sudo apt install adb
Open a new terminal window and check it worked:
adb version
If you see command not found: adb, see the fixes below.
2. Turn on Wireless debugging on the TV
Go to Settings → System → About and click Android TV OS build seven times. Developer options now appear under Settings → System. Open them and turn on Wireless debugging.
3. Pair (once)
Wireless debugging will not talk to a computer until the two are paired. On the TV, open Wireless debugging → Pair device with pairing code. A dialog shows an address with a port, and a six-digit code. Keep it open, and on the computer run:
adb pair 192.168.1.50:37215 123456
Use your address, port and code from the dialog; the numbers above are examples.
Do not type the angle brackets or placeholder words from other guides. You should see
Successfully paired. The port and code are temporary: they change every time the dialog opens.
4. Connect
Close the pairing dialog. The main Wireless debugging screen shows IP address & Port, a different port from the pairing one. It is not 5555.
adb connect 192.168.1.50:41234
adb devices
The device should be listed as device. If the TV asks Allow debugging?,
accept it.
5. Set the screensaver
adb shell settings put secure screensaver_components team.dsa.artframetv/.service.ArtFrameDreamService
adb shell settings put secure screensaver_enabled 1
Check that it stuck:
adb shell settings get secure screensaver_components
That should print team.dsa.artframetv/.service.ArtFrameDreamService. To see it
straight away, use Start now in your TV's screensaver menu (on Google TV it is
under Ambient screensaver). If Start now does nothing, go to the next section.
The setting survives restarts. A system update can reset it, in which case run the two
settings put lines again. To undo it, run
adb shell settings delete secure screensaver_components.
If Start now does nothing (TCL and some other brands)
Some manufacturers add their own gatekeeper that refuses to start any app in the background unless it has been given an auto-start permission. The screensaver is exactly that: the TV starts it for you. TCL TVs do this, and so can others. The signs are that the settings above are correct, Start now does nothing, and the screensaver never appears when the TV idles.
With ADB connected (steps 1 to 4), grant the permission:
adb shell appops set team.dsa.artframetv AUTO_START allow
adb shell appops get team.dsa.artframetv AUTO_START
The second command should print AUTO_START: allow. Then press Start now
again. If the TV answers Unknown operation, it has no such permission and this is not your problem.
Look in the TV's own settings for an Auto-start or App permissions screen
and allow Art Frame TV there.
If you are comfortable reading logs, this confirms the diagnosis. Run
adb logcat -c, press Start now, then adb logcat -d | grep -i "forbid bind".
A line mentioning Unable to bind dream service means the TV refused to start it.
When ADB fails
command not found: adb
The tools are not on your PATH, or your terminal opened before they were installed. Close
the terminal, open a new one and try adb version again. Terminals that were already open
do not notice newly installed commands.
no such file or directory: tv-ip
You typed a placeholder literally. In many guides <tv-ip> stands for your TV's
address, and the shell reads the < as a file redirect. Replace the whole thing,
brackets included, with the address from the TV.
error: protocol fault on adb pair
The pairing handshake did not complete. Try these in order, and after each one reopen Pair device with pairing code on the TV so you have a fresh port and code, because each code works for one attempt only:
- Use the pairing port. It is the one in the pairing dialog, not the one on the main Wireless debugging screen. Type it straight after the address, then the code when asked.
- Restart the ADB server. A stale background process is the most common cause. Run
then pair again. The server restarts by itself.adb kill-server - Keep the TV awake. If the dialog closes or the screen sleeps, the code is gone.
- Security software. If it still fails while
nc -zreaches the port, use the relay in the section below.
A wrong code usually reports a plain failure to pair instead.
failed to connect … No route to host
Despite the wording, this is rarely a real routing problem, especially if the TV answers
ping. Work through these in order:
- Not paired yet. Do step 3 first. Connecting an unpaired computer fails.
- Stale port. The connect port changes whenever Wireless debugging is switched off and on, and sometimes after a restart. Read it again from the TV.
- Different network. The computer and TV must be on the same network. Guest Wi-Fi and some mesh systems isolate devices from each other.
- Security software. See below.
Security software blocks only ADB
Some VPNs and antivirus suites filter network traffic per application. They can block
adb while ping and everything else works. You can tell it is happening if a
plain connection to the TV's port succeeds but ADB fails:
nc -z -v 192.168.1.50 41234 # macOS / Linux
adb connect 192.168.1.50:41234
If nc says succeeded and ADB says No route to host, the network is fine
and something is filtering ADB. Pausing the filter works, but the filter is often a system extension
that keeps running after you disconnect a VPN, so it may need to be switched off in the security
software itself. If you would rather leave it on, forward the ports through Python, which these filters
normally allow. Save this as relay.py:
import socket, sys, threading
host = sys.argv[1]
def pipe(src, dst):
try:
while True:
data = src.recv(65536)
if not data:
break
dst.sendall(data)
except OSError:
pass
finally:
for s in (src, dst):
try:
s.shutdown(socket.SHUT_RDWR)
except OSError:
pass
def serve(local, remote):
srv = socket.socket()
srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
srv.bind(("127.0.0.1", local))
srv.listen(8)
while True:
client, _ = srv.accept()
try:
upstream = socket.create_connection((host, remote), 5)
except OSError:
client.close()
continue
threading.Thread(target=pipe, args=(client, upstream), daemon=True).start()
threading.Thread(target=pipe, args=(upstream, client), daemon=True).start()
for pair in sys.argv[2:]:
local, remote = map(int, pair.split(":"))
threading.Thread(target=serve, args=(local, remote), daemon=True).start()
threading.Event().wait()
Run it with the TV's address, then one local:remote pair for the pairing port and one
for the connect port, and leave it running:
python3 relay.py 192.168.1.50 55001:37215 55002:41234
In a second terminal, use 127.0.0.1 and the local ports in place of the TV's address:
adb pair 127.0.0.1:55001 123456
adb connect 127.0.0.1:55002
Everything from step 5 then works as normal. Stop the script with Ctrl+C when you are done.
Common questions
Do I have to set Art Frame TV as the screensaver?
What is the easiest way to set it as the screensaver on Google TV?
Why does adb connect say No route to host?
Why does adb pair say protocol fault?
Is port 5555 right for Wireless debugging?
Why does Start now do nothing on my TCL TV?
Does it need root, and can I undo it?
Art Frame TV puts your photos and gallery classics inside photorealistic frames with real passe-partout matting, on Google TV and Android TV. Free, no account, no ads. See how it works →
More guides
- How to change the screensaver on Google TV and Android TV
- How to put your Google Photos on your TV screensaver
- Where to find free art for a Frame TV — and any other TV
- How to turn any TV into a digital photo frame
- What is a passe-partout? Mat board, bevels and the 18% rule
- Art mode without buying a Frame TV