Open-source Cablegram apps: play the videos you already have on your TV, with your phone as the library and remote. Android phone and TV, iOS, LG webOS and Samsung Tizen. Pairs with the self-hostable cablegram-server. GPL-3.0.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Play the videos you already have on your TV. Your phone is the library and the remote.
Cablegram is a personal media player for videos you own. Pick files on your Android phone or keep them in your own Telegram channel, then play them on your TV with the phone as the remote. Cablegram provides no content and does not store your videos. This repository holds the open-source phone and TV apps.
apps/tv-web.The apps work with the hosted Cablegram service or with Cablegram Community Server, the open-source, self-hosted server (GPL-3.0, Docker Compose):
git clone https://github.com/seep-labs/cablegram-server && cd cablegram-server
cp .env.example .env && docker compose up -d
docker compose logs cablegram # shows the first-start setup code
In the phone app, choose Join a server and enter your server's URL and the setup code. Both servers follow the contracts in this repository. The hosted service's account, catalog and relay services remain closed source.
The videos shown are Blender Foundation open movies under CC BY licences; see docs/screenshots/CREDITS.md. Cablegram doesn't provide films.
tg://login?token=) to the phone so you can approve
it. See contracts/telegram-link.md; the server parses those bodies strictly and
rejects unknown fields.TelegramApiSurfaceTest (in each app, under
src/test/java/app/cablegram/telegram) uses reflection to assert that the methods of TelegramApi equal a
fixed allowlist. uploadVideo is the only method that sends messages; the optional community
channels can be joined only after you save your selection. The fixed public Bot Hubs feed is also read
for recommendations; bots are verified by Telegram and added individually only after you confirm
their permissions and accept the disclaimer. Adding a method fails the test
until someone changes the allowlist in review.app.cablegram.discovery, that looks at the newest 100 videos and files of each of your
channels and groups to count the videos (10 minutes or longer by default) and lists those in chats you tick. It never reads your chats without your permission: an "On this phone" notice
asks before every scan, personal chats are off unless you turn them on, and only videos you pick are forwarded
into your library channel. Its own Telegram allowlist is pinned by DiscoverySurfaceTest;
DiscoveryPrivacyContractTest proves no source chat id or title reaches the Cablegram server; and the TV app
has no discovery code (NoDiscoveryTest).TelegramLogAuditTest covers log output.| Path | What |
|---|---|
apps/android-phone | Phone app (Kotlin, Jetpack Compose). Package app.cablegram.phone. |
apps/android-tv | TV app (Kotlin, Compose for TV, LibVLC). Package app.cablegram. |
apps/ios-phone | iPhone app (Swift, SwiftUI), in development. |
apps/tv-web | LG webOS and Samsung Tizen TV app (TypeScript, Vite). |
apps/web-remote | Web remote for iPhone and other phones without the app: a Home Screen web app, no App Store. |
docs/ | User guide: pairing, selected files and folders, subtitles, privacy, and troubleshooting. |
contracts/ | The API and protocols the apps speak: control API, pairing, LAN media, remote commands, relay, Telegram link, your own R2 storage. |
scripts/check-telegram-sync.mjs | Fails when the phone and TV copies of the Telegram package differ. |
The Telegram package is copied into both apps on purpose, until a shared module exists. Keep both copies identical.
You need JDK 21 (the unit tests use Robolectric, which needs it for SDK 36) and the Android SDK (compileSdk 36). Each app is its own Gradle project:
cd apps/android-phone # or apps/android-tv
./gradlew testDebugUnitTest
./gradlew assembleDebug
Telegram application credentials are fetched after Cablegram sign-in from the authenticated
GET /api/telegram/client-config endpoint over HTTPS. They are held in memory and never embedded
in BuildConfig, stored in app preferences, or supplied to release CI. A new process needs the server
before TDLib can start; a running session keeps working without fetching them again. The backend must
be deployed before distributing these builds. Remote delivery raises the effort to extract the
application identity; someone inspecting a running client can still recover it.
By default the apps talk to https://api.cablegram.app/. Override it with -PCABLEGRAM_API_BASE=https://....
The backend is not part of this repository. To point a build at your own host, run
Cablegram Community Server, or simply choose Join a server in
the phone app at runtime.
To keep the APK small, add -PCABLEGRAM_ABIS=arm64-v8a (phone) or the ABI of your device.
Tagged releases are built and signed by the Release workflow and published with checksums. See VERIFY.md to check a download or an installed app.
After the GitHub release is created, the same signed bundles are uploaded to the Google Play internal testing tracks for the phone and TV apps, including release candidate tags.
The upload runs as a Google Cloud service account whose JSON key is the PLAY_SERVICE_ACCOUNT_JSON repository
secret. In Play Console (Users and permissions), give that account these permissions on each of the two apps, not at
the account level: View app information, Release apps to testing tracks, and Manage testing tracks and edit
tester lists. Without the testing-track permissions, the account can still upload a bundle, but committing the
release fails with "The caller does not have permission". It needs no production or admin permissions.
Cablegram is an unofficial app and is not made or endorsed by Telegram. A fork must use its own Telegram
api_id and api_hash, and must not call itself "Telegram". Third-party licences are in NOTICE.
Cablegram is GPL-3.0 with an additional permission for linking OpenSSL, see
LICENSE-OPENSSL-EXCEPTION.md.
Cablegram is free and open source. If it makes your movie nights easier, you can help cover server costs and keep development going on Ko-fi.
See CONTRIBUTING.md. Report vulnerabilities as described in SECURITY.md.