OffReel is a beautiful, offline-first mobile app that turns your phone's local video gallery into a dynamic, zero-latency vertical feed. Experience your own personal videos with the same fluid, continuous swipe mechanics as modern social platforms—with 100% privacy, zero algorithms, and zero ads.
- 🎬 Vertical Reels-Style Feed: Swipe up or down to scroll chronologically through your video gallery in a smooth, continuous vertical layout.
- 🔒 Absolute Privacy & 100% Offline: No accounts, no login, and no internet required. Your private personal videos never leave the glass of your phone.
- 💖 Double-Tap to Favorite: Love a memory? Quickly double-tap anywhere on the screen to add it to your favorites with a beautiful physical vibration (haptics) and a cinematic heart burst effect.
- Aspect Ratio Control: Switch instantly between Fill Frame (Cover) to immerse yourself in the action, or Original View (Contain) to see the full format. Tap the floating icon on paused videos or change it in settings.
- 🔄 Flexible Synchronization Engines:
- Live OS Gallery (Auto-Sync): Automatically scan and sync new videos from your device's camera roll seamlessly in the background.
- Custom Vault (Manual Mode): Handpick exactly which videos you want to include in your OffReel feed through a secure grid with built-in selection locks.
- 🍸 Glassmorphic Actions: A beautiful floating panel at the bottom of the feed lets you instantly favorite items, share videos natively to other apps, or view local file details.
- 💎 High-End Aesthetic Skeletons: Gorgeous, smooth shimmering screens ensure the app feels premium and alive even when initializing your media vault.
OffReel is currently distributed as a standalone, zero-bloat Android package (.APK) for maximum control and privacy.
- Download the APK:
Visit our Official Landing Page or download the latest compiled
.apkpackage directly from our GitHub Releases Page. - Allow Unknown Sources: If your phone prompts you about installing applications from "Unknown Sources" or your web browser, tap Settings in the prompt and enable "Allow from this source".
- Install:
Tap the downloaded
.apkfile and tap Install in the native Android dialog. - Grant Permissions: Upon launching OffReel, permit the app to access your media files so it can securely populate your offline feed.
OffReel features highly intuitive gestures and a simple settings hub designed to keep you in complete control:
| Gesture / Action | Action Performed |
|---|---|
| Swipe Up / Down | Seamlessly navigates to the next or previous video in your vault. |
| Single Tap | Pauses or resumes playback. While paused, a play icon overlay will appear. |
| Double Tap | Favorites the active video, triggering a physical haptic pulse and heart explosion. |
| Pill Menu (Bottom) | Tap Heart to favorite, Paper Plane to share, and Ellipsis (...) to view file names. |
| Gear Icon (Top Right) | Opens the Vault Settings sheet. |
Open settings by tapping the gear icon at the top right of your screen:
- Display Ratio: Set whether videos default to Fill Frame or Original View.
- Sync Engine: Toggle between Live OS Gallery (auto-sync) and Custom Vault (manual selection).
- Danger Zone: Click Reset & Wipe Global Vault to clear your favorites, reset default ratios, and start fresh.
- 📺 Video is blank, black, or hanging? Hardware video decoders can occasionally hang on raw device files. Simply open Settings (gear icon) and tap "Refresh Media Bridge". This will instantly reset the local media decoders and restore your feed immediately.
- 🔄 Want to add more manual videos? If you're using Custom Vault mode, you'll see a white + button under the gear icon on the top right. Tap it to select new videos from your device.
- 🗑 How do I clear my cache? Open settings, scroll to the bottom, and tap "Reset & Wipe Global Vault" to safely purge all stored metadata. Your physical video files in your phone's gallery will never be deleted.
Join our active Discord community to talk with the creator, share your feedback, report issues, and help shape our feature roadmap!
👉 Join the OffReel Discord Server
Want to contribute code? Read the Contributing Guide to get started.
If you are a developer looking to build the application from source code:
- Clone the repository and install dependencies:
npm install. - Start the local server:
npx expo start. - To trigger standalone APK builds using EAS:
npx eas build --profile preview --platform android.
OffReel uses ESLint and Prettier to enforce consistent code style and catch bugs early. These run automatically over the entire src/ directory.
| Tool | Purpose |
|---|---|
ESLint v8 (eslint-config-universe/native) |
Enforces React Native best practices, React Hooks rules, import ordering, and unused variable detection |
| Prettier | Ensures uniform code formatting (single quotes, trailing commas, 100-char line width) |
eslint-plugin-react-hooks |
Catches missing useEffect dependencies and other hook violations |
| File | Description |
|---|---|
.eslintrc.js |
ESLint rules and preset configuration |
.prettierrc |
Prettier formatting preferences |
.eslintignore |
Excludes node_modules/, android/, ios/, .expo/ from linting |
# Scan the entire codebase for lint violations
npm run lint
# Auto-format all files according to Prettier rules
npm run format
# Auto-fix all lint issues that can be resolved automatically
npx eslint . --fix- No unused variables or imports — dead code is flagged immediately.
- React Hooks exhaustive deps — missing
useEffectdependencies are warned about to prevent stale closure bugs. - Import ordering — third-party packages must come before local imports.
- No duplicate imports — the same module cannot be imported twice.
- Consistent formatting — Prettier enforces a single canonical style.
Note: When a stable
Animatedref (e.g.videoOpacity,posterOpacity) is used inside auseEffect, it is intentionally excluded from the dependency array with an// eslint-disable-next-linecomment and an explanatory note.useRefvalues never change identity so adding them would cause no benefit and misleading re-runs.
Developed with ❤️ by elvisthebuilder