Out of the ordinary shuffle

Shuffle is broke, but instead if complaining, here are my thoughts on a unique shuffle algorithm that follows the media, no matter what playlist it is in.

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.

Appreciate your thoughts; and you’d be surprised at how close what you’re suggesting is to how we handle a) artist and library radios and b) artist shuffle. You hit the key part which is view history and rating transcends where the media is being played from.

We haven’t yet experimented with enabling the “smarter” shuffle in other places, but it’s not a crazy idea, just like we recently brought it from radios over to artist shuffle.

1 Like

Thank you very much for your enjoyable insight, it allows me to feel more connected to Plex.
I would love to see your Plex Smart Shuffle in other areas.
Keep up the amazing work.

If anyone else feels the same, let us know by voicing your insights, ideas, and wants by replying.

Here is another thought to this shuffle. I hope you like it, and I would love to hear feedback.

I wanted to come up with a way to empower the user when it came to shuffling. Pushing away from the traditional throw a deck a cards in the air, and allow users to shake it up based on how Shakey they feel.

One thought was a…

“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.

Now this still would work with the user toggled choice to create a non-repeating list, still using a unique shuffle meathod, but not as cool as a repeating list.

Even when a media is played in a non-repeating list, it will still track RotationCount, in fact rotation count could be tracked any time the media file is played past a user set percentage.

2021 clean-up: duplicate (though much more technical/specific)