Random Video Player v1.53 (Can sync with MFP and ScriptPlayer)

New release v1.44!

New features:

  • Customize button order in addition to visibility
  • Source selector to switch conveniently between list and folder playback

UI tweaks:

  • Improved progress label readability
  • Fixed Button misalignment in ListBrowser causing my brain to hurt
  • Minimum player size now dynamically changes with the amount of active buttons for more flexibility
  • Added some missing tooltips
  • MB4 to go back one folder in Folder/Listbrowser for easier and more intuitive navigation

Bug fixes:

  • Mouseclick to pause not working in fullscreen
  • ā€˜Add Queueā€™ not triggering under some conditions
  • Loopback causing playback to pause when trying to play from list/folder after a dropped file was played

Optimization:

  • Reduced startup time (I hope this helps some)

Note: If updating from the previous version, simply choose the update only package and replace the old files with those!

Additional infos:

Customize button order:

Next to the ability to toggle buttons on and off based on your needs, you can now also rearrange them however you want:

Toggle to switch between folder and list playback anytime

As requested, Iā€™ve added back the functionality to simply switch between list and folder playback. Though Iā€™ve created a new UI element that doesnā€™t conflict with the rest of RVP:

2 Likes

Just a heads up, I downloaded the newest version and think it changed my list folder to yours.

Also, there was a list already in there with a few videos that I donā€™t have, I assume those are yours as well.

1 Like

Yeah :sweat_smile: I noticed I forgot to delete the config after testing the release version. You can simply delete it to restore.

Iā€™ve already updated the zip on github .

Thanks for letting me know! <3

2 Likes

New release v1.45!

New features:

  • ListBrowsers list now has the ability to receive files dragged onto it, either directly from the listbrowsers directory view (left side) or directly from windows explorer
  • Drag & Drop allows folders to be dropped onto RVP
    Note: Additional setting for behaviour whether subdirectories should be included when dropping folders (default true)
  • Implemented MPC like video controls:
    - Zoom in and out ( numpad 9 and 1)

    - Pan video left,right,up,down (ctrl + numpad 4, 6, 8, 2)

    - Scale video width and height (numpad 4, 6, 8, 2)

    - Rotate video 90ccw, 180, 90cw (alt + numpad 1, 2, 3)

    - Video fit to height(default) or width (numpad 1,3) : Ultrawide users put your hands up

    - Reset to default (numpad 5)

    Note: Shortcuts are customizable of course
  • Implemented changable playback speed (Increase: ctrl + up | decrease: ctrl + down | reset: ctrl + R)
    Note: Will only apply to current video and reset to default when changing

UI tweaks:

  • Slightly increased button size in listbrowser to optimize button description
  • If started by mediafile, RVP will now ask if it should load the fileā€™s current directory or include all subdirectories for playback
  • Added settings to change this behaviour on external loadup
  • A buttons height in settings:interface was actually 1 pixel less than the others
  • Many small adjustments here and there

Bug fixes:

  • Buttons in fullscreen overlapping due to improper resizing
  • Auto hide cursor from exclusive fullscreen still active when using shortcut back to normal while cursor is set to hide
  • New source selector not loading correctly from folderpath on first startup when toggled
  • Weird playback behaviour when player ist set to loop == false while playing a dropped file
  • With loop == false, after playing dropped file, automatic playback of next file broke due to crossthread exception caused by drag&drop (I hate those)
  • Some bad ui interactivity when trying to load non valid folders (as in no valid files to play)
  • During Playback, when file from playlist was not found index is not corrected / also removes playlist entry now
  • Hotkey manager would not be able to use new hotkeys automatically when user already changed hotkeys
  • Issue where rvp wouldnā€™t always look in the application directory for ā€˜hotkeys.jsonā€™ thus causing an error
  • Changed fallback path and hardened path checking to prevent unnecessary exceptions due to non available paths

Optimization:

  • Further enhanced error handling of Mpv.NET.dll to potenially find potential errors more easily
  • Updated player seek values on scroll wheel action
  • Added a global Error handler to write useful error data to ā€˜Error.logā€™ to find issues quicker if they occur
  • Note: Filepaths may or may not be inside those logs so make sure to check before sharing them
  • Additional small performance enhancements by reducing code execution
  • Script graph default to off as it costs some performance

Additional Notes:

If updating from the later versions, simply use ā€œRVP-v1.45_UpdateOnlyā€ and replace your old files with the new. Make sure to also replace Mpv.NET.dll as I modified it quiet a bit.

1 Like

Is there any other way to use this with a different application other than MFP? I have a handy, and it doesnā€™t seem to like it.

1 Like

Hey! Currently only MFP is able to read data from RVP as I tailored the variables to its request list.

Technically it can sync to ScriptPlayer by FredTungsten too, though at the moment, RVP doesnā€™t share some values it requests. I will happily implement them in the next update, absolutely no problem!

Other than that, I donā€™t know if there are other Sync tools. If you can name me some specific ones youā€™re using, let me know and I will see what I can do! <3

Itā€™d be great if you could implement ScriptPlayer as that is actually what I use!

1 Like

New release v1.46!

New features:

  • Updater implemented, RVP can now update itself for easier usability
  • Can now also sync with ScriptPlayer by Fred Tungsten

UI tweaks:

  • Small stuff here and there

Bug fixes:

  • Exception when trying to delete/move a file after playlist is emptied
  • Task scheduler not emptied when file move/copy threw an error

Optimization:

  • Better conditions for file moving/copying functions

Additional Notes:

After some testing, Iā€™ve decided to push the new updater into this release. RVP can now update itself, which makes the process of using the latest version much more straightforward.

Access it in the About tab (Below for testing purposes, 1.45 cannot update itself):

2 Likes

New Design, ALOT Bugfixes, ScriptPlayer support and Self Updating!
We came Along way! :fire:

1 Like

Thanks <3 Ya, truly a journey, where I learned a lot so far. Iā€™m no expert in c# at all, but with a goal a lot is achievable.

I mean, it started with the idea, that I really wanted a simpel player that allowed me to mindlessly jump into a collection and play anything from it and to my surprise, while of course doable with all the common media players, theyā€™re obviously not tailored to it and always require going the extra mile which I found to be unnecessarily bothersom.

So I started with this:

A simple gui that executed MPC-BE and gave it a file to play, while handling the file logic by itself.

Then I found hudec117s MPV wrapper and started working on a complete package, that can act on itā€™s own.

Thus, many new features were implemented along the way and I was certain, that there are at least some users out there that would enjoy using it too.
So I shared the thing and I got a lot of invaluable good ideas and feedback from users back, which I wouldnā€™t think of by myself. My code is not clean at all, some might say spaghetti :smiley: but it works pretty well imo. When I find the time, I will improve it based on my gained knowledge so far.

Thanks again <3

1 Like

Awesome! Truly a journey from a simple GUI to something so fuckn awesome.
Canā€™t wait! :skull::metal::metal::metal:

New release v1.47!

Bug fixes:

  • Exclusive fullscreen not detecting the current screen boundaries

This a potential bug, that can cause exclusive fullscreen to not work properly when using a multi monitor setup with different resolutions.

Note:
If using v1.46 or later, head to settings=>about and update from there.

1 Like

Awesome player you got here! I got some questions Iā€™d like to ask:

1 - When loading an image, it seems to play indefinitely. Are there plans to have a custom timer and perhaps a randomized option where a user can indicate a time frame for this timer to use that randomizes on very image?

2 - Are there plans to have a custom timer for videos as well?

3 - Are there plans to be able to load audio that plays separately and has its own playlist to randomize?

Thanks and keep up the good work!

1 Like

Hey, glad you like it!

1 & 2 - That is a great idea! I will definitely work on implementing that!

3 - Iā€™m not certain if I understand correctly. You mean like being able to play random audio files at all? Or like, play audio files next to something else in parallel? The first should be managable. For the latter Iā€™m not sure about the usecase, would have to think if itā€™s implementable in a way I like.

Thank you a lot for the feedback <3

1 Like

For #3, I did mean the latter but the former can also work as another option other than a shuffle. In terms of the latter idea, I realize the more complex part is figuring out what to do at the end of the song with the video or image. Is there a simple way to ā€œfade to blackā€ without needing to render? I suppose the next song could need a ā€œfade from blackā€ so itā€™s not too jarring.

Btw, hereā€™s some more ideas I just thought of:

4 - A bpm or beat detector to find the beats in a song and dictate the duration of the timer function and maybe even selecting a random funscript playlist that fits the detected bpm. One simple way I can see the file selector happening is if the matching bpm number is either in the filename or file metadata. However, I can also see this as an inconvenience for the user if their collection is really large so I donā€™t know how many people would actually do this.

5a - Faphero mode: Each stage have their own playlists (video, audio and funscript) for the player to randomly select. The user, of course, having the choice for how many stages they want (or a random range but the user would have to provide playlists for the max number of stages) and optional intermissions and/or randomized intermissions. Iā€™m not familiar if you can easily generate text on screen or a image overlay (to label stages and intermissions and whatever else people come up with) so if thatā€™s not possible, then the user will have to provide either their own image or title video to play before the stage or intermission starts. Intermissions is like another stage but meant to be shorter with its own option for a random timer for intermission duration not dictated by an audio file and the randomized intermissions I meant the intermissions would either play or go directly to the next stage.

5b - Stages within stages or subcategories: 5a I imagine a more simple set up of one randomly chosen song playing with one random video playlist and one funscript per stage. 5b would expand the number of video playlists per stage so it plays more like a normal pmv. The reason I divided this idea because I understand 5b to be more work and more complex. Timing wise, I imagine a simple division of equal playing time by the number of chosen subcategories to play per stage using the duration of the chosen song to divide the time by. For the user, I also imagine more up front work to create all these playlists for every stage and setting up all these options in the player but possibly the next best thing for users than to actually create a pmv/faphero videos by hand.

6 - 2nd audio layer or JOI mode?: This is meant for random moans, commands/JOI, sound effects and maybe even some dirty talk. This one I imagine to play once every 30 seconds or minutes and with audio clips under 10 seconds or so.

7 - Ken Burns effect on images so thereā€™s an option to not have static images. Even a simple and small zoom in and/or zoom out would suffice. This idea may be limited by coding so I understand if this is not possible.

Iā€™m imagining RVP to be the lazy ā€œall in oneā€ randomly generated pmv player where one can set up all these video, audio and funscript playlists beforehand and just hit play when its time to play. I suppose this sounds similar to the ā€œauto pmv generatorā€ app but the difference is yours is all offline/local with lots of options for replayability and thereā€™s no ai component other than the simple random and timer functions unless you foresee ai usage in the future.

I donā€™t know how far youā€™re willing to go or how limited the coding or functions are to achieve some of these things so Iā€™m just spitballing here to see what other users may like to see down the line or maybe even spark an inspiration for others down the line. Apologies if some of these ideas have already been mentioned elsewhere or is becoming out of the scope of RVP. Thanks for your consideration and time! =)

1 Like

Hey, thanks again for the write up <3 I guess a problem is, Iā€™m not really familiar with those FapHero type of videos. Really only got a small glimpse when I made some edits to the automated funscript generator for someone here recently. So Itā€™s totally possible, that Iā€™m not directly getting the meaning of the terminologies :hot_face:

3 - Audio in parallel:

  • Have a list with only audio files/files for audio
  • Play random videos/images like now but with the ā€œAudio listā€ playing next to it
  • When a ā€œsongā€ ends as in, it switches to the next list entry, also switch to next video/audio?
  • If possible, with some effect between video switches?

4 - Funscript to bpm match:

  • If I understand correctly, itā€™s more for the scenario in ā€œ3ā€
  • Searching for funscripts with a matching ā€œbpmā€ to the song playing?
  • Difficult I think. I would have to calculate both but since itā€™s usually not a monotone thing I would have to calculate an avg value and tolerate some sort of missmatch
  • Though not familiar with this and detecting such info is not a straightforward thing, I do wonder what funscripts this would be supposed to work with? Like random generated ones?
    (I think there are simple random generators with a BPM setting?)
  • PLUS: I canā€™t tell MFP/ScriptPlayer to load another funscript. They search for the script by their own depending on the filename. They receive playstates which RVP shares with them. (Might be still doable by spoofing videonames)

5a - Random matching:

  • Like choosing Videolists, an Audiolist and a list of funscripts
  • Play random from first Videolist next to random from Audiolist and use a random funscript (Stage 1?)
  • After audio or a timer finishes, optionally play an intermission scene? And then switch to next Videolist, next Audio and next funscript?

6 - Insert random sounds:

  • Basically select a list of sounds and play them randomly every selected timeintervall?

7- More interesting image viewing

  • Sounds like a cool and implementable idea as I recently added some of that functionality to the MPV wrapper for manual control, so I guess it would be doable to automate that process

So as of right now:

1, 2 and 7 Is noted and Iā€™m definitely considering implementing that!

3 - If I understood correctly - as with my little description - it should be possible but I have to think how I can implement in a good way

4 - Needs a bit more clarification and the task is not trivial. I would have to include more libraries to calculate audio data. I need to do some research on that topic and then decide if itā€™s a viable option

5 - Sounds pretty complicated overall and more like a dedicated application just for that. I might take a closer look in that direction but really I think itā€™s not viable for me to do. For research purposes I looked up some ā€œPMVsā€ and they look like thoughful crafted experiences, I donā€™t know whether that can be randomized in a way that works well enough - in real time.

6 - If my assumptions are correct, should be doable

So ya 4 & 5 needs further considerations long term.

1,3,4, 6 & 7 Is on my list.

I really appretiate your write up! Itā€™s great to gather new ideas and challenges and you got a lot going on :smiley:

If you like - and use it - you can add me on discord, same name as here. If I decide to work on some of the more complicated stuff, it would be great if Iā€™d be able to simply trade some thoughts with someone who seems to know their stuff :slight_smile:

No worries, Iā€™ll explain a bit more. Apologies for the incoming massive text and if I missed out explaining something.

3 - Audio in parallel:

You got the jist of it. I would say this idea is the prerequisite to 4 & 5.

Youā€™ll likely have to modify the way you save your playlists so thereā€™s a distinction between what is an audio playlist and what is a video playlist. If users intentionally provide a video file in an audio playlist, then the video should be bypassed and let the audio play. Likewise, if this feature is enabled, the embedded audio in the video files in the video playlist should be bypassed/muted. On top of that, you can also have a ā€œmaster playlistā€ that points to individual video and audio (and funscript?) playlists to randomize. The master playlist is one file the user chooses to load and then RVP randomly chooses everything from there.

I suppose at the end of each song the user would have to choose between maintaining the same lists for everything (meaning providing one playlist per video or audio and having the RVP work through those lists), jumping into multiple playlists or having that choice randomized.

Interface wise, you may need to provide another window, menu or a sidebar thatā€™s dedicated to the audio and the audio playlists. Or another way to go about this is having a ā€œbuildā€ mode where the main window is divided to a video section and an audio section and possibly a master directory browsing window for users to select their files. The respective video/audio sections would display the currently loaded playlist so users can drag and drop files to the intended sections as well as delete, save, load, re-order lists etc. The funscript and master playlist should have their own window/page.

Here is a quick example of the build interface and hopefully is self explanatory:

build mode

4 - Funscript to bpm match:

Oh, unless if thereā€™s a way to get the funscripts loaded (and selected), that part of this idea may be dead for now. Originally, I was thinking any matching bpm of a song to match the funscripts but thinking about it now, it would be better if thereā€™s funscripts already premade with the matching song title and any other variations with the same song. This would no longer need the bpm to match the funscript but would greatly lessen the selection unless the user provides for them. Sure, an automated funscript generator could be used, but to me that is not part of the core RVP scope since thatā€™s creation phase rather than a player phase.

So moving onto the bpm matching the audio, I donā€™t mean for this to constantly run and sync. I meant it on a more rudimentary level of getting the overall bpm of a song and adjust the automated video/image timer to match. I suppose weā€™ll need one timecode reference on the song to properly sync the automated timer. If there is no way of automating this, maybe the user can supplement this info manually? Would saving this info need another ā€œplaylistā€ or can this info be tagged along with the filename that is saved on the audio playlist? Maybe the audio playlist would need to be in csv format for users to easily edit these numbers in a spreadsheet app?

By no means this is going to be perfect match/sync especially with music with varying bpm.

Without this bpm number, Iā€™m not sure how else the automated timer function would work. It would fallback to manually inputted info, which now thinking about it, maybe this info too would need to be saved somewhere.

5 - Random matching (per stage):

You got the jist of this too. I will omit the funscripts when explaining this idea further. Every stage will only have one music selected and that will determine the duration of the stage. The video portion, however, will keep randomizing/cycling through this stageā€™s playlist until the duration of the stage is reached. When the stage is over, you move on the next set regardless if itā€™s an intermission or another stage. Once all stages are complete, I suppose you have the user determine if they want to automatically repeat or just stop or maybe have a never ending ā€œendā€ stage?

To further clarify, Iā€™ll break down the menu pages for these stages that I currently am thinking of.

Simple mode (5a):

Initial menu page -

Number of stages: [number]
Random length of stages: [Min number] - [Max number] (leave blank to bypass?)
Intermissions: [Yes, No, Random] (Yes and Random enables another section to select playlists)
Automated timer: [Yes, No] (Yes is dependent upon bpm detector)
Enable Universal timer per stage: [Yes, No] (Answering both no to this and the automated timer would trigger a pop up to warn that all stages need metadata attached to the audio playlist or elsewhere to pull this number or have a default number used. If the default number is used, obviously the timer will not be synced to the music.)
Random sounds: [Yes, No] (Yes enables another section to choose the playlists and the timer)

The repeating pages per stages:

Stage playlist page -

Have a similar page to the build mode interface. All playlists chosen on this page affects this stage only. Loading master playlists would either add or replace the items on this page.

Page 2 (if needed) -

Universal timer for this stage: [Time] (or zero to bypass?)
Random sound interval: [Number] per [ā€œSecondā€, ā€œMinute(s)ā€]
Manual duration of intermission: [Time] (or zero to bypass and RVP will randomly select one video out of the provided playlist to play and once that video finishes, proceed to the next stage)
Range duration of intermission: [Min Time] - [Max Time] (or zero to bypass. Maybe need a automated check to either have this or the ā€œManual duration of intermissionā€ has the only one active.)

Random sound page (if needed) -

Have a similar page to the build mode interface but for just an audio playlist.

Intermission page (if needed) -

Have a similar page to the build mode interface. Loading master playlists would either add or replace the items on this page. You could reuse the ā€œstage playlist pageā€ and just relabel this page accordingly.

ā€” Then repeat from the stage playlist page until completion of all stages. ā€”

Advanced mode (5b additions):

Add this to ā€œPage 2ā€ of the stage configuration pages -

Range of sections within stages: [Min number] - [Max number] (At first, I thought this would be automated, but now I think it should be user defined. Random select the range per stage and divide by the total length of selected song to get the length per section.)

Then for every section per stage have a similar page to the build mode interface.

The very last page of either simple or advance mode is saving all these settings so the user can load this later.


After fleshing this out, 5a is the bulk of the work and 5b you can consider a finetune. Of course this is no substitute for an actual edited pieces of things like faphero videos or pmv but you can think of this as a ā€œpoor manā€™sā€ solution or a ā€œquick and dirtyā€ solution. Thinking upon this further, 5a can have some general sfw uses. One example is a memoir with each stage as a chapter of oneā€™s life.

Yes, is this complex and time consuming with possibly lots of coding so if youā€™re still on the fence about pursuing this, I would ask your userbase if this idea is appealing to them and would use it even if it may mean some up front work on their end to get this set up properly.

6 - Insert random sounds:

You got it. Although, I donā€™t know if there should be an option for priority volume. I mean, when these sounds play, the music volume lessens a bit and then restores to original volume once the sound is done playing.

7 - More interesting image viewing:

Glad to hear such functions exists. In terms of the zoom in and zoom out automated idea, I was thinking of the basic 10% from 100% to 110% zoom in, for example. Timing wise, dictated by the duration of a timer. Pans would be the same except it would need to be zoomed in to avoid the black borders in cases of landscape aspect images. I wouldnā€™t know what to do with vertical aspect images.


I appreciate your openness and considerations to improve RVP. Thanks again! :smiley:

Iā€™ll add you on discord. I may sound like I know what Iā€™m talking about, but Iā€™m a novice to the coding world as well. Iā€™ve barely played around with python and spent most of my time messing around in Arma 3 scripting. I have never ventured out into creating apps so kudos to you in that regard. :smiley:

1 Like

@Peanutccino Is it possible to add a Filter to Filter out Videos that have no Funscript?

1 Like

It certainly would be possible, but the better approach imo is to just sort your archives in way that allows you to play from a say ā€œscript videosā€ folder or do it via a custom list etc.

I think itā€™s performance waste to check for each video whether there are funscripts available and it would also slow the indexing down a lot.

2 Likes

Iā€™m already doing that but I got sooo many subfolders. Performance wise wouldnā€™t be a Problem for my Rig tho

1 Like