2014-12-07, 02:19
To be absolutely clear, these widgets are very much to be considered a WIP, and a relatively early one at that. I'm hopeful that those skinners currently working on updates to their skin might consent to helping test their integration, and provide them as an optional extra to users that may be able to test them further, but they are currently a long way from being production-ready.
Currently, the widgets that Kodi provides are dumb. They provide random items, or simple recommendations based on the next available episode. But they don't actually take into account users habits, or similar media in the users library that they may be interested in playing instead. Smart(ish) widgets are an attempt to bring widgets more up to date: the idea is to try to recommend what media the user is most likely to want to play at any given time.
https://github.com/unfledged/service.smartish.widgets
They include a simple content-based recommendation system, with results being based on time. So, for example, if your Kodi box is used to play children tv shows after school, that is the content that is shown in the episodes widget at that time. If you watch action movies to relax on a weekend, the content of the movies widgets reflects this at that time.
The script contains four widgets - Movies, Episodes, Albums, PVR. They currently all use the Gotham list-filling method (though the nature of the widgets mean I am able, and intent to, add window properties - ala skin widgets - in the future). Usage is simple:
First of all, you need to set a skin boolean to indicate that your skin uses these widgets. Without this, the widgets won't update (though they will continue to save details of habits). For example, in home.xml:
Then set the content of the list you want the widgets to appear in:
The list properties returned are identical to that of service.library.data.provider, with the exception of the PVR widget. This can return 2 types of items within the one widget - channels and recorded content. Channels have the additional list item properties StartTime, EndTime, NextStartTime, NextEndTime, NextTitle, NextGenre, NextPlot. Recorded has ChannelName, StartTime, EndTime. The 'type' property is set to 'livechannel' or 'recorded' as appropriate.
Feedback is particularly welcomed on skin integration. If you decide to make these available to any beta-testing users, their feedback is welcomed on any major inaccuracies the widget returns (though these are 'learning' widgets, and take time to learn properly, so a week or twos usage is suggested before complaining )
They can also optionally get additional information on your movies and tv shows from the Movie DB to improve recommendations (has to be enabled in the scripts settings, and will majorly delay the next update of the relevant widgets whilst this information - 'keywords' and 'similar' - is retrieved.) I'm required to include the following text for using their api :
"This product uses the TMDb API but is not endorsed or certified by TMDb."
Thanks in advance for any and all feedback on this idea
Known Issues
* On startup, pretty much your entire video collection has to be scanned to find relevant results, so widgets will take some time to initially load. Updates of the widgets require a much smaller amount of your library to be scanned (and in future, will require even less)
* Generating the widgets takes processing power. Though I have been using these widgets on a Raspberry Pi for some time, some may not find the impact on performance of low-powered devices such as this acceptable
* The widgets use sockets to speed up the listing of widgets. There are situations where the script may fail to bind to the relevant socket. Restarting Kodi will normally fix this issue. A script error (a possibility at this stage of development!) will close the socket, stopping the widgets updating.
FAQ
A number of people have tried this script in various even-earlier incarnations - and my huge thanks to those who have tested, or even just given their early opinions on this idea - and a few questions have come up repeatedly:
* Can this script recommend media not in my library that I may enjoy: No, this script is designed to only display results from within your library.
* Can this script get additional recommendations from external sites like TMDb/Trakt/etc: The sorts of lists these sites provide (a list of titles) don't fit well with the type of recommendation system the script uses. Related from TMDb can be (optionally) got, but are weighted very low for this reason, and I won't be adding recommendations from other sites.
* Will this script be integrated with existing widgets (service.library.data.provider/service.skin.widgets): Possible, with the consent of BigNoid and Martijn, and only when the widgets are ready for public release + repo push. Due to the nature of the widgets (which are written from quite a different development perspective from the existing widget scripts), it will likely involve the relevant widget script being integrated with Smart(Ish) Widgets + this script being renamed, not these widgets being directly integrated into an existing script. And, as the script is designed to (eventually) return both Gotham-Style list-filling (ala library data provider) and window properties (ala skin widgets), would likely deprecate the script it was not integrated with
* When will these widgets be finished: Potentially never, it's quite possible that they can't return results relevant for a large enough percentage of users - in which case, they'll never be pushed to the repo. In most likelyhood, when I'm convinced that they are working well enough for a large enough percentage of users to be a useful script to be on the repo. (And all development issues are solved)
* What personal information is recorded/shared: Only information ABOUT the media you have watched (genre, actors, etc) is saved, not the specific item that you have watched. This information is only ever stored locally, and is never shared (though I may ask for a copy of the database when you complain about the results )
Currently, the widgets that Kodi provides are dumb. They provide random items, or simple recommendations based on the next available episode. But they don't actually take into account users habits, or similar media in the users library that they may be interested in playing instead. Smart(ish) widgets are an attempt to bring widgets more up to date: the idea is to try to recommend what media the user is most likely to want to play at any given time.
https://github.com/unfledged/service.smartish.widgets
They include a simple content-based recommendation system, with results being based on time. So, for example, if your Kodi box is used to play children tv shows after school, that is the content that is shown in the episodes widget at that time. If you watch action movies to relax on a weekend, the content of the movies widgets reflects this at that time.
The script contains four widgets - Movies, Episodes, Albums, PVR. They currently all use the Gotham list-filling method (though the nature of the widgets mean I am able, and intent to, add window properties - ala skin widgets - in the future). Usage is simple:
First of all, you need to set a skin boolean to indicate that your skin uses these widgets. Without this, the widgets won't update (though they will continue to save details of habits). For example, in home.xml:
Code:
<onload>Skin.SetBool(enable.smartish.widgets)</onload>
Then set the content of the list you want the widgets to appear in:
Code:
<content>plugin://service.smartish.widgets?type=movies&reload=$INFO[Window.Property(smartish.movies)]</content>
<content>plugin://service.smartish.widgets?type=episodes&reload=$INFO[Window.Property(smartish.episodes)]</content>
<content>plugin://service.smartish.widgets?type=albums&reload=$INFO[Window.Property(smartish.albums)]</content>
<content>plugin://service.smartish.widgets?type=pvr&reload=$INFO[Window.Property(smartish.pvr)]</content>
The list properties returned are identical to that of service.library.data.provider, with the exception of the PVR widget. This can return 2 types of items within the one widget - channels and recorded content. Channels have the additional list item properties StartTime, EndTime, NextStartTime, NextEndTime, NextTitle, NextGenre, NextPlot. Recorded has ChannelName, StartTime, EndTime. The 'type' property is set to 'livechannel' or 'recorded' as appropriate.
Feedback is particularly welcomed on skin integration. If you decide to make these available to any beta-testing users, their feedback is welcomed on any major inaccuracies the widget returns (though these are 'learning' widgets, and take time to learn properly, so a week or twos usage is suggested before complaining )
They can also optionally get additional information on your movies and tv shows from the Movie DB to improve recommendations (has to be enabled in the scripts settings, and will majorly delay the next update of the relevant widgets whilst this information - 'keywords' and 'similar' - is retrieved.) I'm required to include the following text for using their api :
"This product uses the TMDb API but is not endorsed or certified by TMDb."
Thanks in advance for any and all feedback on this idea
Known Issues
* On startup, pretty much your entire video collection has to be scanned to find relevant results, so widgets will take some time to initially load. Updates of the widgets require a much smaller amount of your library to be scanned (and in future, will require even less)
* Generating the widgets takes processing power. Though I have been using these widgets on a Raspberry Pi for some time, some may not find the impact on performance of low-powered devices such as this acceptable
* The widgets use sockets to speed up the listing of widgets. There are situations where the script may fail to bind to the relevant socket. Restarting Kodi will normally fix this issue. A script error (a possibility at this stage of development!) will close the socket, stopping the widgets updating.
FAQ
A number of people have tried this script in various even-earlier incarnations - and my huge thanks to those who have tested, or even just given their early opinions on this idea - and a few questions have come up repeatedly:
* Can this script recommend media not in my library that I may enjoy: No, this script is designed to only display results from within your library.
* Can this script get additional recommendations from external sites like TMDb/Trakt/etc: The sorts of lists these sites provide (a list of titles) don't fit well with the type of recommendation system the script uses. Related from TMDb can be (optionally) got, but are weighted very low for this reason, and I won't be adding recommendations from other sites.
* Will this script be integrated with existing widgets (service.library.data.provider/service.skin.widgets): Possible, with the consent of BigNoid and Martijn, and only when the widgets are ready for public release + repo push. Due to the nature of the widgets (which are written from quite a different development perspective from the existing widget scripts), it will likely involve the relevant widget script being integrated with Smart(Ish) Widgets + this script being renamed, not these widgets being directly integrated into an existing script. And, as the script is designed to (eventually) return both Gotham-Style list-filling (ala library data provider) and window properties (ala skin widgets), would likely deprecate the script it was not integrated with
* When will these widgets be finished: Potentially never, it's quite possible that they can't return results relevant for a large enough percentage of users - in which case, they'll never be pushed to the repo. In most likelyhood, when I'm convinced that they are working well enough for a large enough percentage of users to be a useful script to be on the repo. (And all development issues are solved)
* What personal information is recorded/shared: Only information ABOUT the media you have watched (genre, actors, etc) is saved, not the specific item that you have watched. This information is only ever stored locally, and is never shared (though I may ask for a copy of the database when you complain about the results )