Now Screening
Users
Loading…
| Actions |
|---|
No users yet.
Front of House
Notices
Announcements shown when the app opens. Keep as many as you like; one is live at a time, and turning another one on takes its place. Editing the words does not reopen the popup on phones that already showed it — tick Show it again for that. Needs app 3.0.
No notices yet. Write the first one below.
Super Admin Only
Broadcasts
Broadcasts source
The live-TV channel API this list is fetched from. Enabling or disabling a channel below only changes what we consider it to be — it never writes anything back upstream.
Every enabled channel's streams are checked every 30 minutes. A server that fails is left out of the app, and a channel whose servers all fail is hidden until a later check finds one working. A channel's Enable setting is never changed.
Loading…
No broadcasts upstream right now.
Projection Booth
Settings
What people see when they open चलचित्र.
Maintenance mode
Shows a plain screen instead of the catalogue, for when the thing the app depends on is broken and every other screen would only show errors. The API keeps answering, so you can still check whether it is fixed. Give an end time and the app counts down to it and lets people back in by itself. Needs app 3.0.
Force update
Apps older than the minimum version are blocked: they see the update screen at launch
(3.2 and later read it from here), and every API call they make is answered with 426 and the
download link. Leave it empty for no forced update. Apps up to 3.1 still read Firestore's
android_min_version, so change both with set-min-version.sh.
Never raise it above a version users can install over their current one. Goes live on save.
Support links: Telegram and WhatsApp
Telegram is shown as a "Join on Telegram" button on the install page; both links appear in the app's Support section, on the Home footer and on playback errors. Leave a field empty to hide that link. The page reads a cached copy: Save stores the link, Publish makes it live.
What a new account gets, and what inviting a friend is worth.
Set everyone's expiry
Moves every subscription to one date in a single change. Accounts do not all sit together — some run much longer than others because the trial length has changed over time — so check the preview before applying: Extend only never takes time away, while Make them all the same will shorten anyone currently running past the date.
Free trial on signup
Every new account gets this many days of active subscription, then it expires on its own. Set to 0 to turn the trial off — new accounts start inactive. Applies to signups from now on; existing accounts are unaffected.
Referral programme
Every user has a referral code (shown in the app). When someone signs up for the first time on their phone with a friend's code, both get bonus days: a running plan is extended, an ended one is switched back on. A phone that already had an account earns nothing.
The two social buttons on the welcome screen.
Sign in with Google and Telegram
Both are off until these are filled in. The Google client ID is the Web client ID from Google Cloud Console (APIs & Services → Credentials); the Android client must be registered there too, with the app's signing SHA-1, but it is the Web client ID that goes here. The Telegram client ID is the number BotFather shows under the bot's Login Widget section; Telegram ID tokens are checked against it. Neither value is a secret. Clear a field to switch that button off.
Where the catalogue comes from and how the server looks after itself.
Content source (native app)
Where the app's catalogue comes from. Change these only when the site moves: a wrong value breaks browsing and playback for every user within minutes. Empty a field and save to return to the built-in default.
Share feed API key
The key the Telegram channel automation sends to /api/share/lists and
/api/share/feed (as ?key= or the X-Share-Key header).
Empty means the feed is off. Generating a new key stops the old one at once, so hand the
new one over before you do.
Video CDN referer
The Referer the app sends when it fetches video. The content site changes
this without notice; when it does, every video in the app stops loading at once
(HTTP 429). The server checks this every ten minutes against a real video link and,
if the CDN has stopped accepting it, switches to the origin the site's own player now
sends. You can also change it by hand; the app picks it up on its next launch.
Leave empty to use the built-in default.
Playback check
Every half hour the server takes eight titles from the Hindi home screen and walks the app's own path for each — detail, the episode Play would open, then the stream — and records what came back. A title the site has broken shows here as a red line, so you know before a viewer tells you. It only reports; nothing is changed automatically.
App code updates (OTA)
JavaScript fixes published with app/ota.sh. Each installed app runs the newest
entry for its own APK version, picked up silently on its next launch. To roll back, make an
older entry current: it is re-listed under a new number and phones return to it on their next
launch. Nothing here changes native code — that is still a release.
Usage reporting
How often a phone may send how long it was used and how much was watched. The app sends only when it comes to the foreground, so this is a ceiling, not a schedule: a phone in a pocket sends nothing, and one that is playing tries every 5 minutes. 15 minutes keeps the dashboard close to live; a larger number means fewer, bigger sends. 0 turns the reporting off. Between 5 and 10080 (a week). Phones on app 2.10 and older only understand hours, so for them it is rounded up to whole hours.
Offline downloads
The phone enforces all three. A change reaches phones after Refresh on the public config card below. Expiry is stamped when a download finishes; lowering it does not delete what people already hold.
Request signing
Checks that API calls come from the app: a signature under the key built into the APK, and,
for signed-in calls, one under the phone's own device key. Log checks and
counts but refuses nothing. Enforce refuses unsigned or wrongly signed calls
with 401 — switch to it only once the signing release has been forced with
android_min_version and the counts below show the traffic is signed, or every
older app is locked out. Off checks nothing. Counts reset when the server restarts.
Database backup
Once a day (and at startup) the server takes a consistent copy of the database, gzips
it, and uploads it to a Google Drive folder as chalchitra-YYYY-MM-DD.db.gz,
keeping the last 30 days. Create a Google Cloud service account with the Drive API
enabled, put its JSON key on the server (inside /opt/chalchitra), and share
the Drive folder with the service account's email as Editor. Empty either field and
backups stop. The key itself is never shown or stored here — only its path.
User details
- Signs in with
- Role
- Subscription
- Joined
- Expires
- Activated by
- App time
- —
- Watch time
- —
- Account ID
Last 14 days
Loading…
| Day | App | Watch |
|---|
Devices
Phones this account's sessions are bound to (request signing). Revoking one stops its tokens at once in enforce mode and ends its refresh sessions; signing in again on that phone binds it afresh.
| Device | Model | App | Key | Last seen |
|---|
Box Office
Dashboard
Loading…
Accounts
Total users
—
Active
—
Inactive
—
Admins
—
Usage
Counted by the app and sent once a day. Needs app 3.0 on the phone.
Used the app · 7 days
—
Watched yesterday
—
Watched · 14 days
—
People who opened the app — last 14 days
Distinct accounts per day, excluding the super admin. Counted by the app and sent once a day, so yesterday is the last full day.
Average watch time — last 14 days
Minutes per person, averaged over the people who watched something that day — not over everyone who opened the app.
Hours watched — last 14 days
Everyone's watching added together. It climbs as the user base grows, so read it beside the average above rather than on its own. Counted by the app and sent once a day, so yesterday is the last full day.
New signups — last 14 days
Expiring within 7 days
Nothing expiring this week.
Recent sign-in attempts (IST)
No sign-in attempts recorded yet.