chitra-frame
Docker app from chitra.art's Repository
Overview
Readme
View on GitHubChitra Frame
Chitra Frame puts artworks from your chitra.art account on the TV on your wall. It runs on a server in your home, signs in with a code you confirm on chitra.art, pairs with the TV once, and then changes the picture on the schedule you choose.
Each work is rendered for the panel before it goes up: cropped or fitted the way you framed it on chitra.art, turned for a TV that hangs in portrait, with an optional caption naming the work and the artist. Your own photos can go round a work that leaves room on the screen. They are read from a folder you choose and never leave your server.
This is an early build. Today it works with Samsung's The Frame, and is tested on a 2026 The Frame Pro; other years should work and have not been tried. Other TVs and displays will follow.
What you need
- A supported TV on the same network as the server. Today that is Samsung's The Frame
- A chitra.art account
- Unraid, or any Docker host that can run a container with host networking
Install on Unraid
Open a terminal on the server and download the template:
wget -O /boot/config/plugins/dockerMan/templates-user/my-chitra-frame.xml \ https://raw.githubusercontent.com/233-Solutions-Inc/chitra-frame/main/templates/chitra-frame.xmlOn the Docker tab choose Add Container, then pick chitra-frame from the Template list.
Type a Setup page password of at least 8 characters, then Apply.
Click the container's icon and choose WebUI.
Set it up
The setup page walks through it in order. Unlock it with the password you set, then:
- Sign in. The page shows a code. Open chitra.art/account/devices on a phone or computer where you are signed in, and enter it. No password is typed into the setup page or stored on your server.
- Find your TV. Turn the TV on and press Search for my TV. The first time, the TV asks whether to allow the connection: choose Allow with its remote.
- Say which way it hangs. The TV cannot tell, so you choose landscape or portrait. The test card checks that pictures land the right way up.
A picture goes up as soon as the TV is connected. What plays, how often it changes and the caption are chosen on chitra.art/frame, under Your Frames.
Keep the setup page private
The setup page can change what your TV shows, sign the app in or out, and choose the folder your photos are read from. Anything that can open its address can try to use it, so:
- Nothing can be changed without the setup password. With no password set, the page shows status only. Five wrong tries lock that device out for five minutes.
- Do not put it on the internet. The page is plain HTTP. Do not forward its port on your router or publish it through a reverse proxy.
- Restrict access as suits your network: a firewall rule, a separate network for guests and smart devices, or a VPN when you are away.
- Turn it off when you are done. Use the button at the bottom of the page, or set
Setup page to
offin the container's settings. No port is open after that, and the app keeps playing.
To bring the page back after turning it off from the page, open the container's console,
run chitra-frame web on, and restart the container.
Settings
| Setting | What it is |
|---|---|
Config (/config) |
Everything the app keeps: its settings, the sign-in, the TV's pairing and copies of the pictures it sent. Keep it on appdata. |
My photos (/photos) |
Optional. A folder of your own photos, mapped read-only. |
| Setup page password | Needed to change anything on the setup page. It is not your chitra.art password. |
| Setup page | on or off. Off opens no port at all. |
| Setup page port | 8099 unless you change it. |
| TV address | Optional. The TV's IP address, to skip the network search. |
| Time zone | Optional, for the times in the log, such as America/Toronto. |
The container uses host networking. The TV is found with a network search and woken with Wake-on-LAN, and neither crosses Docker's bridge network.
Other Docker hosts
docker run -d --name chitra-frame \
--network host \
--tmpfs /tmp:rw,exec,nosuid,size=512m \
-v /path/to/config:/config \
-v /path/to/photos:/photos:ro \
-e CHITRA_FRAME_WEB_PASSWORD='choose-a-password' \
-e TZ=America/Toronto \
--restart unless-stopped \
ghcr.io/233-solutions-inc/chitra-frame:latest
Then open http://<server>:8099. Leave out the /photos line if you do not want your own
photos shown.
Updating
On Unraid: Docker tab, Check for Updates, then apply the update. Your sign-in, the TV's
pairing and your settings are in /config and carry over.
If something is not working
The container's log says what the app is doing in plain sentences; a line that starts with
! is a problem. On Unraid it is under the container's icon, Logs.
- The TV is not found. Check it is on, and on the same network as the server. If the search still misses it, type its address on the setup page.
- The TV stops answering after a while. A TV that is switched off at the wall cannot be reached. One that is asleep can: use Wake the TV on the setup page.
- The sign-in code ran out. Codes last ten minutes. Press Get a sign-in code for a new one.
Tell us how it went
This is a beta, and it has been tried on one TV in one home, so a report from yours is worth a great deal, whether it worked or not. Open an issue or write to contact@chitra.art, and say:
- the TV's model and year (the setup page shows the model under Your TV)
- which way it hangs, landscape or portrait
- what you did, what you expected, and what happened instead
- the lines around the problem from the container's log (Docker tab, the container's icon,
Logs); the lines that start with
!matter most
For more detail, switch on Keep a diagnostics log on the setup page, restart the
container, and repeat what went wrong. The log is chitra-frame.log in the config folder.
It never holds your sign-in, the TV's pairing or your pictures, so it is safe to attach.
Licence
The files in this repository (the template, this page, the banner and the icon) are under the MIT licence. The Chitra Frame app inside the container image is not open source, and its licence is separate.
Requirements
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/233-solutions-inc/chitra-frame:latestRuntime arguments
- Web UI
http://[IP]:[PORT:8099]/- Network
host- Shell
sh- Privileged
- false
- Extra Params
--tmpfs /tmp:rw,exec,nosuid,size=512m
Template configuration
Everything the app keeps: its settings, the chitra.art sign-in, the TV's pairing, the copies of pictures sent to the TV (20 by default, a few megabytes each) and the optional log. Keep it on appdata so it survives updates.
- Target
- /config
- Default
- /mnt/user/appdata/chitra-frame
- Value
- /mnt/user/appdata/chitra-frame
Optional. A share or folder of your own photos to show round a work that leaves room. Mapped read-only: the app never changes or uploads them. Leave empty if you do not want this.
- Target
- /photos
Required to change anything on the setup page, at least 8 characters. Without it the page only shows status. This protects the page from anyone else who can reach this server's address; it is not your chitra.art password.
- Target
- CHITRA_FRAME_WEB_PASSWORD
off opens no port at all: use it once setup is finished. The app keeps playing; what plays is chosen on chitra.art/frame.
- Target
- CHITRA_FRAME_WEB
- Default
- on|off
- Value
- on
The port the setup page listens on (host networking, so change it here if 8099 is taken).
- Target
- CHITRA_FRAME_WEB_PORT
- Default
- 8099
- Value
- 8099
Optional. The TV's IP address, to skip the network search. Give the TV a fixed address on your router if you set this.
- Target
- CHITRA_FRAME_TV_HOST
Optional, for the times in the log and on the setup page, for example America/Toronto.
- Target
- TZ
The user the app runs as (Unraid's nobody).
- Default
- 99
- Value
- 99
The group the app runs as (Unraid's users).
- Default
- 100
- Value
- 100