Shuffle NOT Random

How bout we help come up with a good algorithm to help the developers on their path to fix this issue. Here is my thoughts:

I feel it should be a revolving modifier of 3 cycles.
Each time the media is played, it moves into the next cycle.
Each cycle it progresses through, it loses probability of being played again.
After the 3rd cycle, the media gains the original probability rate.

Every media’s probability rate is tracked individually, this way a shuffle one playlist carries over to another playlist. For example you shuffle in a SpongeBob Squarepants playlist, the likelihood of seeing the same episode too recently in your cartoon playlist would be low.

A media file will have metadata similar to the following: RotationCount - 1, 2, or 3 (3 being the original rotation)

Adding to probability, a user can choose to shuffle with a higher probability based on the media’s user/critic rating. Making more popular Songs/ TV Show Episodes/Movies more likely play.
This could be tracked by: RatingModifier - 0, 1, 2, 3, 4 (4 being the highest).
The RatingModifier can be toggled by user preference, which could be tracked by: RatingModifierStatus - True, False (Boolean)

The likelihood of a media file to play would be based on a score.
This score would be calculated by RotationCount, and RatingModifier.
A calculation would look like the following:
RotationCount = 3
RatingModifier = 2
RatingModifierStatus = True

if RatingModifierStatus = False
RatingModifier = 0

Probability = RotationCount + RatingModifier

In this scenario this media item would have a score of 5.
Each media item in the playlist is then built into a temporary list, duplicated x Probability.
So in the above example the media would appear 5x in the temp list.
This list is then shuffled.
Now the shuffle Que list is built off of the temporary list in order.
The list can be built with duplicates or without duplicates, base on the user’s preference. This could be tracked by: DuplicateStatus - True, False (Boolean)

Can anyone else think of a different approach, or another variable to consider to increase or decrease probability?

I really hope you really like my unique approach to shuffling a playlist, that can carry across every playlist.

2 Likes

that’s good, although even simpler it could simply mark played episodes with a 1, and once all episodes in that playlist have been played, reset all to 0. that way each shuffle will play new episodes until it’s exhausted and you start again.

playlist = episode1-99
set_playlist_order = playlist.shuffle();

once to create a random order of those 99 eps then

var episode = playlist[getnext];
// play episode 3, the first the array spits out;

play(episode) {
if (episode[‘played’] != 1){
playvideo();
episode[‘played’, ‘1’];
} else {
// get next ep (#2) from playlist array
episode = playlist[getnext];
}
}

better written than this of course, but it doesn’t need to be more complicated, it just needs to not repeat until every item has played

I do like this as a core straight Shuffle, and the other would be a user enabled Shuffle with 1 cycle replacement, that way it gives it another dimension of shuffle.

Ooo… I like that… “Plex Dimensional Shuffle”, where the user sets the amount of dimensions.

So, each dimension an item progresses through, the probability of it playing again diminishes until it has the “Dimensional Cap”, upon which it will reset to its original state.

If Plex sets a maximum a user can set, it would then become easy to track this scalable Dimensional Shuffle.

Let’s say Plex sets a user cap to 5 Dimensions, the user sets their Plex Dimensional Shuffle to 5, and a media item is in the 4th Dimension. The user then sets their Plex Dimensional Shuffle to 2.

In the metadata of the above said media file, it would have a Rotation Count of 3, to where RotationCount has the range of 0-4. Now, with an adjustable Dimensional Scale, you would just have to iterate the current RotationCount base off of the current users Dimensional Preferences.

2 Likes

yeh there seem to be so many ways of going at it better than literally just shuffling everything each time, especially when for some reason that shuffle every time seems to have a real taste for certain episodes numbers.

i’m here again today as a playlist of 800 eps has played SO MANY episodes today that have been played from it in the past week or so that i swear i’ve had skip about 50% of the time it’s started playing something.

I’ve actually set up emby in the meantime, and you know what, for a team of 2 they sure seemed to prioritise getting shuffle to work properly. I’m basically in the situation of having to use emby if i want to use shuffle (literally forgot today - muscle memory), and then using plex the rest of the time for its tighter UI, but given the fact we watch on random so much plex’s share of time used is dwindling.

For us it lines up with the missing link in cord cutting / home media server stuff. Yes, we want to watch our own stuff - our library is made of stuff we like BUT we also like the traditional thing of coming in and not having to think about what to watch, not spendig 15 mins looking through deciding - just channel surfing or shuffle. This is why i can’t wait for the day they start implementing something like pseduo TV live. It will be the ultimate solution then - channel surfing channels playing things we like at all times on all channels. i genuinely think that missing functionality is what stops a lot of people making the jump

I really like your mention of channel surfing. You are right, cord cutting does leave behind some desirable aesthetics, and I do agree the shuffle might be our replacement for channel surfing, which does demonstrate the importance of the shuffle.

Leaving Plex would not be good. Plex was and is the market leader, and has made paths for other home media software, which makes things easy for others to build off of. I know Plex will get there along with Google assistant integration.