Sensorr
πΏπΌ Sensorr - Your Friendly Digital Video Recorder
Install / Use
/learn @thcolin/SensorrREADME
β¨ Features
<table className="markdown-table"> <tbody> <tr> <th>Screenshot</th> <th>Description</th> </tr> <tr> <td> <img src="https://raw.githubusercontent.com/thcolin/sensorr/master/doc/screenshots/home.png?raw=true" width="100" /> </td> <td> <b>Home</b> <ul> <li>Trending</li> <li>Discover (Popular)</li> <li>Discover (By year)</li> <li>Discover (By genre)</li> <li>Discover (By studio)</li> <li>Trending (stars)</li> </ul> </td> </tr> <tr> <td> <img src="https://raw.githubusercontent.com/thcolin/sensorr/master/doc/screenshots/library.png?raw=true" width="100" /> </td> <td> <b>Library</b> <ul> <li>Manage your movies <code>library</code> (<code>wished</code>, <code>pinned</code> and <code>archived</code>)</li> </ul> </td> </tr> <tr> <td> <img src="https://raw.githubusercontent.com/thcolin/sensorr/master/doc/screenshots/discover.png?raw=true" width="100" /> </td> <td> <b>Discover</b> <ul> <li><code>Discover</code> movies with many options</li> </ul> </td> </tr> <tr> <td> <img src="https://raw.githubusercontent.com/thcolin/sensorr/master/doc/screenshots/movie.png?raw=true" width="100" /> </td> <td> <b>Movie</b> <ul> <li>Display <code>movie</code> details</li> <li>Consider movie as, <code>π</code> <code>ignored</code>, <code>πΏ</code> <code>wished</code>, <code>π</code> <code>pinned</code> or <code>πΌ</code> <code>archived</code></li> <li>Find <code>releases</code> on <code>sources</code> (<code>torznab</code> / <code>newznab</code>) - requested with <code>title</code> (localized) and <code>original_title</code></li> <li>Grab a <code>release</code> (<code>manual</code> or <code>auto</code>)</li> </ul> </td> </tr> <tr> <td> <img src="https://raw.githubusercontent.com/thcolin/sensorr/master/doc/screenshots/collection.png?raw=true" width="100" /> </td> <td> <b>Collection</b> <ul> <li>Display <code>collection</code> details</li> </ul> </td> </tr> <tr> <td> <img src="https://raw.githubusercontent.com/thcolin/sensorr/master/doc/screenshots/calendar.png?raw=true" width="100" /> </td> <td> <b>Calendar</b> <ul> <li>Track upcoming movies from <code>followed</code> stars !</li> </ul> </td> </tr> <tr> <td> <img src="https://raw.githubusercontent.com/thcolin/sensorr/master/doc/screenshots/following.png?raw=true" width="100" /> </td> <td> <b>Following</b> <ul> <li>Manage stars you're <code>following</code></li> </ul> </td> </tr> <tr> <td> <img src="https://raw.githubusercontent.com/thcolin/sensorr/master/doc/screenshots/person.png?raw=true" width="100" /> </td> <td> <b>Star</b> <ul> <li>Display <code>star</code> details</li> <li>Follow star <code>π</code> <code>ignored</code>, <code>π</code> <code>followed</code></li> </ul> </td> </tr> <!-- <tr> <td> <img src="https://raw.githubusercontent.com/thcolin/sensorr/master/doc/screenshots/configure.png?raw=true" width="100" /> </td> <td> <b>Configure</b> <ul> <li>Simple configuration</li> <li>Secured WebUI (with <code>basic-auth</code>)</li> <li>Language aware, by default search on <a href="https://www.themoviedb.org/">TMDB</a> with first <code>window.navigator.languages</code></li> <li>Plex synchronization, never inadvertently download a movie you already own !</li> </ul> </td> </tr> --> <tr> <td> <img src="https://raw.githubusercontent.com/thcolin/sensorr/master/doc/screenshots/records.png?raw=true" width="100" /> </td> <td> <b>Logs</b> <ul> <li>See <code>logs</code> details</li> <li>Every wished <code>movie</code> processed</li> </ul> </td> </tr> </tbody> </table>ποΈ Quick Start
Best way to get a Sensorr fresh install is with the Docker image, you just need a terminal with docker installed !
π³ Docker
Checkout Sensorr Docker image at thcolin/sensorr/
# `/home/user/.sensorr` will be your config path
# `/home/user/downloads` will be your blackhole path
docker run -p 5070:5070 -v /home/user/.sensorr:/app/sensorr/config -v /home/user/downloads:/app/sensorr/blackhole --name="sensorr" thcolin/sensorr
Tips: Docker image is based on alpine, so you can add TZ env variable with -e TZ=Europe/Paris
π Configure
- Edit default configuration at
http://localhost:5070/settings(orconfig/config.json)
β° Jobs
Some necessary cron jobs will be launched in background every day:
- 16:03
sensorr:purge: Clean oldest log sessions (if directory space exceeds configured value) - 17:00
sensorr:record: Record wished movies from collection with best release - 01:03
sensorr:schedule: Schedule calendar with recents movies from stalked stars (+/- 2 years from today) - 03:03
sensorr:pairwise: Pairwise Plex instance with Sensorr instance (if configured) - 05:03
sensorr:hydrate: Hydrate -or refresh- collected movies and stalked stars data
πΊοΈ Roadmap
- Fix
Homerows issuesUpcoming/Recordsempty
- Display other
Personbehind eachMovieonDetailspage (:hoveronly)- Load every followed stars from database on component mount
- Feature
Policies- Add "groups"
Policywith "default" === current (groups likedefaultorblockbusterfor example)- Add configurable
avoidterms onMovie(like/movie/515195which got a0.73similarity score with/movie/582607) - Add configurable
preferterms onMovie(like/movie/447404I want inFRENCHand notVOSTFR)
- Add configurable
- Add
sizeproperty onSettings/blocks/Policy(how to handle it ?min/max?) - Improve
Documents.*.Filterspolicies-multiple
Movie- Add
policiesCheckboxdisplayed as grid or column- After
Row? - Bad UX, far away fromstate
- After
- Create
policyoption (will copy/pastedefault) - Edit
policylink
- Add
- Add
Listpage- Grouped movies by "policy"
- Same layout as
Homepage
- Add "groups"
- Feature
Review(fix manual)- Summary command result
record:From ${wished} wished πΏ movies, ${found} where recorded πΌ to ${sensorr.config.blackhole} ! * ${movie.title} (${movie.year}) with release ${release.generated} ${filtered} were filtered π« according to your policies * ${movie.title} (${movie.year}) * ${release} (${reason}) But ${missing} still missing π (with no releases found) * ${movie.title} (${movie.year}) You should look at these ${error} errors π¨ * ${movie.title} (${movie.year}) : ${err}
- Refactor
Logs- Left panel with
sessionlist with summary Records- Summary
- πΏ Wished
- πΌ Recorded
- π« Filtered (reviewable)
- π Missing (reviewable)
- π¨ Error (reviewable)
- Review
- Review each
record, one by one, autoscroll on validation
- Review each
- Record
- Allow to post an
issueonthcolin/oleoo- With data : { movie, records: records.map(record => record.meta ) }
- Allow to search for
releasesmanualy- Allow to search custom titles - like
The.92nd.Annual.Academy.Awards.2020.FRENCH.1080p.HDTV.H264-SH0W- out ofreleasesscope
- Allow to search custom titles - like
- Allow to ban
releases(like areleasewith hardcodedsubtitlesdownloaded that i don't want)
- Allow to post an
- Summary
PurgePairwiseHydrate
- Left panel with
- Summary command result
- Feature
performance- Rename
XZNABtoXYZNAB - On
Person.Stateunfollow, deletecalendarentities with onlythisas followed credits - Look at
shipjs oleoo- Refactor algorithm, split
titleandmetadatawithyear|language|resolution|source([0]/[1])
- Refactor algorithm, split
Server- Look at
WatermelonDB- Or only use remote
PouchDBserver withrxdb
- Or only use remote
- Fix RAM usage with
sessionsinio
- Look at
CLI- Use
cli-step - When
stalkstar,atomicUpsertit - Fix
recordcommand, filter movies with release date < +3 months (useless to search for movies still in production - make configurable) - Compile binary (reduce Docker image size by removing useless dependecies)
- Use
- Responsive design / mobile UI-UX
- Take
screenshotsinsmall,mediumandlargebreakpoints
- Take
- Rename
- Feature
Config- Refactor
configtosettingsusing mozilla/node-convict - Refactor with nrwl/nx
- Look at
Prismafor database
- Refactor
- Feature
1.0.0- π
- Fix
docz - Improve
README
- Feature
Notifications- Notify
recordssummary (email, sms, etc...)
- Notify
- Feature
UI/UX sugar- Translate (
fr,en) Discover- Add
statusincontrols- how ? - Add
Randombutton
- Add
Home- Add
HeadMovie? (see inspiration)
- Add
- Translate (
Related Skills
bluebubbles
341.8kUse when you need to send or manage iMessages via BlueBubbles (recommended iMessage integration). Calls go through the generic message tool with channel="bluebubbles".
slack
341.8kUse when you need to control Slack from OpenClaw via the slack tool, including reacting to messages or pinning/unpinning items in Slack channels or DMs.
frontend-design
84.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
Agent Development
84.6kThis skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
