cleanyourtv-app
Clean Your TV를 위한 커뮤니티 제작 모바일 앱
잠금된 Android 포토프레임에 ADB, 루트, 백업 및 맞춤 앱을 설치합니다
Getting ADB, root, backups and custom apps onto locked-down Android photo frames (Skylight Calendar, BIUFRAME)
기타Python · JavaScriptGitHub @wesbos직접 설치운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
설치형 프로젝트는 배포 도메인 없이도 확인할 수 있습니다. 개인 저장소는 GitHub 로그인으로, 조직 저장소는 위의 저장소 확인 파일로 직접 확인해 주세요.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Turn a cheap Android photo frame into a family dashboard: unlock it, root it, replace the vendor app, and run your own web page full screen.
TLDR: buy a $50 frame, point an agent at this repo and let 'er rip!
▶️ Watch the video: https://youtu.be/ZLycoUMltNI
Frames confirmed to work (Amazon affiliate links). See the device index for every frame, which board it has, and where to start.
More than 70 people have shared their hacked frames in Community builds: LCARS interfaces, retro weather channels, chess puzzles, Linux on a frame, family dashboards and more.
Notes and scripts from getting full control of locked-down Android photo frames: getting ADB, backing up the firmware, getting root, removing the vendor app, and running our own launcher, browser and kiosk app. These are records of the units their owners tested, not universal flashing guides.
Frames sold under the same name, even the same Amazon listing, can have different boards. Check Settings → About before you follow any guide:
A33 and PF1007L): Allwinner A33. Many viewers of
the video got this one. Use a USB-A to USB-C data cable; USB-C to USB-C gives no power or data.
Start with pf1007l-start-here.md. It tests
ADB over USB, then the network, and only then a boot patch. Its vendor app accepts root shell
commands from the vendor's server, so read that page before the frame goes online.scripts/biuframe-setup.sh check
changes nothing and confirms the hardware matches; backup and apply do the rest.D156.V0.10 ships with ADB and su on (skylight-d156.md).
If load-usb-reader.py says the DDR helper doesn't match, stop and identify the firmware and
backup first. A different build or a wrong/corrupt backup can cause a mismatch; see
skylight-150cal-ddr-v126.md.wifi photo frame_20250822, platform rk312x): the unit
tested never enumerated over USB. Root and network ADB came from an SD card. Start with
dromart-mi86.md, and match the fingerprint before using the card.docs/<device>.md, and
send in what you find.dashboard/ is the family dashboard we run on the BIUFRAME (it uses mock data): a Vite
web app deployed to Cloudflare Workers. dashboard/kiosk/ is a small full-screen WebView Android app,
built without Gradle, that shows it. Hold two fingers still for 1.5 s to open a menu for the
launcher, Android settings, and reloading. On frames without system navigation, optional floating
Back and Dashboard buttons help; see the kiosk guide.
You are probably helping someone with a similar device plugged into a Mac over USB. Read this section, then follow the links for the phase you are in. Do not run anything from a device section unless the identity checks match exactly.
/system,
or sending a RAM payload to the SoC needs explicit approval for that specific action.0xCC filler, and independent re-reads of a few partitions that match.OKAY. Fastboot reported a successful boot write on the Skylight that never
took effect. Verify writes by reading them back and checking the result on the device..bak copies next to edited files.backups/ and diagnostics/ folders. Leave unique
identifiers out of anything you commit.docs/, like the ones in the
device index, with
observations kept separate from guesses.input tap or screencap over ADB does not prove it. A
PF1007L was locked out this way; see
the lockout notes. Some
builds hide disabled apps in Settings, so keep a second way in, such as persistent ADB.Many people are working on these frames at the same time. New hardware variants, fixes and routes arrive as issues and pull requests, often before they are merged. Your local copy may be out of date.
Check before you start, and again before each write and at the start of each new session:
git fetch origin && git log --oneline HEAD..origin/main # new commits on main
gh issue list --repo wesbos/photo-frame-dashboard --state all --limit 30
gh pr list --repo wesbos/photo-frame-dashboard --state all --limit 30
gh pr view <number> --repo wesbos/photo-frame-dashboard # read anything about your device
gh pr diff <number> --repo wesbos/photo-frame-dashboard
Without gh, use https://github.com/wesbos/photo-frame-dashboard/issues and
https://github.com/wesbos/photo-frame-dashboard/pulls. Read open PRs about your device, not only
merged docs. If newer information contradicts these docs, tell the owner and follow the newer
information only after its checks pass on your unit. Unmerged PRs are less reviewed, so treat their
scripts with extra care.
Send a pull request when you learn something new about a device that is already documented or about a new one. Examples: a new board or firmware string, a different boot image hash, a cable or port that does or does not work, a step that failed, a better route, or a correction. Failed attempts are useful too.
docs/. For a new device,
create docs/<device>.md. Keep observations separate from guesses, and say which host OS and
which unit you used.gh pr create --repo wesbos/photo-frame-dashboard.For a PF1007L, include the report template.
Keep what you changed on the owner's frame, where the backups are and how to undo it in the
ignored frames/ folder, and read it at the start of the next session. Re-check the frame before
trusting it, and remember that a past approval is not permission for a new write. See
frame-records.md.
| Phase | What to read |
|---|---|
| 1. Identify the hardware | USB IDs (Rockchip is VID 2207), adb shell getprop, chip query in loader mode. See the hardware tables in biuframe.md and hardware-research.md. |
| 2. Get ADB | Try in this order: (1) over USB (adb devices; accept any "Allow USB debugging" prompt on the screen), (2) over the network (adb connect <ip>:5555), (3) only then a vendor-app trick or a boot patch. The PF1007L boot patch is written from an SD card, see pf1007l-start-here.md. Ideally no one needs (3). For a vendor-app trick, decompile the vendor app (jadx) and look for hidden tap counters and code dialogs: app-analysis.md. Gestures that did not work are in research-log.md. |
| 3. Loader mode | Skylight: hold Volume − while connecting power. BIUFRAME: reset button at power-on (unconfirmed). Building rkdeveloptool on Apple silicon: research-log.md. |
| 4. Back up | If loader reads past 32 MiB return 0xCC filler, they are not a backup: loader-research.md. Patched helper and full capture: scripts/patch-usb-reader.py, scripts/load-usb-reader.py, , , . With root, back up over ADB instead: . |
backups/, diagnostics/, log/, loader query output and machine-local settings are excluded by
.gitignore. They hold full flash dumps, decompiled vendor code, signing keys, and the unit's
identifiers. Do not commit them, and do not publish dumps or vendor APKs.
scripts/probe-reader.pyscripts/backup-flash.pyscripts/inspect-backup.pyscripts/biuframe-setup.sh backup| 5. Root | First check for a shipped su (adb shell su -c id). On Android 10+ user builds, try the debug-ramdisk route: debug-ramdisk-research.md, scripts/build-debug-boot.py. Fastboot write failures: ram-boot-research.md. |
| 6. Make it useful | Launcher: android-launcher.md. Old Android (6.x) with a browser, WebView swap, CA roots, swap, nav bar and disabling vendor apps: biuframe-setup-guide.md. Kiosk app and launcher database edits: biuframe.md. A working example of a kiosk app and dashboard is in dashboard/. Build with dashboard/kiosk/build.sh (macOS/Linux) or dashboard/kiosk/build.ps1 (Windows), change DEFAULT_URL in MainActivity.java to your own URL, and target the device's WebView version (see dashboard/vite.config.js). |
| 7. Networking | USB reverse tethering with gnirehtet: usb-internet-sharing.md. An app that requires Wi-Fi specifically: onboarding-network-gate.md. Dead onboard Wi-Fi and a USB dongle: usb-wifi-dongle.md. |
| 8. Vendor updates | Connecting the stock app to the internet can auto-install APK updates: app-updates.md. Assess updater behavior before going online; some components are boot dependencies. Consult the matching device guide and follow the write/backup rules before changing anything. |
| 9. Security hand-off | Record containment checks, remaining risks and rollback: frame security. See the BIUFRAME limits for that firmware. |