38 KiB
Vrobbler Project
- Overview
- Features
- Chores
- Backlog
[3/27]- Create small utility to clean up tracks scrobbled with wonky playback times
- Move to using more robust mopidy-webhooks pacakge form pypi
- User should be able to enable auto trail tracking via amail reader with Garmin LiveTrack URLs
- Allow users to see tasks on calendar view
- Come up with a possible flow using WebDAV and super-productivity for tasks
- Add importer class for IMAP imports
- Clean up follow up notifications for board games and beer that ask if you're still scrobbling
- Add AllTrails as a source for Trail data
- Add `garmin_activity_id` to the TrailMetadataLog class
- Explore a way to add metadata editing to scrobbles after saving
- Explore a good way to show notes and descriptions from scrobbles to users
- Add webdav syncing to retroarch imports
- Add CSV endpoint for book scrobbles that LibraryThing can ingest
- Add youtube link in place of IMDB on video detail page
- Fix PuzzleLogData has no attribute form
- Scrape ComicBookRoundUp ratings for comic book metadata
- Add PuzzleLogData class with with_people and completed
- Add classmethod for metadata fetching to tracks
- Tasks from org-mode should properly update notes and leave them out of the body
- Fix views for TV series where next episode is now None
- Fix koreader scrobble imports to use DST properly
- Allow scrobbling from the Food list page's start links
- Puzzles (and all longplays) should have a "Completed?" column on their detail page
- Fix raw text webpage title not truncating to 254 chars
- Version 27.0
[3/3] - Version 26.0
[3/3] - Version 25.0
[3/3] - Version 24.0
[2/2] - Version 23.0
[3/3] - Version 19.0
[1/1] - Version 18.7
[1/1] - Version 18.4
[2/2] - Version 18.3
[1/1] - Version 18
[4/4]- Condense tracks of the same title by the same artist with multiple albums
- Import from BG stats a "learning" log field when "Learning to play" is in the comment
- Add email importer for BG stats file uploads
- Fix task app to only use one tag for the context a task was done in and allow configurable contexts by user profile
- Version 17.0
[6/6] - Version 0.16.0
[19/19]- Jellyfin, bandcamp tracks from Mopidy create duplicate music tracks
- Add a user profile page with ability to change settings
- What to do with Youtube videos from LastFM and web-scrobbler
- Consider a purge command for duplicated and stuck in-progress scrobbles
- Add a "stop_timestamp" so we don't rely on content length
- Fix bug with Various Artist albums being labeled with first artist as album artist
- Fix bug with weekly aggregator being blank on Sundays
- Fix KoReader scrobbling to use pages rather than time of last read
- Add django-storage to store files on S3
- Fix vrobbler settings not using booleans
- Update weekly live chart to be 7-day continuous rather than weekly
- Implement a detail view for TV shows
- Implement a detail view for Movies
- Add "service provider" to TV Series, and use that for source when available
- Add view for long-play content (books, video games) to restart them
- Add live chart view like Maloja
- Figure out how to add to web-scrobbler
- Add Amazon scraper to look up books when OL fails
- Fix bug in Jellyfin scrobbles that spam more scrobbles after completion
- Version 0.11.4
[9/9]- Add rudimentary video game scrobbling
- Add ability to scrobble from KOReader statistics files
- Fix fetching artwork without release group
- Fix Jellyfin music scrobbling N+1 past 90 completion percent
- Add support for Audioscrobbler tab-separated file uploads
- Allow scrobbling music without MB IDs by grabbing them before scrobble
- When updating musicbrainz IDs, clear and run fetch artwrok
- Add ability to manually scrobble albums or tracks from MB
- Implement keeping track of week/month/year chart-toppers
Overview
Vrobbler began humbly enough as a way to use Jellyfin's webhook to keep track of the shows and movies I was watching. More specifically, I broke my ankle a few days after Christmas in 2022 and spent the next four months very slowly recovering after surgical repair. So once I had the webhook working, and scrobbling videos, it was only a matter of time till I expaned it to mopidy to replicate LastFM. Then I added board games, books via KoReader, sports events, podcasts … it just keeps going. Vrobbler is now a sort of Frankenstein's monster of scrobbling an entire life.
I am still unconvinced I can keep this going, but being able to scrobble org tasks, Todoist tasks, web pages I've read and trails I've hiked has turned out to be sometimes cathartic and sometimes functional as I try to remember when I did a thing.
Features
Beer
Triggers
Bookmarklet
Manual
Metadata sources
Untappd
Book
Triggers
Webdav via KoReader
Manual
Metadata sources
Google Books
This is the preferred method at this time. Also, the Book model implements a `find_or_create` classmethod which is an example of an interface we can use for other data models to get metadata in a way that provides easy testing, bulk fetching and simple saving.
OpenLibrary
ComicVine
Board Game
Triggers
IMAP import
Bookmarklet
Manual
Location
Triggers
GPSLogger (Android)
Metadata sources
User input
Music
Triggers
Last.FM
Rockbox files
Mopidy
Jellyfin
Metadata sources
Musicbrainz
Podcast
Triggers
Mopidy
Metadata sources
Google Podcasts
PodcastIndex
Sport
Triggers
Bookmarklet
Manual
Metadata sources
Thes Sports DB
Task
Triggers
Todoist
Org-mode
Metadata sources
User profile
Trails
Video
Triggers
Jellyfin
Bookmarklet
Manual
Metadata sources
IMDB
Youtube
Web Page
Triggers
Bookmarklet
Metadata sources
Scraper
Chores
DONE Document various vrobbler features chore personal project vrobbler documentation
CLOCK: [2025-07-09 Wed 09:55]–[2025-07-09 Wed 10:15] => 0:20
Backlog [3/27]
TODO [C] Create small utility to clean up tracks scrobbled with wonky playback times vrobbler personal bug music scrobbles
TODO [C] Move to using more robust mopidy-webhooks pacakge form pypi utility improvement
Example payloads from mopidy-webhooks
Podcast playback ended
{
"type": "event",
"event": "track_playback_ended",
"data": {
"tl_track": {
"__model__": "TlTrack",
"tlid": 13,
"track": {
"__model__": "Track",
"uri": "file:///var/lib/mopidy/media/podcasts/The%20Prince/2022-09-28-Wolf-warriors.mp3",
"name": "Wolf warriors",
"artists": [
{
"__model__": "Artist",
"name": "The Economist"
}
],
"album": {
"__model__": "Album",
"name": "The Prince",
"date": "2022"
},
"genre": "Blues",
"date": "2022",
"length": 2437778,
"bitrate": 127988
}
},
"time_position": 3290
}
}
Podcast playback state changes
{
"type": "event",
"event": "playback_state_changed",
"data": {
"old_state": "paused",
"new_state": "playing"
}
}
{
"type": "event",
"event": "playback_state_changed",
"data": {
"old_state": "stopped",
"new_state": "playing"
}
}
Podcast playback started
{
"type": "event",
"event": "track_playback_started",
"data": {
"tl_track": {
"__model__": "TlTrack",
"tlid": 13,
"track": {
"__model__": "Track",
"uri": "file:///var/lib/mopidy/media/podcasts/The%20Prince/2022-09-28-Wolf-warriors.mp3",
"name": "Wolf warriors",
"artists": [
{
"__model__": "Artist",
"name": "The Economist"
}
],
"album": {
"__model__": "Album",
"name": "The Prince",
"date": "2022"
},
"genre": "Blues",
"date": "2022",
"length": 2437778,
"bitrate": 127988
}
}
}
}
Podcast playback paused
{
"type": "status",
"data": {
"state": "paused",
"current_track": {
"__model__": "Track",
"uri": "file:///var/lib/mopidy/media/podcasts/The%20Prince/2022-09-28-Wolf-warriors.mp3",
"name": "Wolf warriors",
"artists": [
{
"__model__": "Artist",
"name": "The Economist"
}
],
"album": {
"__model__": "Album",
"name": "The Prince",
"date": "2022"
},
"genre": "Blues",
"date": "2022",
"length": 2437778,
"bitrate": 127988
},
"time_position": 2350
}
}
Track playback started
{
"type": "event",
"event": "track_playback_started",
"data": {
"tl_track": {
"__model__": "TlTrack",
"tlid": 14,
"track": {
"__model__": "Track",
"uri": "local:track:Various%20Artists%20-%202008%20-%20Twilight%20OST/01-muse-supermassive_black_hole.mp3",
"name": "Supermassive Black Hole",
"artists": [
{
"__model__": "Artist",
"uri": "local:artist:md5:250dd6551b66a58a6b4897aa697f200c",
"name": "Muse",
"musicbrainz_id": "9c9f1380-2516-4fc9-a3e6-f9f61941d090"
}
],
"album": {
"__model__": "Album",
"uri": "local:album:md5:455343d54cdd89cb5a3b5ad537ea99d0",
"name": "Twilight: Original Motion Picture Soundtrack",
"artists": [
{
"__model__": "Artist",
"uri": "local:artist:md5:54e4db2d5624f80b0cc290346e696756",
"name": "Various Artists",
"musicbrainz_id": "89ad4ac3-39f7-470e-963a-56509c546377"
}
],
"num_tracks": 12,
"num_discs": 1,
"date": "2008-11-04",
"musicbrainz_id": "b4889eaf-d9f4-434c-a68d-69227b12b6a4"
},
"composers": [
{
"__model__": "Artist",
"uri": "local:artist:md5:4d49cbca0b347e0a89047bb019d2779d",
"name": "Matt Bellamy"
}
],
"genre": "Rock",
"track_no": 1,
"disc_no": 1,
"date": "2008-11-04",
"length": 211121,
"musicbrainz_id": "ff1e3e1a-f6e8-4692-b426-355880383bb6",
"last_modified": 1672712949510
}
}
}
}
Track playback in progress
{
"type": "status",
"data": {
"state": "playing",
"current_track": {
"__model__": "Track",
"uri": "local:track:Various%20Artists%20-%202008%20-%20Twilight%20OST/01-muse-supermassive_black_hole.mp3",
"name": "Supermassive Black Hole",
"artists": [
{
"__model__": "Artist",
"uri": "local:artist:md5:250dd6551b66a58a6b4897aa697f200c",
"name": "Muse",
"musicbrainz_id": "9c9f1380-2516-4fc9-a3e6-f9f61941d090"
}
],
"album": {
"__model__": "Album",
"uri": "local:album:md5:455343d54cdd89cb5a3b5ad537ea99d0",
"name": "Twilight: Original Motion Picture Soundtrack",
"artists": [
{
"__model__": "Artist",
"uri": "local:artist:md5:54e4db2d5624f80b0cc290346e696756",
"name": "Various Artists",
"musicbrainz_id": "89ad4ac3-39f7-470e-963a-56509c546377"
}
],
"num_tracks": 12,
"num_discs": 1,
"date": "2008-11-04",
"musicbrainz_id": "b4889eaf-d9f4-434c-a68d-69227b12b6a4"
},
"composers": [
{
"__model__": "Artist",
"uri": "local:artist:md5:4d49cbca0b347e0a89047bb019d2779d",
"name": "Matt Bellamy"
}
],
"genre": "Rock",
"track_no": 1,
"disc_no": 1,
"date": "2008-11-04",
"length": 211121,
"musicbrainz_id": "ff1e3e1a-f6e8-4692-b426-355880383bb6",
"last_modified": 1672712949510
},
"time_position": 17031
}
}
Track event playback paused
{
"type": "event",
"event": "track_playback_paused",
"data": {
"tl_track": {
"__model__": "TlTrack",
"tlid": 14,
"track": {
"__model__": "Track",
"uri": "local:track:Various%20Artists%20-%202008%20-%20Twilight%20OST/01-muse-supermassive_black_hole.mp3",
"name": "Supermassive Black Hole",
"artists": [
{
"__model__": "Artist",
"uri": "local:artist:md5:250dd6551b66a58a6b4897aa697f200c",
"name": "Muse",
"musicbrainz_id": "9c9f1380-2516-4fc9-a3e6-f9f61941d090"
}
],
"album": {
"__model__": "Album",
"uri": "local:album:md5:455343d54cdd89cb5a3b5ad537ea99d0",
"name": "Twilight: Original Motion Picture Soundtrack",
"artists": [
{
"__model__": "Artist",
"uri": "local:artist:md5:54e4db2d5624f80b0cc290346e696756",
"name": "Various Artists",
"musicbrainz_id": "89ad4ac3-39f7-470e-963a-56509c546377"
}
],
"num_tracks": 12,
"num_discs": 1,
"date": "2008-11-04",
"musicbrainz_id": "b4889eaf-d9f4-434c-a68d-69227b12b6a4"
},
"composers": [
{
"__model__": "Artist",
"uri": "local:artist:md5:4d49cbca0b347e0a89047bb019d2779d",
"name": "Matt Bellamy"
}
],
"genre": "Rock",
"track_no": 1,
"disc_no": 1,
"date": "2008-11-04",
"length": 211121,
"musicbrainz_id": "ff1e3e1a-f6e8-4692-b426-355880383bb6",
"last_modified": 1672712949510
}
},
"time_position": 67578
}
}
TODO [C] User should be able to enable auto trail tracking via amail reader with Garmin LiveTrack URLs vrobbler trails project feature personal
TODO [C] Allow users to see tasks on calendar view vrobbler personal project templates feature
TODO [C] Come up with a possible flow using WebDAV and super-productivity for tasks personal feature project vrobbler tasks
TODO [B] Add importer class for IMAP imports vrobbler feature imap importers project personal
TODO [B] Clean up follow up notifications for board games and beer that ask if you're still scrobbling vrobbler personal project beers boardgames notifications feature
- Note taken on [2025-09-30 Tue 09:32] I added this feature in a very rough way, but now we should add "Action" headers so that we can either Finish or Cancel the associated scrobble: https://docs.ntfy.sh/publish/#send-http-request
TODO [B] Add AllTrails as a source for Trail data vrobbler trails feature personal project
Pretty clear, I would love to make trails more useful. Historically I wasn't hiking a lot, which made the source for this a bit silly. But it's clear that AllTrails is the best source, though having TrailForks is nice to.
TODO [B] Add `garmin_activity_id` to the TrailMetadataLog class vrobbler trails feature personal project
Would be nice to have some loose connection to the actual event in my Garmin profile.
TODO [B] Explore a way to add metadata editing to scrobbles after saving vrobbler spike scrobbling personal project
Could be as simple as a JSON form on the scrobble detail page (do I have have one of those yet?).
TODO [B] Explore a good way to show notes and descriptions from scrobbles to users personal project scrobbling vrobbler spike
TODO [B] Add webdav syncing to retroarch imports vrobbler videogames webdav feature project personal
TODO [B] Add CSV endpoint for book scrobbles that LibraryThing can ingest personal project books feature export
TODO [B] Add youtube link in place of IMDB on video detail page vrobbler feature videos personal project
TODO [B] Fix PuzzleLogData has no attribute form vrobbler puzzles personal project logdata
TODO [B] Scrape ComicBookRoundUp ratings for comic book metadata vrobbler books feature comicbook personal project
- Note taken on [2025-09-25 Thu 10:51] As an example https://comicbookroundup.com/comic-books/reviews/humanoids-publishing/the-history-of-science-fiction
TODO [B] Add PuzzleLogData class with with_people and completed vrobbler feature puzzles logdata personal project
TODO [A] Add classmethod for metadata fetching to tracks vrobbler feature music personal project
TODO [A] Tasks from org-mode should properly update notes and leave them out of the body vrobbler bug tasks
TODO [A] Fix views for TV series where next episode is now None vrobbler bug personal videos
ERROR django.request:241 log_response Internal Server Error: /series/c24100d1-da45-4abe-86bf-27cfce9b1f89/
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/django/views/generic/base.py", line 104, in view
return self.dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/django/contrib/auth/mixins.py", line 73, in dispatch
return super().dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/django/views/generic/base.py", line 143, in dispatch
return handler(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/django/views/generic/detail.py", line 109, in get
context = self.get_context_data(object=self.object)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/vrobbler/apps/videos/views.py", line 33, in get_context_data
context_data["next_episode_id"] = "tt" + next_episode_id
~~~~~^~~~~~~~~~~~~~~~~
TypeError: can only concatenate str (not "NoneType") to str
TODO [A] Fix koreader scrobble imports to use DST properly vrobbler personal bug books imports
- Note taken on [2025-09-25 Thu 10:37] \\ This may already be fixed … need to check.
- Note taken on [2025-02-25 12:34] \\ The page data has the canonical date something was read in it, but it seems to be an hour off. I traced this back to being off during DST, so we just need the importer to be aware of whether a user is using DST or not and roll back an hour for part of the year. Also, we'd need to adjust any old scrobbles that took place with DST off to roll them back by an hour.
TODO [A] Allow scrobbling from the Food list page's start links vrobbler bug food scrobbling personal project
TODO [A] Puzzles (and all longplays) should have a "Completed?" column on their detail page vrobbler bug puzzles personal project
TODO [A] Fix raw text webpage title not truncating to 254 chars vrobbler personal bug webpages
- Note taken on [2025-09-30 Tue 09:33] This may have already been resolved … need to just confirm it.
Version 27.0 [3/3]
DONE [A] Fix bug where podcast scrobbling creates duplicate Podcast project vrobbler scrobbling podcasts bug personal
Rather than pick up an existing Podcast using the podcast title in the mopidy file name, Vrobbler creates a new podcast with no enriched data. Not a big deal for my use as the volume of podcasts I listen to makes manual fixes easy. But it's annoying.
DONE [A] Allow reading comic books from readcomicsoline.ru vrobbler books feature comicbook personal project scrobbling
- Note taken on [2025-09-25 Thu 10:52] Things to consider are whether we scrobble the issue on one page, send it to archivebox? (yes), and how best to enrich the data
DONE [A] Add RSS feed lookups to podcasts vrobbler personal feature podcasts
- Note taken on [2025-10-14 Tue 10:08] Turns out the Podcast plugin for mopidy does a pretty good job of showing the latest file without having to scroll the bottom using only Muse to not parse the podcast title name. BUT, now we're getting urls like this: https://nsf.libsyn.com/rss#77e01251-cb20-4609-b577-d48e985d2e7b This is great, because there's more context there, but it has to read out of the RSS feed. We should add a check in the podcast util to sniff out the file referenced in the # in that url and populate the info from there. This should actually be much more reliable than the current state of the podcast lookup which depends on the file to be name properly.
Version 26.0 [3/3]
DONE Clean up templates for scrobble details vrobbler personal bug templates
DONE Add named locations visited to dashboard vrobbler personal feature locations templates
DONE Add moods to dashboard vrobbler moods feature templates personal
Version 25.0 [3/3]
DONE Add basic food templates and fix urls food vrobbler personal project bug urls
DONE [C] Fix how elapsed time is calculated vrobbler personal project scrobbles bug
DONE Fix templates for videos and dashboard links personal feature project vrobbler templates
Version 24.0 [2/2]
DONE Clean up logdata for various media personal feature project vrobbler logdata
DONE Removed sidebar and add links to headers personal feature templates scrobbles
Version 23.0 [3/3]
DONE Add dynamic forms for LogData classes personal feature vrobbler project forms logdata
DONE Look in comments for a timestamp for start from BG stats if the time is missing vrobbler feature boardgames project personal
DONE Fix long play scrobbles to provide better data vrobbler feature scrobbles longplay personal project
Version 19.0 [1/1]
DONE Add periodic check for mood vrobbler feature moods personal project
Version 18.7 [1/1]
DONE Use the timezone history log to fix old Scrobbles that fall into those timezone blocks vrobbler chore scrobbles project personal
Version 18.4 [2/2]
DONE Track timezone changes for profiles vrobbler feature profiles personal project
[2025-07-11 14:23]
DONE Only create a LastFM import if there are files to import vrobbler feature lastfm importers project personal
- Note taken on [2025-07-20 Sun 16:21] This thing is kicking my butt. As it stands it works, but the scrobbles are not assigned to the tracks properly.
Version 18.3 [1/1]
DONE Add timezone awarness to IMAP importer personal project vrobbler feature importer imap timezones
Version 18 [4/4]
DONE Condense tracks of the same title by the same artist with multiple albums vrobbler feature music project personal
DONE Import from BG stats a "learning" log field when "Learning to play" is in the comment vrobbler feature boardgames project personal
DONE [A] Add email importer for BG stats file uploads vrobbler feature boardgames personal project
{
"about": "This is a Play file that can be read by Board Game Stats. If you see this text, try to use a share, export or open-in function to open it with Board Game Stats.",
"players": [
{
"uuid": "31f8b92e-11d8-4162-88b1-fd9c79eea249",
"id": 2,
"name": "Colin",
"isAnonymous": false,
"modificationDate": "2025-07-01 18:10:32",
"metaData": "{\"isNpc\":0}"
},
{
"uuid": "00074700-cf4e-4ad3-b334-d35805bb0d90",
"id": 4,
"name": "Asa Sewell",
"isAnonymous": false,
"modificationDate": "2025-07-01 18:03:37"
}
],
"locations": [
{
"uuid": "14f7389c-767f-4725-9b35-906c407b293c",
"id": 3,
"name": "Timberwyck Farm",
"modificationDate": "2025-07-01 18:03:38"
}
],
"games": [
{
"uuid": "043a2851-f201-467a-a60c-0b0a7e9c33d2",
"id": 333,
"name": "Ghost Fightin' Treasure Hunters: Anniversary Edition",
"modificationDate": "2025-07-02 01:37:14",
"cooperative": true,
"highestWins": true,
"noPoints": false,
"usesTeams": false,
"urlThumb": "https://cf.geekdo-images.com/DHA-mcH3zzw_OjfDxOPj1A__thumb/img/UhaIm4KIDIiraUc44QIvSAbMUXI=/fit-in/200x150/filters:strip_icc()/pic8266874.jpg",
"urlImage": "https://cf.geekdo-images.com/DHA-mcH3zzw_OjfDxOPj1A__original/img/2-Lb6nLePhn0I0Hh2j1pOtbO4rg=/0x0/filters:format(jpeg)/pic8266874.jpg",
"bggName": "Ghost Fightin' Treasure Hunters: Anniversary Edition",
"bggYear": 2024,
"bggId": 422668,
"designers": "Brian Yu",
"isBaseGame": 1,
"isExpansion": 0,
"rating": 75,
"minPlayerCount": 2,
"maxPlayerCount": 5,
"minPlayTime": 30,
"maxPlayTime": 0,
"minAge": 8
}
],
"plays": [
{
"uuid": "bae3f29e-5e1e-45d8-b409-47a665c8d5b5",
"modificationDate": "2025-07-02 01:37:59",
"entryDate": "2025-07-02 01:31:38",
"playDate": "2025-07-02 01:31:38",
"usesTeams": false,
"durationMin": 23,
"ignored": false,
"manualWinner": true,
"rounds": 3,
"scoresheet": "{\"bggId\":244711,\"version\":1,\"langCode\":\"en\",\"scoreType\":\"bestTotalWins\",\"groups\":[{\"templateId\":\"1\",\"maxRepeat\":-1,\"repetition\":1,\"hasSubTotal\":false,\"hideSingleGroupLabel\":false,\"isExtra\":false,\"rows\":[{\"templateId\":\"vptrack\",\"label\":\"VP track\",\"repetition\":1,\"repeatable\":false,\"negative\":false,\"isExtra\":false,\"scores\":{}},{\"templateId\":\"objectives\",\"label\":\"Objectives\",\"repetition\":1,\"repeatable\":false,\"negative\":false,\"isExtra\":false,\"scores\":{}},{\"templateId\":\"mastercards\",\"label\":\"Master cards\",\"repetition\":1,\"repeatable\":false,\"negative\":false,\"isExtra\":false,\"scores\":{}}]}]}",
"locationRefId": 3,
"gameRefId": 333,
"board": "",
"scoringSetting": 4,
"metaData": "{\"playUsedGameCopy\":2}",
"playerScores": [
{
"score": "",
"winner": true,
"newPlayer": true,
"startPlayer": false,
"playerRefId": 4,
"role": "",
"rank": 0,
"seatOrder": 0,
"metaData": "{\"scoreUuid\":\"00074700-cf4e-4ad3-b334-d35805bb0d90\"}"
},
{
"score": "",
"winner": true,
"newPlayer": true,
"startPlayer": false,
"playerRefId": 2,
"role": "",
"rank": 0,
"seatOrder": 0,
"metaData": "{\"scoreUuid\":\"31f8b92e-11d8-4162-88b1-fd9c79eea249\"}"
}
],
"expansionPlays": []
}
],
"userInfo": {
"meRefId": 2
}
}
DONE [B] Fix task app to only use one tag for the context a task was done in and allow configurable contexts by user profile personal vrobbler feature tasks project
Version 17.0 [6/6]
DONE [A] Fix bug in new task label lookup for Emacs/Org-mode vrobbler bug tasks
DONE [C] Replace commas in the bandcamp URL for artists with nothing vrobbler music bug personal
- Note taken on [2025-06-16 Mon 09:36] This firt appeared with Black Country, New Road, where the RYM slug generator leaves commas in and ends up sending you to a 404. I suspect this wont be the first tweak we'll need to this, as the RYM link creator is really just guessing based on the artist name at the path.
DONE [A] Investigate new source of video metadata personal project video imdb
Cinemagoer broke and I probably should find a more reilable source of video data.
- Note taken on [2025-06-13 Fri 11:19] TMDB is much more reliable, but does require an API key. That's all setup now, so hopefully this breaking IMDB crap is over.
DONE [A] IMDB video lookups are failing personal bug video imdb
<2025-06-13 Fri>
- Note taken on [2025-06-13 Fri 08:24] Looks like Cinemagoer is broken: https://github.com/cinemagoer/cinemagoer/issues/537
DONE [A] Emacs is not syncing notes personal scrobbling emacs bug
<2025-06-12 Thu 9:30>
Not sure if the problem is in my Emacs hook sending or Vrobbler itself.
- Note taken on [2025-06-12 Thu 09:47] Adding a quick note to check on it
- Note taken on [2025-06-12 Thu 09:50] Ah ha. All the messing about with the source field meant that I was looking for `emacs` as a source but the hook was initially setting sources to `orgmode` I think I prefer `orgmode` as the source, so updating it thusly. Fixed in `490d60cbbb1f8bf90b5fc47d8685b15bdc1d485b`
DONE [A] Show the description of a task in the string rep for a scrobble of a Task personal project scrobbling vrobbler feature
Version 0.16.0 [19/19]
DONE [A] Jellyfin, bandcamp tracks from Mopidy create duplicate music tracks bug scrobbling music
Effectively, any track that comes in without a MusicBrainz ID does some funky lookup where it doesn't find a track without an MB id and the track title / artist combination and creates a new track every time. This has to be cleaned up by condensing the duplicated tracks into the original proper track.
But it opens a bigger question about how much MB id should the drive the app lookup. If it can't be depended on to exist from all sources, it really can't be canonical. Instead, the combination of track title / artist is really the best we can do. Last.fm also has this problem, where it doesn't know about albums and definitely does not know or care about MB ids.
DONE Add a user profile page with ability to change settings profiles improvement
- Note taken on [2025-04-04 Fri 10:51]
~/src/code.unbl.ink/secstate/vrobbler/ (magit-rev 93c16d8)
93c16d80ec
DONE What to do with Youtube videos from LastFM and web-scrobbler bug source lastfm
- Note taken on [2025-04-04 Fri 10:46] Nothing. Over the last few months I built out a youtube model in videos and use a bookmarklet scrobbling pattern. Now web-scrobbler is just disabled for Youtube. May want to revisit this at some point and only scrobble tracks from Youtube, because many people use YT for music listening.
DONE [C] Consider a purge command for duplicated and stuck in-progress scrobbles utililty improvement
CLOSED: [2023-04-06 Thu 14:09]
DONE Add a "stop_timestamp" so we don't rely on content length improvement scrobbling
CLOSED: [2023-04-02 Sun 23:58]
Essentially, we currently have the timestamp as when the content began scrobbling and then calculate the finish time from the length of the content. This works pretty well because we know how long most things are.
But in some cases, sports events or long podcasts, we may start mid-way through an event or finish halfway through but still want to mark it as done. In these cases, knowing the finish time could be useful, especially when interfacing with other scrobblers which may have different definitions of when a scrobble finishes or started.
DONE Fix bug with Various Artist albums being labeled with first artist as album artist scrobbling bug music
CLOSED: [2023-03-27 Mon 20:18]
CLOCK: [2023-03-26 Sun 22:01]–[2023-03-27 Mon 01:07] => 3:06
DONE Fix bug with weekly aggregator being blank on Sundays aggregators music bug
CLOSED: [2023-03-26 Sun 13:52]
DONE Fix KoReader scrobbling to use pages rather than time of last read scrobbling books improvement
CLOSED: [2023-03-26 Sun 13:51]
CLOCK: [2023-03-26 Sun 13:11]–[2023-03-26 Sun 13:51] => 0:40
DONE [A] Add django-storage to store files on S3 settings improvement
CLOSED: [2023-03-24 Fri 14:46]
CLOCK: [2023-03-24 Fri 10:47]–[2023-03-24 Fri 14:46] => 3:59 CLOCK: [2023-03-24 Fri 10:36]–[2023-03-24 Fri 10:40] => 0:04
DONE Fix vrobbler settings not using booleans settings bug
CLOSED: [2023-03-24 Fri 10:45]
CLOCK: [2023-03-24 Fri 10:40]–[2023-03-24 Fri 10:46] => 0:06
DONE Update weekly live chart to be 7-day continuous rather than weekly views bug
CLOSED: [2023-03-24 Fri 00:31] The live view will be blank every Monday, no reason to tie it to a day of the week. It should be "the last 7 days"
DONE [B] Implement a detail view for TV shows improvement views
CLOSED: [2023-03-22 Wed 17:05]
DONE [B] Implement a detail view for Movies improvement views
CLOSED: [2023-03-22 Wed 17:05]
DONE Add "service provider" to TV Series, and use that for source when available bug scrobbling
CLOSED: [2023-03-22 Wed 17:04]
DONE Add view for long-play content (books, video games) to restart them views improvement
CLOSED: [2023-03-22 Wed 17:01]
DONE Add live chart view like Maloja improvement views
CLOSED: [2023-03-07 Tue 11:13]
DONE [C] Figure out how to add to web-scrobbler improvement scrobbling
CLOSED: [2023-03-22 Wed 17:06]
An example: https://github.com/web-scrobbler/web-scrobbler/blob/master/src/core/background/scrobbler/maloja-scrobbler.js
This is actually going to be moot because we can import from LastFM, and web-scrobbler integrates well with LastFM. The only thing to think through here now is what to do with all the garbage web-scrobbler sometimes pushes to LastFM from Youtube (all videos get pushed, sigh).
DONE Add Amazon scraper to look up books when OL fails books improvement
This turned out to be a non-starter … Amazon is aggressive at disallowing scraping quality. And all the OSS tools out there are stuck in an arms race trying to keep them from breaking.
That said, Google Books actually has a decent API (for now), and I've built this out using that.
DONE Fix bug in Jellyfin scrobbles that spam more scrobbles after completion scrobbling videos bug
This was fixed a while ago, but there's a new manifested bug. Going to create a separate bug tracking ticket for that.
Version 0.11.4 [9/9]
DONE Add rudimentary video game scrobbling improvement content videogames
CLOSED: [2023-03-07 Tue 11:11]
DONE Add ability to scrobble from KOReader statistics files improvement books content
CLOSED: [2023-03-07 Tue 11:11]
DONE [A] Fix fetching artwork without release group bug
CLOSED: [2023-01-29 Sun 14:27]
When we get artwork from Musicbrianz, and it's not found, we should check for release groups as well. This will stop issues with missing artwork because of obscure MB release matches.
DONE [A] Fix Jellyfin music scrobbling N+1 past 90 completion percent bug
CLOSED: [2023-01-30 Mon 18:31]
CLOCK: [2023-01-30 Mon 18:00]–[2023-01-30 Mon 18:31] => 0:31
If we play music from Jellyfin and the track reaches 90% completion, the scrobbling goes crazy and starts creating new scrobbles with every update.
The cause is pretty simple, but the solution is hard. We want to mark a scrobble as complete for the following conditions:
- Play stopped and percent played beyond 90%
- Play completely finished
But if we keep listening beyond 90, we should basically ignore updates (or just update the existing scrobble)
DONE [A] Add support for Audioscrobbler tab-separated file uploads improvement
CLOSED: [2023-02-03 Fri 16:52]
An example of the format:
,
#AUDIOSCROBBLER/1.1
#TZ/UNKNOWN
#CLIENT/Rockbox sansaclipplus $Revision$
75 Dollar Bill I Was Real I Was Real 4 1015 S 1740494944 64ff5f53-d187-4512-827e-7606c69e66ff
75 Dollar Bill I Was Real I Was Real 4 1015 S 1740494990 64ff5f53-d187-4512-827e-7606c69e66ff
311 311 Down 1 173 S 1740495003 00476c23-fd9e-464b-9b27-a62d69f3d4f4
311 311 Down 1 173 L 1740495049 00476c23-fd9e-464b-9b27-a62d69f3d4f4
311 311 Down 1 173 L 1740495113 00476c23-fd9e-464b-9b27-a62d69f3d4f4
311 311 Random 2 187 S 1740495190 530c09f3-46fe-4d90-b11f-7b63bcb4b373
311 311 Random 2 187 L 1740495194 530c09f3-46fe-4d90-b11f-7b63bcb4b373
311 311 Jackolantern’s Weather 3 204 L 1740495382 cc3b2dec-5d99-47ea-8930-20bf258be4ea
311 311 All Mixed Up 4 182 L 1740495586 980a78b5-5bdd-4f50-9e3a-e13261e2817b
311 311 Hive 5 179 L 1740495768 18f6dc98-d3a2-4f81-b967-97359d14c68c
311 311 Guns (Are for Pussies) 6 137 L 1740495948 5e97ed9f-c8cc-4282-9cbe-f8e17aee5128
311 311 Misdirected Hostility 7 179 S 1740496085 61ff2c1a-fc9c-44c3-8da1-5e50a44245af
,
DONE [B] Allow scrobbling music without MB IDs by grabbing them before scrobble improvement
CLOSED: [2023-02-17 Fri 00:10]
This would allow a few nice flows. One, you'd be able to record the play of an entire album by just dropping the muscibrainz_id in. This could be helpful for offline listening. It would also mean bad metadata from mopidy would not break scrobbling.
DONE When updating musicbrainz IDs, clear and run fetch artwrok improvement
CLOSED: [2023-02-17 Fri 00:11]
DONE [A] Add ability to manually scrobble albums or tracks from MB improvement
CLOSED: [2023-03-07 Tue 11:09]
Given a UUID from musicbrainz, we should be able to scrobble an album or individual track.
DONE [C] Implement keeping track of week/month/year chart-toppers improvement
CLOSED: [2023-03-07 Tue 11:10]
CLOCK: [2023-01-30 Mon 16:30]–[2023-01-30 Mon 18:00] => 1:30
Maloja does this cool thing where artists and tracks get recorded as the top track of a given week, month or year. They get gold, silver or bronze stars for their place in the time period.
I could see this being implemented as a separate Chart table which gets populated at the end of a time period and has a start and end date that defines a period, along with a one, two, three instance.
Of course, it could also be a data model without a table, where it runs some fun calculations, stores it's values in Redis as a long-term lookup table and just has to re-populate when the server restarts.