Android virtual camera controller with root Camera1 sync, a Compose-first UI, and a clean multi-module architecture.
- Root-first workflow: manage Camera1 files and marker toggles used by LSPosed/Xposed camera modules.
- Focused, dark UI with clear status feedback and log visibility.
- Persistent source picks (video and image) for quick re-sync.
- Target app selection with per-app profiles.
- Modular codebase ready for a real virtual camera engine.
- This app manages Camera1 files and marker flags on rooted devices, with per-app targets and profiles.
- It still requires an external hook/injection module (LSPosed/Xposed, etc.) to redirect camera output in other apps.
- It is not intended for bypassing security, identity checks, or app protections. Use responsibly and lawfully.
ShadowCam writes to DCIM/Camera1 using root and follows common module conventions:
- Video replacement:
virtual.mp4 - Photo replacement:
1000.bmp(any image format renamed to .bmp) - Marker files:
disable.jpg(disable module)no_toast.jpg(hide module toasts)force_show.jpg(force directory toast)private_dir.jpg(per-app Camera1 directory)no-silent.jpg(enable audio if supported)
Tip: Match the replacement media resolution to the target app camera resolution to avoid black screens or distortion.
If you enable the private_dir.jpg marker, pick a target app in Apps first. ShadowCam will sync to:
DCIM/Camera1/<package.name>/virtual.mp4 and DCIM/Camera1/<package.name>/1000.bmp.
- Root your device and install an LSPosed/Xposed camera module (not included here).
- Build and install ShadowCam.
- Open Apps -> pick a target app (optional but required for Private Dir).
- Open Sources -> pick a video/image -> Sync to Camera1.
- Toggle marker files as needed.
- Open the target app camera.
app: Compose UI, navigation, DI, service wiring.core-model: shared models.core-engine: virtual camera engine contract (stub).profiles,sources,logging,antidetect: in-memory stores/monitors.
Requirements: JDK 17, Android SDK, Gradle.
./gradlew assembleDebug
./gradlew assembleReleaseAPK outputs:
- Debug:
app/build/outputs/apk/debug/app-debug.apk - Release (debug-key signed):
app/build/outputs/apk/release/app-release.apk
GitHub Actions builds a release APK on tag push matching v*.
Workflow: .github/workflows/android-release.yml
- Real virtual camera engine (root + non-root paths).
- Source preview, trimming/cropping, and per-app profiles.
- Expanded logs/export and permission rationale flows.
Issues and PRs are welcome. Keep changes scoped and document any device-specific behavior.
No license specified yet.