{"id":47617283,"url":"https://github.com/fenron-dev/mediashelf","last_synced_at":"2026-04-14T20:01:25.070Z","repository":{"id":345825161,"uuid":"1187544936","full_name":"Fenron-dev/MediaShelf","owner":"Fenron-dev","description":"Cross-platform Digital Asset Manager (DAM) — Flutter port of Nexus Explorer. Manage your local media library on Linux, Windows, macOS, Android \u0026 iOS.","archived":false,"fork":false,"pushed_at":"2026-04-06T18:16:34.000Z","size":826,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-06T19:28:46.987Z","etag":null,"topics":["cross-platform","dart","digital-asset-manager","flutter","media-library","riverpod","sqlite"],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Fenron-dev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-20T21:12:44.000Z","updated_at":"2026-04-06T18:16:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Fenron-dev/MediaShelf","commit_stats":null,"previous_names":["fenron-dev/mediashelf"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/Fenron-dev/MediaShelf","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fenron-dev%2FMediaShelf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fenron-dev%2FMediaShelf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fenron-dev%2FMediaShelf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fenron-dev%2FMediaShelf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Fenron-dev","download_url":"https://codeload.github.com/Fenron-dev/MediaShelf/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fenron-dev%2FMediaShelf/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31812977,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"ssl_error","status_checked_at":"2026-04-14T18:05:01.765Z","response_time":153,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cross-platform","dart","digital-asset-manager","flutter","media-library","riverpod","sqlite"],"created_at":"2026-04-01T21:38:26.163Z","updated_at":"2026-04-14T20:01:25.062Z","avatar_url":"https://github.com/Fenron-dev.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MediaShelf\n\nA cross-platform **Digital Asset Manager (DAM)** built with Flutter — manage your local media library across Linux, Windows, macOS, Android and iOS.\n\nMediaShelf is a port of [Nexus Explorer](https://github.com/Fenron-dev/nexus-explorer) with full library compatibility (shared `.mediashelf/index.db` schema and Smart Filter JSON format).\n\n---\n\n## Features (Phase 1 MVP)\n\n- **Multi-platform** — Linux · Windows · macOS · Android · iOS (one codebase)\n- **Self-contained libraries** — every library is a folder with `.mediashelf/index.db`; move it anywhere and it still works\n- **Fast file scanner** — runs in a Dart Isolate, MD5-based move/rename detection, FTS5 full-text search\n- **Auto-thumbnails** — 256 × 256 JPEG cache, generated in an Isolate pool (4 workers)\n- **Smart Filters** — rule-based JSON queries (`{logic, rules}`) compatible with Nexus Explorer\n- **Rich metadata** — star rating (0–5), color labels, free-text notes, tags, collections\n- **Media playback** — video (chewie) and audio (just_audio) with resume support\n- **Responsive layout** — 3-panel desktop shell (sidebar · grid · detail panel) and mobile bottom-nav shell\n- **Filesystem watcher** — live updates with 800 ms debounce\n- **Activity Journal** — tracks added / missing / restored events\n\n## Roadmap\n\n| Phase | Scope |\n|-------|-------|\n| **1 — MVP** (current) | Core DAM: scanner, thumbnails, tags, collections, smart filters, basic player |\n| 2 | AI features: semantic search, auto-tagging, duplicate detection |\n| 3 | Sync: multi-device, cloud backup |\n| 4 | Extended formats: EPUB reader, advanced video analysis |\n\n---\n\n## Getting Started\n\n### Prerequisites\n\n```bash\nflutter --version   # \u003e= 3.41\n```\n\nOn **Linux** the video player needs GStreamer:\n\n```bash\nsudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \\\n                 gstreamer1.0-plugins-good gstreamer1.0-plugins-bad\n```\n\n### Run\n\n```bash\nflutter pub get\ndart run build_runner build --delete-conflicting-outputs\nflutter run -d linux        # or: windows / macos / android / ios\n```\n\n### Build (release)\n\n```bash\nflutter build linux --release\n```\n\n---\n\n## Architecture\n\n```\nlib/\n├── core/            # Constants, file hashing (MD5), MIME resolver\n├── data/\n│   ├── database/    # Drift ORM — 8 tables + FTS5 + triggers, 4 DAOs\n│   ├── scanner/     # LibraryScanner (Dart Isolate, sqlite3 direct)\n│   ├── thumbnailer/ # ensureThumbnail (Isolate pool, image pkg)\n│   ├── watcher/     # LibraryWatcher (watcher pkg, 800 ms debounce)\n│   └── repositories/\n├── domain/models/   # AssetFilter, ScanResult\n├── providers/       # Riverpod state (library, assets, tags, scan, playback …)\n└── ui/\n    ├── screens/     # WelcomeScreen, LibraryScreen, PlayerScreen, ActivityScreen\n    ├── layout/      # ResponsiveShell → DesktopShell / MobileShell\n    └── widgets/     # AssetGrid, AssetCard, ThumbnailImage, Sidebar, DetailPanel …\n```\n\n**State management:** Riverpod 2\n**Navigation:** go_router 14\n**Database:** Drift 2 + sqlite3_flutter_libs (FTS5 enabled)\n**Thumbnails:** image 4 (pure Dart, Isolate-safe)\n**Media:** video_player + chewie (video) · just_audio (audio)\n\n---\n\n## Library Compatibility\n\nMediaShelf libraries are **fully compatible** with Nexus Explorer:\n\n- Same folder layout: `\u003croot\u003e/.mediashelf/index.db` + `\u003croot\u003e/.mediashelf/thumbnails/`\n- Identical SQL schema (same column names, types, defaults)\n- Smart Filter JSON format: `{\"logic\":\"AND\",\"rules\":[…]}` — identical on both apps\n\nYou can open the same library folder in either application without migration.\n\n---\n\n## License\n\nMIT — see [LICENSE](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffenron-dev%2Fmediashelf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffenron-dev%2Fmediashelf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffenron-dev%2Fmediashelf/lists"}