Open innocent-velociraptor opened 2 years ago
Hey, thanks, this is the right place for feature suggestions.
No, it is not possible, please see https://github.com/tappi287/openvr_fsr_app/issues/27 and https://github.com/tappi287/openvr_fsr_app/issues/6
Hey, thanks for the feedback. If I understand properly, the issues you're mentioning are related to malicious behavior, well, at least they are flagged as such by AV software. Since actions performed would be of the same kind with the current app and with a bulk mode, would adding a random sleep timer before processing each game solve the problem?
o_O do you have a collection of throw-away accounts? :] Greetings, guilty-snake
Yes, I need to avoid "suspicious" behaviour by the app. Eg. code for an completely automatic update is there but will even trigger Windows built-in malware protection on the system were I actually build the software.
Ahah, busted I see :( No, it's just that one account requires me to use a security token for 2FA and I don't always have it on me. Regarding the code, can it be build on Linux, and then run on Windows? If you want, you can send me the code that does things automatically and I'll see what I can do.
No, it's a not a problem when building but while running the code.
I realized afterwards that my question was dumb, if the issue was arising only during building, then you could just disable your AV during this step (unlike an updated version with a bulk mode where everyone who would want to use it would need to disable their AV while using the app). Do you know exactly what triggers the AV alert? Is it just the fact of copying multiples files at once? Because, that's basically what a backup of a folder would do. Perhaps it's also related to modifying DLLs? Any chance that using another Python module to copy files could go unnoticed? Or introducing a few seconds delay between each copy (at worst, someone with a huge games library could let the app run overnight)?
In the meantime, maybe an intermediary solution would be to add the ability to change a plugin's default settings? For instance, right now, I think I need to change this file for FSR: https://github.com/tappi287/openvr_fsr_app/blob/master/app/cfg/fsr_cfg.py and then, build the app, because those settings are kind of hard coded once the app is built, right?
Because I tried modifying the file: C:\Program Files (x86)\OpenVR-FSR-App\data\openvr_fsr\openvr_mod.cfg but it didn't seem to work (at least, after relaunching the app, the default settings looked to be the same as before).
If you would like to implement this please feel free to create a fork and I'll see where I can help.
To clear things up: 1. I do not want to potentially trigger AV from any software I release 2. I see no use in a bulk change of options: These plugins will worsen your image quality with no performance gain in 85% of use cases. They can however help in very special scenarios where a system is GPU limited with very high-res HMDs. So these need to be very finely tuned for the 2-3 apps where this might apply. Applying these plugins to a lot of apps simply does not make sense. If someone is just after sharpening filters: there are lot more configurable and performant options available e.g. VRToolkit
I'll hope to get this clarification/explanation into the app at some point in the future. Currently my impression is user's send links to FSR/fixed FOV/OpenXR Toolkit and alike around as a generic one click approach to obtain better performance which simply isn't the case for any of those.
Hey,
I had a look at your code, and that's way beyond my skills (Classes, decorators and so on) I just started doing a bit of Python a few weeks ago, but very basic stuff, and my job is not being a developer. I completely understand point 1. But I beg to differ regarding your second point: VR usually imply being GPU limited due to the high resolutions used (almost 4K with a Quest 2 for instance). I'm not even sure que a RTX 3090Ti will be able to make most games run at 120 fps consistently. Consistently implies that the minimum framerate is close to 120 fps (or at least, say, 0.1% or 1% lows), that's definitely not the same as getting 120 fps on average. https://tpucdn.com/review/nvidia-geforce-rtx-3090-ti-founders-edition/images/average-fps-3840-2160.png Granted, those are not VR games, but it's only the average FPS that is mentioned here, and it does not even reach 120 FPS when all games are taken into account and you look at the overall average for all games benchmarked. But unfortunately, I only own a 1080Ti, which is basically only half as powerful. Regarding the image quality, personally I don't really care, as I use my PC to stream games wirelessly, so the video is already degraded by the compression. But as often, it's a matter of tradeoffs. I just prefer speed over quality. But in the end, it's your software, so obviously you do what you want, no problem with that.
I guess both of us lack the numbers to prove our points here :) I kindly ask to continue discussion about performance and hardware in forums/discord. This is not to say you're wrong and I'm right, just the wrong place for a discussion we could have for weeks without proper numbers showing CPU -and- GPU frame times with and without these plugins enabled on a broad selection of apps.
https://www.techpowerup.com/review/amd-fsr-fidelityfx-super-resolution-quality-performance-benchmark/9.html https://www.tomshardware.com/features/amd-fsr-vs-nvidia-dlss
Those are not VR games, but AFAIK, there is no video game engine specifically developed to be used exclusively in VR games, so I see no reason why these results could not be extrapolated for VR (especially when only FSR with high res is taken into account, a case that yields bigger gains).
So, I would really like to see your numbers that make you say: "These plugins will worsen your image quality with no performance gain in 85% of use cases."
You can probably find a few games for which there would be no performance gain in 4K upscaled with FSR in Balanced mode, but definitely not 85%.
Hello,
I'm trying to build the app on Windows 11, but I ran into this error (not the first one, but was able to solve the previous ones):
`(openvr_fsr_app-master-fkHXQenE) C:\Users\guilty-snake\Downloads\openvr_fsr_app-master>python.exe run.py yarn run v1.22.18 $ vue-cli-service build ERROR Error: Cannot find module '@vue/cli-plugin-babel/preset' Require stack:
Any idea?
Looks like problem with a npm dependency, no?
I followed the steps you have indicated, but I had to install vue-cli-service when I encountered the first error. Now, I'm stuck here. I also executed this command: npm install @vue/cli-plugin-babel -g
P.S.: I'm not a dev, so please bear with me :p
Hmm, I can create an environment without problems using:
npm v8.3.1
yarn 1.22.10
Your npm install command installs the plugin into your global npm modules. Maybe try to uninstall and then install the exact version stated in the lock files: 4.5.15
, should be:
yarn add @vue/babel-preset-app@4.5.15
yarn add @vue/cli-shared-utils@4.5.15
and just in case anything else is missing:
yarn add @babel/core@7.11.0 babel-loader@8.1.0 cache-loader@4.1.0 thread-loader@2.1.3 webpack@4.0.0
Hi, thanks for you reply.
Where should I run the commands from, if that matters?
Windows CMD or node.js command prompt?
Isn't there something similar to Python, like pip install -r requirements.txt
?
I executed those 2 commands:
yarn remove @vue/babel-preset-app
yarn remove @vue/cli-shared-utils
success Uninstalled packages. for both.
Then, as you suggested, I ran:
yarn add @vue/babel-preset-app@4.5.15
yarn add @vue/cli-shared-utils@4.5.15
But vue CLI is still complaining:
Error: Cannot find module '@vue/cli-plugin-babel/preset'
And npm modules can be installed either globally or locally? What's better in this case?
Where should I run the commands from, if that matters?
Inside the directory where you cloned the git repo. C:\Users\guilty-snake\Downloads\openvr_fsr_app-master
Windows CMD or node.js command prompt?
Does not matter as long as you are in the right dir.
Isn't there something similar to Python, like pip install -r requirements.txt
That's what pipenv is for. Pip would use your system interpreter while pipenv creates a virtual environment for you.
But vue CLI is still complaining: Error: Cannot find module '@vue/cli-plugin-babel/preset'
There are plenty of suggestions you could try:
https://duckduckgo.com/?q=vue+cli-plugin-babel%2Fpreset
One suggestion is to install @babel/core @babel/preset-env
but I can't try this here.
And npm modules can be installed either globally or locally? What's better in this case?
If you have only one node.js project it doesn't really matter but in general it will save you head aches if you place dependencies locally inside your project space.
Hey,
Thanks, eventually, it worked ! I thought I was gonna give up :p
I had to run the vue commands (at least this one: yarn add @babel/core @babel/preset-env
inside the pipenv , is that the normal expected behavior?
I assumed pipenv created a virtual env just for python, but that for the rest of the libraries in other languages, it would be able to use those that are installed system wide. Overall, I'm quite confused.
Do you think that would be possible to package a working building env inside a Docker container? Perhaps not, because it relies on Windows stuff?
And sorry for the off topic.
Edit:
No happy when running the tests though :(
========================================================================================================= short test summary info ========================================================================================================== FAILED test_app/test_app_fn.py::test_scan_app_lib_fn[app_settings_old] - TypeError: the JSON object must be str, bytes or bytearray, not NoneType FAILED test_app/test_app_fn.py::test_scan_app_lib_fn[app_settings] - TypeError: the JSON object must be str, bytes or bytearray, not NoneType ================================================================================================ 2 failed, 39 passed, 2 warnings in 14.34s =================================================================================================
I assumed pipenv created a virtual env just for python, but that for the rest of the libraries in other languages, it would be able to use those that are installed system wide. Overall, I'm quite confused.
pipenv is just for python. pipenv shell may changed your PATH sys variable(inside the local shell) and you were finally able to install the deps because yarn could not resolve to system wide deps.
Do you think that would be possible to package a working building env inside a Docker container? Perhaps not, because it relies on Windows stuff?
Yes, the app is only useful on Windows(plugins are platform specific dll's) so a Docker container has no use here.
No happy when running the tests though :(
Just run them a second time. Some files need to be created on first run.
Hello, thank you for the answers.
I ran the tests like 3 times in a row, but it is still throwing errors:
`(openvr_fsr_app-master-fkHXQenE) C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\tests>python -m pytest =========================================================================================================== test session starts ============================================================================================================ platform win32 -- Python 3.10.4, pytest-7.1.1, pluggy-1.0.0 rootdir: C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\tests collected 41 items
test_app\test_app_fn.py ....FF. [ 17%] test_app\test_custom_dir.py ...... [ 31%] test_app\test_mod_utils.py .. [ 36%] test_app\test_openvr_mod.py .............. [ 70%] test_app\test_user_apps.py .... [ 80%] test_app\test_vrperfkit_mod.py ....... [ 97%] test_valve\test_steam_lib.py . [100%]
================================================================================================================= FAILURES ================================================================================================================= __ test_scan_app_lib_fn[app_settings_old] __
app_settings = <class 'app.app_settings.AppSettings'>, custom_dir_id = '#9386', custom_lib_path = WindowsPath('C:/Users/guilty-snake/Downloads/openvr_fsr_app-master/tests/data/input/custom_dir'), custom_app_id = '#9386_7532' steam_apps_obj = <app.valve.steam.SteamApps object at 0x000002B6BD899F00>
def test_scan_app_lib_fn(app_settings, custom_dir_id, custom_lib_path, custom_app_id, steam_apps_obj):
# -- Add non existing lib
non_existing_id = custom_dir_id + '-'
app_settings.user_app_directories[non_existing_id] = Path(custom_lib_path.parent / 'non-existing').as_posix()
# -- Add custom test app lib
app_settings.user_app_directories[custom_dir_id] = custom_lib_path.as_posix()
# -- Test scan
result_dict = json.loads(app_fn.scan_app_lib_fn())
test_app\test_app_fn.py:66:
s = None, cls = None, object_hook = None, parse_float = None, parse_int = None, parse_constant = None, object_pairs_hook = None, kw = {}
def loads(s, *, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
"""Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray`` instance
containing a JSON document) to a Python object.
``object_hook`` is an optional function that will be called with the
result of any object literal decode (a ``dict``). The return value of
``object_hook`` will be used instead of the ``dict``. This feature
can be used to implement custom decoders (e.g. JSON-RPC class hinting).
``object_pairs_hook`` is an optional function that will be called with the
result of any object literal decoded with an ordered list of pairs. The
return value of ``object_pairs_hook`` will be used instead of the ``dict``.
This feature can be used to implement custom decoders. If ``object_hook``
is also defined, the ``object_pairs_hook`` takes priority.
``parse_float``, if specified, will be called with the string
of every JSON float to be decoded. By default this is equivalent to
float(num_str). This can be used to use another datatype or parser
for JSON floats (e.g. decimal.Decimal).
``parse_int``, if specified, will be called with the string
of every JSON int to be decoded. By default this is equivalent to
int(num_str). This can be used to use another datatype or parser
for JSON integers (e.g. float).
``parse_constant``, if specified, will be called with one of the
following strings: -Infinity, Infinity, NaN.
This can be used to raise an exception if invalid JSON numbers
are encountered.
To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
kwarg; otherwise ``JSONDecoder`` is used.
"""
if isinstance(s, str):
if s.startswith('\ufeff'):
raise JSONDecodeError("Unexpected UTF-8 BOM (decode using utf-8-sig)",
s, 0)
else:
if not isinstance(s, (bytes, bytearray)):
raise TypeError(f'the JSON object must be str, bytes or bytearray, '
f'not {s.class.name}') E TypeError: the JSON object must be str, bytes or bytearray, not NoneType
C:\Program Files\Python310\lib\json__init__.py:339: TypeError ----------------------------------------------------------------------------------------------------------- Captured stderr call ----------------------------------------------------------------------------------------------------------- Traceback (most recent call last): File "C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\util\utils.py", line 132, in func_wrapper return func(*args, *kwargs) File "C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\app_fn.py", line 151, in scan_app_lib_fn cached_steam_apps[app_id][mod.DLL_LOC_KEY_SELECTED] = cached_entry[mod.DLL_LOC_KEY_SELECTED] KeyError: 'Usr_8997' ------------------------------------------------------------------------------------------------------------ Captured log call ------------------------------------------------------------------------------------------------------------- CRITICAL root:utils.py:99 File "C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\util\utils.py", line 132, in func_wrapper return func(args, **kwargs) File "C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\app_fn.py", line 151, in scan_app_lib_fn cached_steam_apps[app_id][mod.DLL_LOC_KEY_SELECTED] = cached_entry[mod.DLL_LOC_KEY_SELECTED]
CRITICAL root:utils.py:100 <class 'KeyError'>: 'Usr_8997' ____ test_scan_app_lib_fn[app_settings] ____
app_settings = <class 'app.app_settings.AppSettings'>, custom_dir_id = '#9386', custom_lib_path = WindowsPath('C:/Users/guilty-snake/Downloads/openvr_fsr_app-master/tests/data/input/custom_dir'), custom_app_id = '#9386_7532' steam_apps_obj = <app.valve.steam.SteamApps object at 0x000002B6BD899F00>
def test_scan_app_lib_fn(app_settings, custom_dir_id, custom_lib_path, custom_app_id, steam_apps_obj):
# -- Add non existing lib
non_existing_id = custom_dir_id + '-'
app_settings.user_app_directories[non_existing_id] = Path(custom_lib_path.parent / 'non-existing').as_posix()
# -- Add custom test app lib
app_settings.user_app_directories[custom_dir_id] = custom_lib_path.as_posix()
# -- Test scan
result_dict = json.loads(app_fn.scan_app_lib_fn())
test_app\test_app_fn.py:66:
s = None, cls = None, object_hook = None, parse_float = None, parse_int = None, parse_constant = None, object_pairs_hook = None, kw = {}
def loads(s, *, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
"""Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray`` instance
containing a JSON document) to a Python object.
``object_hook`` is an optional function that will be called with the
result of any object literal decode (a ``dict``). The return value of
``object_hook`` will be used instead of the ``dict``. This feature
can be used to implement custom decoders (e.g. JSON-RPC class hinting).
``object_pairs_hook`` is an optional function that will be called with the
result of any object literal decoded with an ordered list of pairs. The
return value of ``object_pairs_hook`` will be used instead of the ``dict``.
This feature can be used to implement custom decoders. If ``object_hook``
is also defined, the ``object_pairs_hook`` takes priority.
``parse_float``, if specified, will be called with the string
of every JSON float to be decoded. By default this is equivalent to
float(num_str). This can be used to use another datatype or parser
for JSON floats (e.g. decimal.Decimal).
``parse_int``, if specified, will be called with the string
of every JSON int to be decoded. By default this is equivalent to
int(num_str). This can be used to use another datatype or parser
for JSON integers (e.g. float).
``parse_constant``, if specified, will be called with one of the
following strings: -Infinity, Infinity, NaN.
This can be used to raise an exception if invalid JSON numbers
are encountered.
To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
kwarg; otherwise ``JSONDecoder`` is used.
"""
if isinstance(s, str):
if s.startswith('\ufeff'):
raise JSONDecodeError("Unexpected UTF-8 BOM (decode using utf-8-sig)",
s, 0)
else:
if not isinstance(s, (bytes, bytearray)):
raise TypeError(f'the JSON object must be str, bytes or bytearray, '
f'not {s.class.name}') E TypeError: the JSON object must be str, bytes or bytearray, not NoneType
C:\Program Files\Python310\lib\json__init__.py:339: TypeError ----------------------------------------------------------------------------------------------------------- Captured stderr call ----------------------------------------------------------------------------------------------------------- Traceback (most recent call last): File "C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\util\utils.py", line 132, in func_wrapper return func(*args, *kwargs) File "C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\app_fn.py", line 151, in scan_app_lib_fn cached_steam_apps[app_id][mod.DLL_LOC_KEY_SELECTED] = cached_entry[mod.DLL_LOC_KEY_SELECTED] KeyError: 'Usr_8997' ------------------------------------------------------------------------------------------------------------ Captured log call ------------------------------------------------------------------------------------------------------------- CRITICAL root:utils.py:99 File "C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\util\utils.py", line 132, in func_wrapper return func(args, **kwargs) File "C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\app_fn.py", line 151, in scan_app_lib_fn cached_steam_apps[app_id][mod.DLL_LOC_KEY_SELECTED] = cached_entry[mod.DLL_LOC_KEY_SELECTED]
CRITICAL root:utils.py:100 <class 'KeyError'>: 'Usr_8997' ============================================================================================================= warnings summary ============================================================================================================= ..\app\util\utils.py:153 C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\util\utils.py:153: DeprecationWarning: invalid escape sequence '\D' """ Create a Windows .lnk ShortCut file with powershell
..\app\valve\steam.py:33 C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\app\valve\steam.py:33: DeprecationWarning: invalid escape sequence '\V' key = registry.OpenKey(registry.HKEY_CURRENT_USER, "Software\Valve\Steam")
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ========================================================================================================= short test summary info ========================================================================================================== FAILED test_app/test_app_fn.py::test_scan_app_lib_fn[app_settings_old] - TypeError: the JSON object must be str, bytes or bytearray, not NoneType FAILED test_app/test_app_fn.py::test_scan_app_lib_fn[app_settings] - TypeError: the JSON object must be str, bytes or bytearray, not NoneType ================================================================================================ 2 failed, 39 passed, 2 warnings in 14.11s =================================================================================================
(openvr_fsr_app-master-fkHXQenE) C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\tests> (openvr_fsr_app-master-fkHXQenE) C:\Users\guilty-snake\Downloads\openvr_fsr_app-master\tests>`
Is it because it can't get the proper path of my steam library folder for some reason, hence why the returned object is of NoneType?
Hello,
It's more a new feature request than a bug report. Would it be possible to add an option to be able to either bulk apply the same settings for all games in one's library or solely to manually selected games?
I think the idea is simliar to the one mentionned in the second part of issue #51.