Giter Site home page Giter Site logo

xbapps / xbvr Goto Github PK

View Code? Open in Web Editor NEW
315.0 28.0 127.0 5.4 MB

Tool to organize and stream your VR porn library

Go 69.89% HTML 0.05% JavaScript 2.04% Shell 0.19% Vue 27.64% Dockerfile 0.06% Makefile 0.13%
vr-players dlna-server stream gear-vr gearvr raspberry-pi raspberrypi porn organizer organize

xbvr's Introduction

Build Status GitHub release
Windows • macOS • Linux • Raspberry Pi

The ultimate tool for managing your VR porn library.

SuggestionsDiscord


Features

  • Automatically match title, tags, cast, cover image, and more to your videos
  • Support for all the most popular VR sites: BadoinkVR, CzechVR Network, DDFNetworkVR, MilfVR, NaughtyAmericaVR, SexBabesVR, StasyQVR, TmwVRnet, VirtualRealPorn, VirtualTaboo, VRBangers, VRHush, VRLatina, WankzVR and many studios on SexLikeReal
  • Directly supports DeoVR and HereSphere VR players via API
  • Built-in DLNA streaming server compatible with popular VR players (Pigasus, Skybox, Mobile Station VR)
  • Sleek and simple web UI
  • Browse your content by cast, site, tags, and release date
  • Available for Windows, macOS, Linux (including ARM builds for RaspberryPi)

Download

The latest version is always available on the releases page.

App is also available in form of Docker image, which makes it possible to run in more specialized environments such as QNAP NAS - downloads at GitHub Container Registry.

To run this container in docker:

docker run -t --name=xbvr --net=host --restart=always \
   --mount type=bind,source=/path/to/your/videos,target=/videos \
   --mount source=xbvr-config,target=/root/.config/ \
   ghcr.io/xbapps/xbvr:latest

Adding -d to the docker command will run the container in the background.

In docker, your videos will be mounted at /videos and you should add this path in Options -> Folders.

Please note that during the first run XBVR automatically installs ffprobe and ffmpeg codecs from ffbinaries site.

Quick Start

Once launched, web UI is available at http://127.0.0.1:9999.

Before anything else, you must allow the app to scan sites and populate its scene metadata library. Click through to Options -> Scene Data and "Run scraper". This can take several minutes to complete. Wait for it to finish, and then go to Options -> Folders and add the folders where your video files are stored.

When it's all done, you should see your media not only in web UI, but also through DLNA server in your favourite VR player.

Enjoy!

Questions & Suggestions

Ask your questions and suggest features on Discord.

Development

Make sure you have following installed:

  • Go 1.21
  • Node.js 12.x
  • Yarn 1.17.x
  • air (run go install github.com/cosmtrek/air@latest outside project directory)

Once all of the above is installed, running yarn dev from project directory launches file-watchers providing livereload for both Go and JavaScript.

Development in Gitpod

This project is configured for use in Gitpod. It will provide you with a pre-built development environment with all the tools needed to compile XBVR.

When the workspace loads, yarn dev runs and it will build and start XBVR automatically. Every time you make a change to a file, watchers will automatically compile the relevant code.

Once XBVR is compiled and starts, a preview panel will open in the IDE. As you modify go files, the preview panel will reload with the latest changes. If you make changes to Vue, you'll need to reload the browser to load the updated JavaScript.

Currently, it's only possible to test XBVR core and Browser applications using Gitpod. Because DLNA requires a local network, you won't be able to connect to the DLNA server running in Gitpod. For most people, this is fine.

sqlite3 is included in the terminal. The XBVR database is located at /home/gitpod/.config/xbvr/main.db

sqlite-web is also included. To browse the db, you can run sqlite_web /home/gitpod/.config/xbvr/main.db.

Gitpod has GitHub integration and, once authorized, can fork this repo into your account, push/pull changes, and create pull requests.

Ready to get started?

Open in Gitpod

How To

Add specific filter to DeoVR

  • On the XBVR scenes page, create a filter (cast, site, tags, etc.) and sort order, then create a "saved search" (see top left) and check "use as DeoVR list".
  • Inside DeoVR you will now see your saved search listed

Keyboard Shortcuts

  • Global ? - Quick Find
  • Details Pane
    o - previous scene
    p - next scene
    e - edit scene
    w - toggle watchlist
    f - toggle favourite
    W - toggle Watched status (Capital W)
    g - toggles gallery / video window
    esc - closes details pane
    left arrow - cycles backwards in gallery / skips backwards in video
    right arrow - cycles forward in gallery / skips forward in video
  • File Match Pane
    o - previous file
    p - next file
    left arrow - next page of search results
    right arrow - previous page of search results
    esc - closes matching pane
  • Actor List
    o or left arrow - previous page of actors
    p or right arrow - next page of actors
  • Actor Details
    o - previous actor
    p - next actor
    left arrow - cycles backwards in gallery
    right arrow - cycles forward in gallery
    esc - closes details pane

using Command Line Arguments/Environment Variables

Command line parameter Environment Variable Type Description
--enableLocalStorage boolean Use local folder to store application data
--app_dir XBVR_APPDIR String path to the application directory
--cache_dir XBVR_CACHEDIR String path to the tempoarary scraper cache directory
--imgproxy_dir XBVR_IMAGEPROXYDIR String path to the imageproxy directory
--search_dir XBVR_SEARCHDIR String path to the Search Index directory
--preview_dir XBVR_VIDEOPREVIEWDIR String path to the Scraper Cache directory
--scriptsheatmap_dir XBVR_SCRIPTHEATMAPDIR String path to the scripts_heatmap directory
--myfiles_dir XBVR_MYFILESDIR String path to the myfiles directory for serving users own content (eg images
--databaseurl DATABASE_URL String override default database path
--web_port XBVR_WEB_PORT Int override default Web Page port 9999
--ws_addr XBVR_WS_ADDR String override default Websocket address from the default 0.0.0.0:9998
--db_connection_pool_size DB_CONNECTION_POOL_SIZE Int sets the connection pool size for mariadb databases
--concurrent_scrapers CONCURRENT_SCRAPERS String set the number of scrapers that run concurrently default 9999

xbvr's People

Contributors

3dnsfw avatar aerowen avatar alderamin49ly avatar asparghus avatar awoooooo69 avatar cld9x avatar coolmintchocolate avatar crwxaj avatar dependabot[bot] avatar drchicken14 avatar hjs0007 avatar josecaetanoneto avatar jrebey avatar justinroper avatar lockedmouse avatar marianmelinte93 avatar nigh7stalk3r avatar nodudewastaken avatar peter23231 avatar pl33x avatar renovate[bot] avatar skyline2k avatar spednsfw avatar syph-nsfw avatar thebrnd avatar therealklh avatar toshski avatar vpfruitly avatar vt-idiot avatar wcarr112 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xbvr's Issues

can't compile without assets

I was trying to compile it and the assets package was missing,

go: finding github.com/cld9x/xbvr/pkg/assets latest
go: finding github.com/cld9x/xbvr/pkg latest
build command-line-arguments: cannot load github.com/cld9x/xbvr/pkg/assets: 
cannot find module providing package github.com/cld9x/xbvr/pkg/assets

I've seen it's in .ignore
Please distribute the assets somehow or add it to the repo

thanks

XBVR application crash when scanning a directory with leading or trailing whitespace character

issue edit this issue was incorrectly believed to be a result of scanning a non-C volume. The actual issue is a result of trying to scan a directory that has either a leading/trailing whitespace character (regardless of drive letter). App crash screenshot still applies.

This issue is really a Windows issue and not exclusive to XBVR. More detail regarding the issue can be found here: https://stackoverflow.com/questions/21072767/cant-delete-a-folder-on-windows-7-with-a-trailing-space

Low-priority issue at best. Likely not even worth investigating but perhaps XBVR could ignore / handle these problem directories graciously.

  • XBVR 0.1.5 on a Windows10 64-bit (Enterprise)

appcrash

When covers cannot be scraped, scraping panics

panic: runtime error: index out of range [0] with length 0

goroutine 222 [running]:
github.com/cld9x/xbvr/pkg/xbvr.SceneCreateUpdateFromExternal(0xc0018efc70, 0xc00692dac0, 0x12, 0xc006d6a6f9, 0x5, 0x124974b, 0x2, 0x0, 0x0, 0x1261148, ...)
/home/jrebey/workspaces/xbvr/pkg/xbvr/model_scene.go:155 +0x101b
github.com/cld9x/xbvr/pkg/xbvr.Scrape()
/home/jrebey/workspaces/xbvr/pkg/xbvr/task_content.go:108 +0xc7e
created by github.com/cld9x/xbvr/pkg/xbvr.TaskResource.scrape
/home/jrebey/workspaces/xbvr/pkg/xbvr/api_tasks.go:60 +0x35
exit status 2

This particular issue is caused by:
https://ddfnetworkvr.com/videos/my+girlfriend+s+a+nympho/21687

Ability to UNmatch and/or REmatch files to Scenes

Unless I'm being super dense and missing something, if you assign a file to a scene incorrectly, there's no way to fix that. Being able to unmatch or change the match would both solve the problem.

Perhaps linking the scene match modal right from the details view for a matched scene, and another button to just unmatch it entirely (for if you matched a file that has no corresponding scraper, to return it to bare file status).

Import JSON through a file upload

Currently you have to webhost your JSON somewhere to import it. It would be good to offer a file upload form to accomplish the same task with a locally stored JSON.

Tag and Performer Cleanup Functions

It would be nice to be able to link/join tags and performers. Different sites have subtle variations on terminology, spelling, or even case.

ie: link "blowjob" and "blowjobs"
ie: link "Anna De Ville" and "Anna de Ville"

Add the ability to disable unneeded scrapers

With the addition of the latest scrapers, the scene database now has over 5000 scenes. To allow scraping to scale to supporting every available site, we should allow the user to selectively enable scrapers.

Lock the scene search popup size

This can resize a bit depending on what is found in the search, would be useful if it was fixed somehow so the assign button is always in a consistent place.

Search engine alternatives

Current search engine (based on bleve) is working quite well, however the major downside is size of the index, and time needed to populate it.

Some deeper research is needed, below a braindump on the matter:

  • SQLite's FTS5 is a strong option, but fuzzy/approximate matching isn't its strong suit
  • Riot looks solid, but might be quite heavy dependency
  • Sonic or Tantivy are great options for Rust, but bringing dependencies from another ecosystem is overkill
  • Xapian has been ported to Go, but the port isn't really documented or released on its own

Display/Filter/Sort by Scene Metadata

The ability to filter based on metadata (cast, tags, etc.) already exists which suggests that the data is already linked to a scene.

This request is the ability to see what metadata is available for a scene by clicking on the scene. I.e. if I click on a scene, I'd like to know who's in it and what tags are associated with it.

User Management

Maybe with import/export of user data (stars, save states, a-b loop data, etc).

gDrive Support

Would be great if xbvr had native support for cloud storage, but mainly gdrive since they have the most affordable and powerful storage solution. If xbvr could support strm files and the client could be made to direct play from gdrive, the bandwidth/cycles needed for xbvr alone could be low enough that it might be feasible to run the whole thing from a free gce vm.

Can't search by "id" in scene matching

Prior to beta7, the video's id was part of the index and could be searched. Now that doesn't seem to work, which makes matching some sites harder (czechvr, vr3000) and some nearly impossible (javr).

Manual Scene Entry

If someone has files from a site without a scraper, it would be nice to have a way to manually provide a URL for the cover image, the scene title, and other basic info. It wouldn't need to be as robust as what a good scraper can do. Maybe tags and performers, just the basics.

This, combined with the enhancements in #141 would allow people to "up-convert" from manual to scraped when/if a scraper is added for the site.

Suppress File Scan Command Prompts on Windows

On Windows OS, when scanning files, a new command prompt windows is created and then closes (over and over again, very fast) for each ffprobe process. (At least, I think it's ffprobe.) It makes your computer basically unusable because each new windows steals focus and so you can't do anything until they have stopped coming and going.

Browse/Filter/Sort by File Metadata (Not Scene)

Hi, in closing #154 it made me think about how it would be useful to grab basic data on the files themselves. It looks like resolution and filesize is already captured, but framerate and bitrate (others?) would also be good.

At least once I have used those 3 values to determine which files to cull from my collection, so it may be of use to others in this way as well. I also used that info to figure out which scenes to upgrade, when I have had temporary access to a particular site. ie: Say you have a lot of 2160p files but get a new headset and want to replace those with 2700p versions.

Going a step further, being able to craft a filter that's like "site=Network && resolution < 4K" would be great, but that would require mapping all the various 4K-ish resolutions to a tag called "4K" (and ditto for tags like "5K" and "1600p" or whatever else. So I'd consider this a step beyond the basic level of displaying/filtering on raw values.

Tracking Ticket for Requesting New (non aggregator) Scrapers

I thought it might be handy to have a single issue to track requested scrapers in one place. Here's all the ones requested so far from both here and https://feedback.xbvr.app/

  • VRConk
  • VirtualRealTrans
  • VRBTrans
  • VR3000
  • SinsVR
  • VRPFilms
  • WetVR
  • GroobyVR
  • VRTeenrs
  • WankitNowVR
  • TonightsGirlfriend (mostly 2D, some VR)
  • StripzVR
  • ZexyVR
  • JVRPorn
  • TranzVR (WankzVR network)
  • LustReality
  • StockingsVR
  • Dark Room VR (Virtual Taboo site)
  • BaberoticaVR
  • BigTitsinVR
  • JustVR
  • TSVirtualLovers (Reality Lovers site)

Rejected:

  • TeamSkeetVR REASON: Only released one scene ever.

Alphabatise the DLNA actress list

This would be useful on players like Skybox that don't have alphabet selection. Just an additional branch in the tree so that you dont need to scroll through a giant list of names.

Files View Sorting Issues

The files listing isn't defaulting to a good sort (such as filename) and if you manually pick a sort, it is lost between page reloads.

Add two site variants to the list of scrapers

Hi, both these sites are variants of sites that already have scrapers. I hope that means adding them could be as simple as changing the domain name? The sites certainly look very similar in a browser, but I'm not sure what that means when it comes to scraping the HTML.

VirtualRealTrans is VirtualRealPorn
VRBTrans is VRBangers

Thanks again for all your hard work on this niche project. It's so much better than a flat list of filenames.

DeoVR does not work remotely

When viewing the DeoVR interface, if the server running XBVR has multiple IP's or you are accessing it remotely the scene list points DeoVR to the wrong IP (sometimes inaccessible since it's on a different network).

We should reuse the hostname/ip which made the request in the response instead of potentially pointing DeoVR to an unroutable network.

IP Whitelisting for DLNA Port

Not everyone wants their library to show up on every media device on the network.

Possibly the best solution is to block everything by default, and then give an option in UI to whitelist selected addresses.

Support "Portable Mode"

I'd like to see a portable mode where the db/data aren't automatically stashed in the user's profile directory, but kept with the executable itself. Something like:

To use "portable mode" you would pass an argument like --portable to the exe. The process would determine the full path it is running from, then check for the presence of an "xbvr" subfolder (or some other name?) and use that as the data dir.

This has two good benefits: portability and allowing users to store the (sometimes very large data folder) somewhere other than their main drive/partition.

Pagination related issues in the Scene Match

I love the pagination. It's awesome and makes matching multiple files in a row so much nicer. But, it has a few minor issues:

  • Results aren't removed before switching to next file, leading to stale/incorrect results.
  • You aren't returned to page 1 of results after changing the text, or moving to the next file.
  • The modal should loop from the last file to the first file

Better Logging and Communication

When the user clicks a button in the Options menu, the UI should provide feedback about the success or failure of the action. This feedback could be provided by a notification on the bottom-right of the UI.

Examples:

  • User clicks "Rescan"
    => Notification: "Scanning files ..."
  • User clicks "Run Scraper"
    => Notification: "Running scraper ..."
  • User clicks "Add new folder" without entering a path
    => Notification: "Error: please enter a path"

Right now, I need to watch the Docker logs to figure out what's actually happens. Adding feedback would be a huge quality of life improvement.

Scraping should optionally update existing DB entries.

Right now, all the scrapers skip updating scenes if they already exist. While this makes scraping for new scenes faster, when scrapers themselves get updated (bugs, new metadata available, etc.) they fail to update existing scenes.

It would be nice if we could do an "upsert" instead of just an insert and we should always just add to the database instead of skipping. The main problem I see, is that scene id's are auto-incremented and not keyed off the scene_id. scene_id would be better, but there is no way to enforce that a scraper doesn't change the scene ID. This could possibly happen for the scrapers that generate scene_id based on the URL. If a website shifts stuff around, you could run into dupes.

Web UI URL shows unreachable address

During startup, the logging shows the web ui is available at http://0.0.0.0:9999 which is the hardcoded httpAddr value.

This isn’t a reachable address. We should iterate through the ipv4 and ipv6 addresses on the host and print them all if httpAddr is set to 0.0.0.0. This also enables us to allow users to specify a specific IP to bind on in the future.

Docker container issues - 0.3.0-beta-7

First of all, a big thank you to all the devs for making XBVR a reality.
I use XBVR as a docker container, but the latest release beta 7 presents some issues that were not present in previous ones. I didn't find a similar issue report on this, so here it goes.

Using the current instructions for docker, the "xbvr:latest" tag gives an error:
docker: Error response from daemon: manifest for xbapps/xbvr:latest not found: manifest unknown: manifest unknown.
Setting manually the version worked fine with beta 6. However, with beta 7, this error now prevents XBVR from starting:
/xbvr: /lib/x86_64-linux-gnu/libc.so.6: version 'GLIBC_2.28' not found (required by /xbvr)
I've seen there were deeper changes to the docker container creation setup, but I'm not familiar enough with Docker to understand what might the problem be, or if I'm doing something very silly.
Thank you and regards.

(If helpful, tested on an archlinux x86 system with a working docker)

File Renaming and Organizing Features

Something that would be nice (in the long term) is a way to manage your local files. Renaming them and maybe organizing by folder based on site.

Definitely some challenges to implementing this, but a way to "write back" all the organization work into the actual filesystem would make browsing folders directly nicer and would greatly speed up re-importing to xbvr (ie: if you lost the db or really screwed it up somehow and wanted to start over).

"Off-by-2" errors in CzechVR scene data.

I ran a fresh scene scrape on 0.2.1 and am noticing a discrepancy in the CzechVR data.

Reproducing

The easiest way to view this issue is by viewing in a SQLite viewer. Example:

Capture

The scene czech-vr-fetish-191 (highlighted in image) has the correct title, but the filenames_arr,cover_url,scene_url fields are all mistakenly from czech-vr-fetish-193 (two IDs above).

It looks like it starts with the first two scenes, but doesn't grow after that. czech-vr-001 has an off by 1 error, then czech-vr-002 has an off by 2 error, and everything after is off by two:

Capture2

Speculating solution

I believe the issue is in this part of the scraper. The selector div.nazev h2 receives two hits on the page for the scene czech-vr-002: www[.]czechvrnetwork[.]com/detail-699-lenka-6. So on the second pass, it ends up setting sc.SiteID and sc.Title incorrectly, based on a hit from the "related videos" section on the page.

Search with contracted performer name

I'm sure this will be an edge case so only worth doing if its a simple fix.

It would be great if the search would work on 'MyName' as well as 'My Name'

Secure/password protected browser access.

I found that if I open up 9999 on my router I can access the web interface and watch videos on DeoVR remotely from myip:9999.

I presume this is a very unsafe thing to do, so I have closed up the port in my router, but I wonder if in the future this could be done safely.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.