A modern, automated CloudStream
.cs3archive and decoded inspection repository maintained by Diwas Khatri.
NepaliStream CNC Repo combines the published builds branches from two public CloudStream extension repositories into one clean collection. It automatically synchronizes new .cs3 files, keeps the original plugin filenames, organizes every plugin in a simple decoded/ folder, extracts manifests/resources, generates Kotlin metadata, validates the result, and pushes updates with GitHub Actions.
- Maintainer/developer: Diwas Khatri
- CNCVerse source: NivinCNC/CNCVerse-Cloud-Stream-Extension/builds
- Phisher98 source: phisher98/cloudstream-extensions-phisher/builds
- Decoder tool: JADX
Upstream authors remain credited in their manifests. This repository does not claim ownership of upstream code, trademarks, provider implementations, or third-party assets.
There are no .cs3 files in the repository root. There are no CNCVerse__ or Phisher98__ prefixes in plugin filenames.
decoded/
├── AniKoto/
│ ├── CNCVerse/
│ │ ├── AniKoto.cs3
│ │ ├── java/sources/...
│ │ ├── kotlin/PluginMetadata.kt
│ │ ├── manifests/manifest.json
│ │ └── resources/...
│ └── Phisher98/
│ ├── AniKoto.cs3
│ ├── java/sources/...
│ ├── kotlin/PluginMetadata.kt
│ ├── manifests/manifest.json
│ └── resources/...
├── MovieBoxProvider/
│ ├── CNCVerse/MovieBoxProvider.cs3
│ └── Phisher98/MovieBoxProvider.cs3
└── _sources/
└── upstream metadata
decoder.py # Root decoder entry point
auto-pusher.py # Root automatic source updater
scripts/organize_existing.py # One-time existing-output organizer
scripts/decode_sources.py # Decoder implementation
scripts/update_sources.py # Upstream synchronization
scripts/validate_layout.py # Final structure checks
.github/workflows/decode-and-publish.yml
This structure keeps duplicate plugin names safely separated by source folders, while each .cs3 retains its original filename.
The workflow is Auto Decode and Push Builds.
It runs every 30 minutes and also supports manual execution from:
GitHub → Actions → Auto Decode and Push Builds → Run workflow
Each run performs these stages:
- Checks out the repository.
- Uses the runner's built-in Python and installs the pinned JADX release directly at
/tmp/jadx/bin/jadx. - Pulls both public upstream
buildsbranches. - Stores each archive at
decoded/<plugin>/<source>/<plugin>.cs3. - Extracts each manifest and Android resource directory.
- Decompiles
classes.dexinto the plugin’sjava/sources/inspection layer. - Generates
kotlin/PluginMetadata.ktfrom the embedded manifest. - Rebuilds
decoded-index.jsonwith SHA-256 hashes and sizes. - Validates archive, Kotlin, manifest, workflow, and folder counts.
- Writes a GitHub Actions summary and uploads the index as an artifact.
- Commits and pushes only if files changed.
The source repositories do not provide a guaranteed webhook into this repository, so the 30-minute schedule is the reliable automatic detector. Manual dispatch is available for immediate updates.
Every UTC day, the workflow updates logs/update-log.md with the date, workflow run ID, trigger, archive count, Kotlin count, manifest count, and decompiled source count. The workflow summary is also visible inside each Actions run.
The separate 5-Minute Status Monitor runs every five minutes. It does not re-decode files. It reads the checked-in decoded/ tree and publishes the latest health snapshot to STATUS.md and machine-readable stats.json.
The monitor records the last update time in UTC, latest decode workflow ID/status/conclusion, .cs3 archive count, Kotlin file count and line count, decompiled Java file count and line count, total code lines, and comment lines. This gives the repository a lightweight live dashboard without starting the expensive decoder every five minutes.
| Statistic | Where it is updated |
|---|---|
| Last monitor update time | STATUS.md |
| Latest decode run and health | STATUS.md |
| Kotlin file and line count | stats.json |
| Java file and line count | stats.json |
| Comment-line count | stats.json |
| Daily history | logs/update-log.md |
The monitor commits only STATUS.md and stats.json, while the decoder workflow commits decoded build changes and the daily log. Both workflows use separate concurrency groups.
Browse online:
- Decoded plugins
- Workflow
- Root decoder
- Root auto-pusher
- Scripts
- Actions runs
- Daily update log
- Live status dashboard
- Machine-readable statistics
Clone locally:
git clone https://github.com/DiwasKhatri07/NepaliStream-CNC-Repo.git
cd NepaliStream-CNC-Repo
python3 scripts/validate_layout.pyA .cs3 archive contains compiled Android DEX bytecode, not the original Kotlin source. The generated PluginMetadata.kt files are valid Kotlin metadata/index files containing plugin identity, original class, version, resource requirement, and content types. They are not exact restorations of the original provider implementation. The decompiled Java inspection layer is retained under each plugin for behavior reference; building a complete Kotlin provider still requires manual SDK porting and testing.
- Original plugin filenames are preserved.
- CNCVerse and Phisher98 copies are separated by source directory only.
- No root-level
.cs3files are used. - No source-prefix filenames are used.
- The decoder is deterministic and rebuilds generated layers per plugin.
- Layout validation runs before the automated push.
- Workflow concurrency prevents overlapping update pushes.
- The five-minute monitor reports health and code statistics without re-decoding.
- The workflow has a 30-minute timeout and writes a run summary.
- No secrets are required because both upstream repositories are public.
The workflow is deliberately split into small visible stages: source pull, archive decoding, metadata generation, validation, summary creation, artifact upload, and push. A failure stops before publishing incomplete output. The repository uses a fixed JADX archive layout and invokes /tmp/jadx/bin/jadx directly, avoiding PATH timing issues between GitHub Actions steps. Python dependency caching is not used because the scripts use only the Python standard library and the repository has no requirements.txt or pyproject.toml.
If an update fails, open the failed run from Actions, read the first red step, and run the equivalent local checks:
python3 scripts/validate_layout.py
python3 scripts/write_update_log.pyThe workflow also uses concurrency control so a second 30-minute run cannot publish over an active run.
No universal license for all upstream build artifacts was inferred. Review the upstream repositories, provider authorship, manifests, and third-party asset terms before redistribution or production use.
cloudstream cs3 kotlin jadx decompiler nepalistream cnc-repo github-actions automated-builds streaming anime movies tv-series developer-tools