├── .gitattributes ├── .github ├── FUNDING.yml ├── dependabot.yml └── workflows │ ├── bandit.yml │ ├── chocolatey-release.yml │ ├── dependency-review.yml │ ├── ossar.yml │ ├── osv-scanner.yml │ ├── pylint.yml │ ├── pyre.yml │ ├── python-app.yml │ ├── stale.yml │ ├── update-download-badge.yml │ ├── update-version-badge.yml │ └── winget-build.yml ├── .gitignore ├── .vscode └── settings.json ├── DLSS-Updater.nuspec ├── DLSS_Updater.spec ├── LICENSE ├── README.md ├── VERIFICATION.TXT ├── dist └── DLSS_Updater │ ├── DLSS_Updater.exe │ └── _internal │ ├── PyQt6 │ ├── Qt6 │ │ ├── bin │ │ │ ├── MSVCP140.dll │ │ │ ├── MSVCP140_1.dll │ │ │ ├── MSVCP140_2.dll │ │ │ ├── Qt6Core.dll │ │ │ ├── Qt6Gui.dll │ │ │ ├── Qt6Network.dll │ │ │ ├── Qt6Pdf.dll │ │ │ ├── Qt6Svg.dll │ │ │ ├── Qt6Widgets.dll │ │ │ ├── VCRUNTIME140.dll │ │ │ ├── VCRUNTIME140_1.dll │ │ │ └── opengl32sw.dll │ │ ├── plugins │ │ │ ├── generic │ │ │ │ └── qtuiotouchplugin.dll │ │ │ ├── iconengines │ │ │ │ └── qsvgicon.dll │ │ │ ├── imageformats │ │ │ │ ├── qgif.dll │ │ │ │ ├── qicns.dll │ │ │ │ ├── qico.dll │ │ │ │ ├── qjpeg.dll │ │ │ │ ├── qpdf.dll │ │ │ │ ├── qsvg.dll │ │ │ │ ├── qtga.dll │ │ │ │ ├── qtiff.dll │ │ │ │ ├── qwbmp.dll │ │ │ │ └── qwebp.dll │ │ │ ├── platforms │ │ │ │ ├── qminimal.dll │ │ │ │ ├── qoffscreen.dll │ │ │ │ └── qwindows.dll │ │ │ └── styles │ │ │ │ └── qmodernwindowsstyle.dll │ │ └── translations │ │ │ ├── qt_ar.qm │ │ │ ├── qt_bg.qm │ │ │ ├── qt_ca.qm │ │ │ ├── qt_cs.qm │ │ │ ├── qt_da.qm │ │ │ ├── qt_de.qm │ │ │ ├── qt_en.qm │ │ │ ├── qt_es.qm │ │ │ ├── qt_fa.qm │ │ │ ├── qt_fi.qm │ │ │ ├── qt_fr.qm │ │ │ ├── qt_gd.qm │ │ │ ├── qt_gl.qm │ │ │ ├── qt_he.qm │ │ │ ├── qt_help_ar.qm │ │ │ ├── qt_help_bg.qm │ │ │ ├── qt_help_ca.qm │ │ │ ├── qt_help_cs.qm │ │ │ ├── qt_help_da.qm │ │ │ ├── qt_help_de.qm │ │ │ ├── qt_help_en.qm │ │ │ ├── qt_help_es.qm │ │ │ ├── qt_help_fr.qm │ │ │ ├── qt_help_gl.qm │ │ │ ├── qt_help_hr.qm │ │ │ ├── qt_help_hu.qm │ │ │ ├── qt_help_it.qm │ │ │ ├── qt_help_ja.qm │ │ │ ├── qt_help_ka.qm │ │ │ ├── qt_help_ko.qm │ │ │ ├── qt_help_nl.qm │ │ │ ├── qt_help_nn.qm │ │ │ ├── qt_help_pl.qm │ │ │ ├── qt_help_pt_BR.qm │ │ │ ├── qt_help_ru.qm │ │ │ ├── qt_help_sk.qm │ │ │ ├── qt_help_sl.qm │ │ │ ├── qt_help_tr.qm │ │ │ ├── qt_help_uk.qm │ │ │ ├── qt_help_zh_CN.qm │ │ │ ├── qt_help_zh_TW.qm │ │ │ ├── qt_hr.qm │ │ │ ├── qt_hu.qm │ │ │ ├── qt_it.qm │ │ │ ├── qt_ja.qm │ │ │ ├── qt_ka.qm │ │ │ ├── qt_ko.qm │ │ │ ├── qt_lt.qm │ │ │ ├── qt_lv.qm │ │ │ ├── qt_nl.qm │ │ │ ├── qt_nn.qm │ │ │ ├── qt_pl.qm │ │ │ ├── qt_pt_BR.qm │ │ │ ├── qt_pt_PT.qm │ │ │ ├── qt_ru.qm │ │ │ ├── qt_sk.qm │ │ │ ├── qt_sl.qm │ │ │ ├── qt_sv.qm │ │ │ ├── qt_tr.qm │ │ │ ├── qt_uk.qm │ │ │ ├── qt_zh_CN.qm │ │ │ ├── qt_zh_TW.qm │ │ │ ├── qtbase_ar.qm │ │ │ ├── qtbase_bg.qm │ │ │ ├── qtbase_ca.qm │ │ │ ├── qtbase_cs.qm │ │ │ ├── qtbase_da.qm │ │ │ ├── qtbase_de.qm │ │ │ ├── qtbase_en.qm │ │ │ ├── qtbase_es.qm │ │ │ ├── qtbase_fa.qm │ │ │ ├── qtbase_fi.qm │ │ │ ├── qtbase_fr.qm │ │ │ ├── qtbase_gd.qm │ │ │ ├── qtbase_he.qm │ │ │ ├── qtbase_hr.qm │ │ │ ├── qtbase_hu.qm │ │ │ ├── qtbase_it.qm │ │ │ ├── qtbase_ja.qm │ │ │ ├── qtbase_ka.qm │ │ │ ├── qtbase_ko.qm │ │ │ ├── qtbase_lv.qm │ │ │ ├── qtbase_nl.qm │ │ │ ├── qtbase_nn.qm │ │ │ ├── qtbase_pl.qm │ │ │ ├── qtbase_pt_BR.qm │ │ │ ├── qtbase_ru.qm │ │ │ ├── qtbase_sk.qm │ │ │ ├── qtbase_tr.qm │ │ │ ├── qtbase_uk.qm │ │ │ ├── qtbase_zh_CN.qm │ │ │ └── qtbase_zh_TW.qm │ ├── QtCore.pyd │ ├── QtGui.pyd │ ├── QtWidgets.pyd │ └── sip.cp313-win_amd64.pyd │ ├── VCRUNTIME140.dll │ ├── VCRUNTIME140_1.dll │ ├── _asyncio.pyd │ ├── _bz2.pyd │ ├── _ctypes.pyd │ ├── _decimal.pyd │ ├── _elementtree.pyd │ ├── _hashlib.pyd │ ├── _lzma.pyd │ ├── _multiprocessing.pyd │ ├── _overlapped.pyd │ ├── _queue.pyd │ ├── _socket.pyd │ ├── _ssl.pyd │ ├── _uuid.pyd │ ├── _wmi.pyd │ ├── api-ms-win-core-console-l1-1-0.dll │ ├── api-ms-win-core-datetime-l1-1-0.dll │ ├── api-ms-win-core-debug-l1-1-0.dll │ ├── api-ms-win-core-errorhandling-l1-1-0.dll │ ├── api-ms-win-core-fibers-l1-1-0.dll │ ├── api-ms-win-core-fibers-l1-1-1.dll │ ├── api-ms-win-core-file-l1-1-0.dll │ ├── api-ms-win-core-file-l1-2-0.dll │ ├── api-ms-win-core-file-l2-1-0.dll │ ├── api-ms-win-core-handle-l1-1-0.dll │ ├── api-ms-win-core-heap-l1-1-0.dll │ ├── api-ms-win-core-interlocked-l1-1-0.dll │ ├── api-ms-win-core-kernel32-legacy-l1-1-1.dll │ ├── api-ms-win-core-libraryloader-l1-1-0.dll │ ├── api-ms-win-core-localization-l1-2-0.dll │ ├── api-ms-win-core-memory-l1-1-0.dll │ ├── api-ms-win-core-namedpipe-l1-1-0.dll │ ├── api-ms-win-core-processenvironment-l1-1-0.dll │ ├── api-ms-win-core-processthreads-l1-1-0.dll │ ├── api-ms-win-core-processthreads-l1-1-1.dll │ ├── api-ms-win-core-profile-l1-1-0.dll │ ├── api-ms-win-core-rtlsupport-l1-1-0.dll │ ├── api-ms-win-core-string-l1-1-0.dll │ ├── api-ms-win-core-synch-l1-1-0.dll │ ├── api-ms-win-core-synch-l1-2-0.dll │ ├── api-ms-win-core-sysinfo-l1-1-0.dll │ ├── api-ms-win-core-sysinfo-l1-2-0.dll │ ├── api-ms-win-core-timezone-l1-1-0.dll │ ├── api-ms-win-core-util-l1-1-0.dll │ ├── api-ms-win-crt-conio-l1-1-0.dll │ ├── api-ms-win-crt-convert-l1-1-0.dll │ ├── api-ms-win-crt-environment-l1-1-0.dll │ ├── api-ms-win-crt-filesystem-l1-1-0.dll │ ├── api-ms-win-crt-heap-l1-1-0.dll │ ├── api-ms-win-crt-locale-l1-1-0.dll │ ├── api-ms-win-crt-math-l1-1-0.dll │ ├── api-ms-win-crt-process-l1-1-0.dll │ ├── api-ms-win-crt-runtime-l1-1-0.dll │ ├── api-ms-win-crt-stdio-l1-1-0.dll │ ├── api-ms-win-crt-string-l1-1-0.dll │ ├── api-ms-win-crt-time-l1-1-0.dll │ ├── api-ms-win-crt-utility-l1-1-0.dll │ ├── certifi │ ├── cacert.pem │ └── py.typed │ ├── charset_normalizer │ ├── md.cp313-win_amd64.pyd │ └── md__mypyc.cp313-win_amd64.pyd │ ├── dlss_updater │ ├── __init__.py │ ├── auto_updater.py │ ├── config.py │ ├── constants.py │ ├── dll_repository.py │ ├── dlss_updater.log │ ├── icons │ │ ├── battlenet.png │ │ ├── dlss_updater.ico │ │ ├── dlss_updater.png │ │ ├── dlss_updater_full.png │ │ ├── ea.png │ │ ├── epic.png │ │ ├── gog.png │ │ ├── reset.png │ │ ├── steam.png │ │ ├── ubisoft.png │ │ ├── update.png │ │ └── xbox.png │ ├── lib │ │ └── threading_lib.py │ ├── logger.py │ ├── main_ui │ │ ├── animated_toggle.py │ │ └── main_window.py │ ├── scanner.py │ ├── updater.py │ ├── utils.py │ ├── version.py │ └── whitelist.py │ ├── icons │ ├── battlenet.png │ ├── dlss_updater.png │ ├── dlss_updater_full.png │ ├── ea.png │ ├── epic.png │ ├── gog.png │ ├── reset.png │ ├── steam.png │ ├── ubisoft.png │ ├── update.png │ └── xbox.png │ ├── libcrypto-3.dll │ ├── libffi-8.dll │ ├── libssl-3.dll │ ├── pefile-2023.2.7.dist-info │ ├── INSTALLER │ ├── LICENSE │ ├── METADATA │ ├── RECORD │ ├── REQUESTED │ ├── WHEEL │ └── top_level.txt │ ├── psutil-7.0.0.dist-info │ ├── INSTALLER │ ├── LICENSE │ ├── METADATA │ ├── RECORD │ ├── REQUESTED │ ├── WHEEL │ └── top_level.txt │ ├── psutil │ └── _psutil_windows.pyd │ ├── pyexpat.pyd │ ├── python3.dll │ ├── python313.dll │ ├── pywin32_system32 │ └── pywintypes313.dll │ ├── release_notes.txt │ ├── select.pyd │ ├── setuptools │ └── _vendor │ │ ├── importlib_metadata-8.0.0.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE │ │ ├── METADATA │ │ ├── RECORD │ │ ├── REQUESTED │ │ ├── WHEEL │ │ └── top_level.txt │ │ ├── jaraco │ │ └── text │ │ │ └── Lorem ipsum.txt │ │ └── wheel-0.45.1.dist-info │ │ ├── INSTALLER │ │ ├── LICENSE.txt │ │ ├── METADATA │ │ ├── RECORD │ │ ├── REQUESTED │ │ ├── WHEEL │ │ └── entry_points.txt │ ├── ucrtbase.dll │ ├── unicodedata.pyd │ └── win32 │ └── win32api.pyd ├── dlss_updater ├── __init__.py ├── auto_updater.py ├── config.py ├── constants.py ├── dll_repository.py ├── dlss_updater.log ├── icons │ ├── battlenet.png │ ├── dlss_updater.ico │ ├── dlss_updater.png │ ├── dlss_updater_full.png │ ├── ea.png │ ├── epic.png │ ├── gog.png │ ├── reset.png │ ├── steam.png │ ├── ubisoft.png │ ├── update.png │ └── xbox.png ├── lib │ └── threading_lib.py ├── logger.py ├── main_ui │ ├── animated_toggle.py │ └── main_window.py ├── scanner.py ├── updater.py ├── utils.py ├── version.py └── whitelist.py ├── hooks ├── hook-dlss_updater.py ├── hook-pefile.py └── hook-psutil.py ├── main.py ├── release_notes.txt ├── requirements.txt ├── tools ├── chocolateyInstall.ps1 └── chocolateyUninstall.ps1 ├── version.svg └── version.txt /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: decouk 14 | thanks_dev: # Replace with a single thanks.dev username 15 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 16 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "pip" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "weekly" 12 | 13 | - package-ecosystem: "github-actions" 14 | directory: "/.github/workflows" 15 | schedule: 16 | interval: "weekly" 17 | -------------------------------------------------------------------------------- /.github/workflows/bandit.yml: -------------------------------------------------------------------------------- 1 | # This workflow uses actions that are not certified by GitHub. 2 | # They are provided by a third-party and are governed by 3 | # separate terms of service, privacy policy, and support 4 | # documentation. 5 | 6 | # Bandit is a security linter designed to find common security issues in Python code. 7 | # This action will run Bandit on your codebase. 8 | # The results of the scan will be found under the Security tab of your repository. 9 | 10 | # https://github.com/marketplace/actions/bandit-scan is ISC licensed, by abirismyname 11 | # https://pypi.org/project/bandit/ is Apache v2.0 licensed, by PyCQA 12 | 13 | name: Bandit 14 | on: 15 | push: 16 | branches: [ "main" ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ "main" ] 20 | schedule: 21 | - cron: '32 21 * * 0' 22 | 23 | jobs: 24 | bandit: 25 | permissions: 26 | contents: read # for actions/checkout to fetch code 27 | security-events: write # for github/codeql-action/upload-sarif to upload SARIF results 28 | actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status 29 | 30 | runs-on: ubuntu-latest 31 | steps: 32 | - uses: actions/checkout@v4 33 | - name: Bandit Scan 34 | uses: shundor/python-bandit-scan@9cc5aa4a006482b8a7f91134412df6772dbda22c 35 | with: # optional arguments 36 | # exit with 0, even with results found 37 | exit_zero: true # optional, default is DEFAULT 38 | # Github token of the repository (automatically created by Github) 39 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information. 40 | # File or directory to run bandit on 41 | # path: # optional, default is . 42 | # Report only issues of a given severity level or higher. Can be LOW, MEDIUM or HIGH. Default is UNDEFINED (everything) 43 | # level: # optional, default is UNDEFINED 44 | # Report only issues of a given confidence level or higher. Can be LOW, MEDIUM or HIGH. Default is UNDEFINED (everything) 45 | # confidence: # optional, default is UNDEFINED 46 | # comma-separated list of paths (glob patterns supported) to exclude from scan (note that these are in addition to the excluded paths provided in the config file) (default: .svn,CVS,.bzr,.hg,.git,__pycache__,.tox,.eggs,*.egg) 47 | # excluded_paths: # optional, default is DEFAULT 48 | # comma-separated list of test IDs to skip 49 | # skips: # optional, default is DEFAULT 50 | # path to a .bandit file that supplies command line arguments 51 | # ini_path: # optional, default is DEFAULT 52 | 53 | -------------------------------------------------------------------------------- /.github/workflows/chocolatey-release.yml: -------------------------------------------------------------------------------- 1 | name: Chocolatey Release 2 | 3 | on: 4 | release: 5 | types: [published] 6 | workflow_dispatch: 7 | 8 | jobs: 9 | build: 10 | runs-on: windows-latest 11 | 12 | steps: 13 | - uses: actions/checkout@v4 14 | 15 | - name: Set up Python 16 | uses: actions/setup-python@v5 17 | with: 18 | python-version: '3.x' 19 | 20 | - name: Install dependencies 21 | run: | 22 | python -m pip install --upgrade pip 23 | pip install -r requirements.txt 24 | pip install pyinstaller 25 | 26 | - name: Clean build and dist directories 27 | run: | 28 | if (Test-Path build) { Remove-Item -Recurse -Force build } 29 | if (Test-Path dist) { Remove-Item -Recurse -Force dist } 30 | shell: pwsh 31 | 32 | - name: Build application 33 | run: pyinstaller DLSS_Updater.spec --noconfirm 34 | 35 | - name: Get latest release version 36 | id: get_version 37 | run: | 38 | $latest_release = Invoke-RestMethod -Uri "https://api.github.com/repos/${{ github.repository }}/releases/latest" 39 | $version = $latest_release.tag_name -replace '^[vV]', '' 40 | echo "VERSION=$version" | Out-File -FilePath $env:GITHUB_OUTPUT -Append 41 | shell: pwsh 42 | 43 | - name: Generate file hash 44 | run: | 45 | $hash = (Get-FileHash "dist\DLSS_Updater\DLSS_Updater.exe" -Algorithm SHA256).Hash 46 | echo "FILE_HASH=$hash" | Out-File -FilePath $env:GITHUB_OUTPUT -Append 47 | shell: pwsh 48 | id: hash 49 | 50 | - name: Update VERIFICATION.txt 51 | run: | 52 | $content = Get-Content -Path VERIFICATION.txt -Raw 53 | $content = $content -replace 'path\\to\\DLSS_Updater.exe', 'DLSS_Updater.exe' 54 | $content += "`n`nChecksum (SHA256) for DLSS_Updater.exe: ${{ steps.hash.outputs.FILE_HASH }}" 55 | $content | Set-Content -Path VERIFICATION.txt 56 | shell: pwsh 57 | 58 | - name: Create Chocolatey package 59 | run: | 60 | choco pack DLSS-Updater.nuspec --version=${{ steps.get_version.outputs.VERSION }} 61 | shell: pwsh 62 | 63 | - name: Push to Chocolatey 64 | env: 65 | CHOCO_API_KEY: ${{ secrets.CHOCO_API_KEY }} 66 | run: | 67 | choco apikey --key $env:CHOCO_API_KEY --source https://push.chocolatey.org/ 68 | choco push dlss-updater.${{ steps.get_version.outputs.VERSION }}.nupkg --source https://push.chocolatey.org/ 69 | shell: pwsh -------------------------------------------------------------------------------- /.github/workflows/dependency-review.yml: -------------------------------------------------------------------------------- 1 | # Dependency Review Action 2 | # 3 | # This Action will scan dependency manifest files that change as part of a Pull Request, 4 | # surfacing known-vulnerable versions of the packages declared or updated in the PR. 5 | # Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable 6 | # packages will be blocked from merging. 7 | # 8 | # Source repository: https://github.com/actions/dependency-review-action 9 | # Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement 10 | name: 'Dependency review' 11 | on: 12 | pull_request: 13 | branches: [ "main" ] 14 | 15 | # If using a dependency submission action in this workflow this permission will need to be set to: 16 | # 17 | # permissions: 18 | # contents: write 19 | # 20 | # https://docs.github.com/en/enterprise-cloud@latest/code-security/supply-chain-security/understanding-your-software-supply-chain/using-the-dependency-submission-api 21 | permissions: 22 | contents: read 23 | # Write permissions for pull-requests are required for using the `comment-summary-in-pr` option, comment out if you aren't using this option 24 | pull-requests: write 25 | 26 | jobs: 27 | dependency-review: 28 | runs-on: ubuntu-latest 29 | steps: 30 | - name: 'Checkout repository' 31 | uses: actions/checkout@v4 32 | - name: 'Dependency Review' 33 | uses: actions/dependency-review-action@v4 34 | # Commonly enabled options, see https://github.com/actions/dependency-review-action#configuration-options for all available options. 35 | with: 36 | comment-summary-in-pr: always 37 | # fail-on-severity: moderate 38 | # deny-licenses: GPL-1.0-or-later, LGPL-2.0-or-later 39 | # retry-on-snapshot-warnings: true 40 | -------------------------------------------------------------------------------- /.github/workflows/ossar.yml: -------------------------------------------------------------------------------- 1 | # This workflow uses actions that are not certified by GitHub. 2 | # They are provided by a third-party and are governed by 3 | # separate terms of service, privacy policy, and support 4 | # documentation. 5 | 6 | # This workflow integrates a collection of open source static analysis tools 7 | # with GitHub code scanning. For documentation, or to provide feedback, visit 8 | # https://github.com/github/ossar-action 9 | name: OSSAR 10 | 11 | on: 12 | push: 13 | branches: [ "main" ] 14 | pull_request: 15 | # The branches below must be a subset of the branches above 16 | branches: [ "main" ] 17 | schedule: 18 | - cron: '39 13 * * 0' 19 | 20 | permissions: 21 | contents: read 22 | 23 | jobs: 24 | OSSAR-Scan: 25 | # OSSAR runs on windows-latest. 26 | # ubuntu-latest and macos-latest support coming soon 27 | permissions: 28 | contents: read # for actions/checkout to fetch code 29 | security-events: write # for github/codeql-action/upload-sarif to upload SARIF results 30 | actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status 31 | runs-on: windows-latest 32 | 33 | steps: 34 | - name: Checkout repository 35 | uses: actions/checkout@v4 36 | 37 | # Ensure a compatible version of dotnet is installed. 38 | # The [Microsoft Security Code Analysis CLI](https://aka.ms/mscadocs) is built with dotnet v3.1.201. 39 | # A version greater than or equal to v3.1.201 of dotnet must be installed on the agent in order to run this action. 40 | # GitHub hosted runners already have a compatible version of dotnet installed and this step may be skipped. 41 | # For self-hosted runners, ensure dotnet version 3.1.201 or later is installed by including this action: 42 | # - name: Install .NET 43 | # uses: actions/setup-dotnet@v4 44 | # with: 45 | # dotnet-version: '3.1.x' 46 | 47 | # Run open source static analysis tools 48 | - name: Run OSSAR 49 | uses: github/ossar-action@v1 50 | id: ossar 51 | 52 | # Upload results to the Security tab 53 | - name: Upload OSSAR results 54 | uses: github/codeql-action/upload-sarif@v3 55 | with: 56 | sarif_file: ${{ steps.ossar.outputs.sarifFile }} 57 | -------------------------------------------------------------------------------- /.github/workflows/osv-scanner.yml: -------------------------------------------------------------------------------- 1 | name: OSV-Scanner 2 | 3 | on: 4 | pull_request: 5 | branches: [ "main" ] 6 | merge_group: 7 | branches: [ "main" ] 8 | schedule: 9 | - cron: '45 6 * * 5' 10 | push: 11 | branches: [ "main" ] 12 | 13 | permissions: 14 | security-events: write 15 | contents: read 16 | 17 | jobs: 18 | scan-scheduled: 19 | if: ${{ github.event_name == 'push' || github.event_name == 'schedule' }} 20 | uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@v2.0.2" 21 | with: 22 | scan-args: |- 23 | -r 24 | --skip-git 25 | ./ 26 | 27 | scan-pr: 28 | if: ${{ github.event_name == 'pull_request' || github.event_name == 'merge_group' }} 29 | uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable-pr.yml@v2.0.2" 30 | with: 31 | scan-args: |- 32 | -r 33 | --skip-git 34 | ./ -------------------------------------------------------------------------------- /.github/workflows/pylint.yml: -------------------------------------------------------------------------------- 1 | name: Pylint 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | strategy: 9 | matrix: 10 | python-version: ["3.10", "3.11", "3.12"] 11 | steps: 12 | - uses: actions/checkout@v4 13 | - name: Set up Python ${{ matrix.python-version }} 14 | uses: actions/setup-python@v5 15 | with: 16 | python-version: ${{ matrix.python-version }} 17 | - name: Install dependencies 18 | run: | 19 | python -m pip install --upgrade pip 20 | pip install pylint 21 | - name: Analysing the code with pylint 22 | run: | 23 | pylint $(git ls-files '*.py') 24 | -------------------------------------------------------------------------------- /.github/workflows/pyre.yml: -------------------------------------------------------------------------------- 1 | name: Pyre 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | branches: [main] 8 | 9 | jobs: 10 | pyre: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v4 14 | 15 | - name: Run Pyre Action 16 | uses: facebook/pyre-action@v0.0.2 17 | with: 18 | repo-directory: './dlss_updater/' 19 | requirements-path: '../requirements.txt' 20 | -------------------------------------------------------------------------------- /.github/workflows/python-app.yml: -------------------------------------------------------------------------------- 1 | # This workflow will install Python dependencies, run tests and lint with a single version of Python 2 | # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python 3 | 4 | name: Python application 5 | 6 | on: 7 | push: 8 | branches: [ "main" ] 9 | pull_request: 10 | branches: [ "main" ] 11 | 12 | permissions: 13 | contents: read 14 | 15 | jobs: 16 | build: 17 | 18 | runs-on: ubuntu-latest 19 | 20 | steps: 21 | - uses: actions/checkout@v4 22 | - name: Set up Python 3.10 23 | uses: actions/setup-python@v5 24 | with: 25 | python-version: "3.10" 26 | - name: Install dependencies 27 | run: | 28 | python -m pip install --upgrade pip 29 | pip install flake8 pytest 30 | if [ -f requirements.txt ]; then pip install -r requirements.txt; fi 31 | - name: Lint with flake8 32 | run: | 33 | # stop the build if there are Python syntax errors or undefined names 34 | flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics 35 | # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide 36 | flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics 37 | - name: Test with pytest 38 | run: | 39 | pytest 40 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | # This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time. 2 | # 3 | # You can adjust the behavior by modifying this file. 4 | # For more information, see: 5 | # https://github.com/actions/stale 6 | name: Mark stale issues and pull requests 7 | 8 | on: 9 | schedule: 10 | - cron: '21 20 * * *' 11 | 12 | jobs: 13 | stale: 14 | 15 | runs-on: ubuntu-latest 16 | permissions: 17 | issues: write 18 | pull-requests: write 19 | 20 | steps: 21 | - uses: actions/stale@v9 22 | with: 23 | repo-token: ${{ secrets.GITHUB_TOKEN }} 24 | stale-issue-message: 'Stale issue message' 25 | stale-pr-message: 'Stale pull request message' 26 | stale-issue-label: 'no-issue-activity' 27 | stale-pr-label: 'no-pr-activity' 28 | -------------------------------------------------------------------------------- /.github/workflows/update-download-badge.yml: -------------------------------------------------------------------------------- 1 | name: Update Download Count Badge 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 * * *' # Runs daily at midnight UTC 6 | workflow_dispatch: # Allows manual triggering 7 | 8 | jobs: 9 | update-badge: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v4 13 | 14 | - name: Set up Python 15 | uses: actions/setup-python@v5 16 | with: 17 | python-version: '3.x' 18 | 19 | - name: Install dependencies 20 | run: | 21 | python -m pip install --upgrade pip 22 | pip install requests 23 | 24 | - name: Fetch download count and update README 25 | env: 26 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 27 | run: | 28 | import os 29 | import requests 30 | 31 | def get_total_downloads(): 32 | total_downloads = 0 33 | page = 1 34 | 35 | while True: 36 | url = f"https://api.github.com/repos/Recol/DLSS-Updater/releases?page={page}&per_page=100" 37 | headers = {"Authorization": f"token {os.environ['GITHUB_TOKEN']}"} 38 | response = requests.get(url, headers=headers) 39 | 40 | if response.status_code != 200: 41 | print(f"Error fetching page {page}: {response.status_code}") 42 | break 43 | 44 | releases = response.json() 45 | 46 | if not releases: # No more releases 47 | break 48 | 49 | # Count downloads for this page 50 | for release in releases: 51 | for asset in release.get('assets', []): 52 | total_downloads += asset.get('download_count', 0) 53 | 54 | page += 1 55 | 56 | return total_downloads 57 | 58 | def update_readme(total_downloads): 59 | with open('README.md', 'r') as file: 60 | content = file.readlines() 61 | 62 | badge_url = f"https://img.shields.io/badge/Downloads-{total_downloads}-blue" 63 | new_badge = f"![Downloads]({badge_url})" 64 | 65 | # Find the position to insert or update the downloads badge 66 | version_badge_index = next((i for i, line in enumerate(content) if '![Version]' in line), -1) 67 | downloads_badge_index = next((i for i, line in enumerate(content) if '![Downloads]' in line), -1) 68 | 69 | if downloads_badge_index != -1: 70 | # Update existing downloads badge 71 | content[downloads_badge_index] = new_badge + '\n' 72 | elif version_badge_index != -1: 73 | # Insert new downloads badge after version badge 74 | content.insert(version_badge_index + 1, new_badge + '\n') 75 | else: 76 | # If version badge not found, insert at the top of the file 77 | content.insert(0, new_badge + '\n') 78 | 79 | with open('README.md', 'w') as file: 80 | file.writelines(content) 81 | 82 | total_downloads = get_total_downloads() 83 | update_readme(total_downloads) 84 | print(f"Total downloads: {total_downloads}") 85 | shell: python 86 | 87 | - name: Commit and push if changed 88 | run: | 89 | git config --global user.name 'github-actions[bot]' 90 | git config --global user.email 'github-actions[bot]@users.noreply.github.com' 91 | git add README.md 92 | if git diff --staged --quiet; then 93 | echo "No changes to commit" 94 | else 95 | git commit -m "Update download count badge" 96 | git pull --rebase origin main 97 | git push 98 | fi 99 | -------------------------------------------------------------------------------- /.github/workflows/update-version-badge.yml: -------------------------------------------------------------------------------- 1 | name: Update Version Badge 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | paths: 8 | - dlss_updater/version.py 9 | workflow_dispatch: 10 | 11 | jobs: 12 | update-version-badge: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout repository 16 | uses: actions/checkout@v4 17 | 18 | - name: Read version from version.py 19 | id: get_version 20 | run: | 21 | VERSION=$(grep -oP '(?<=__version__ = ")[^"]+' dlss_updater/version.py) 22 | echo "VERSION=$VERSION" >> $GITHUB_ENV 23 | 24 | - name: Generate version badge 25 | run: | 26 | VERSION=${{ env.VERSION }} 27 | curl -o version.svg "https://img.shields.io/badge/version-$VERSION-blue" 28 | 29 | - name: Commit version badge 30 | env: 31 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 32 | run: | 33 | git config --global user.name 'github-actions[bot]' 34 | git config --global user.email 'github-actions[bot]@users.noreply.github.com' 35 | git add version.svg 36 | git commit -m "Update version badge to $VERSION" 37 | git push origin main 38 | 39 | - name: Debug 40 | run: | 41 | git remote -v 42 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.zip 3 | *venv 4 | *build 5 | \.idea 6 | *.log 7 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "python.pythonPath": "C:\\Users\\deckl\\AppData\\Local\\Programs\\Python\\Python313\\python.exe" 3 | } 4 | -------------------------------------------------------------------------------- /DLSS-Updater.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | dlss-updater 5 | $version$ 6 | DLSS Updater 7 | Deco 8 | https://github.com/Recol/DLSS-Updater 9 | https://github.com/Recol/DLSS-Updater/tree/main/dlss_updater 10 | https://github.com/Recol/DLSS-Updater/issues 11 | https://github.com/Recol/DLSS-Updater/blob/main/LICENSE 12 | https://github.com/Recol/DLSS-Updater?tab=readme-ov-file#execution-instructions 13 | true 14 | https://github.com/Recol/DLSS-Updater/releases 15 | https://github.com/Recol/DLSS-Updater/blob/main/dlss_updater/icons/dlss_updater.png 16 | A tool to update DLSS DLLs for various games and launchers. 17 | DLSS Updater is a utility that automatically updates DLSS (Deep Learning Super Sampling) DLLs for games across multiple platforms including Steam, EA Play, Ubisoft, Epic Games, GOG, and Battle.net. It simplifies the process of keeping your games up-to-date with the latest DLSS improvements. 18 | 19 | **Note: This application requires administrative privileges to run.** 20 | 21 | This package does not contain malware, it is a limitation of Pyinstaller with the binary not being signed, please see https://github.com/pyinstaller/pyinstaller/issues/6754#issuecomment-1100821249 for more details. 22 | https://github.com/Recol/DLSS-Updater/blob/main/release_notes.txt 23 | dlss nvidia gaming update-tool admin 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /DLSS_Updater.spec: -------------------------------------------------------------------------------- 1 | # -- mode: python ; coding: utf-8 -- 2 | 3 | import pefile 4 | import psutil 5 | import os 6 | from PyInstaller.utils.hooks import collect_submodules, collect_data_files 7 | 8 | block_cipher = None 9 | 10 | dlss_updater_imports = collect_submodules('dlss_updater') 11 | dlss_updater_datas = collect_data_files('dlss_updater') 12 | 13 | a = Analysis( 14 | ['main.py'], 15 | pathex=['.'], 16 | binaries=[], 17 | datas=[ 18 | ('dlss_updater', 'dlss_updater'), 19 | ('release_notes.txt', '.'), 20 | ('dlss_updater/icons/*.png', 'icons/'), 21 | ], 22 | hiddenimports=[ 23 | 'pefile', 'psutil', 'importlib.metadata', 'packaging', 24 | 'concurrent.futures', 'pywin32', 'PyQt6' 25 | ] + dlss_updater_imports, 26 | hookspath=['./hooks'], 27 | hooksconfig={}, 28 | runtime_hooks=[], 29 | excludes=[], 30 | win_no_prefer_redirects=False, 31 | win_private_assemblies=False, 32 | cipher=block_cipher, 33 | noarchive=False, 34 | optimize=2 35 | ) 36 | 37 | pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) 38 | 39 | exe = EXE( 40 | pyz, 41 | a.scripts, 42 | [], 43 | exclude_binaries=True, 44 | name='DLSS_Updater', 45 | version='version.txt', 46 | debug=False, 47 | bootloader_ignore_signals=False, 48 | strip=False, 49 | upx=True, 50 | console=True, 51 | optimize=2, 52 | icon='dlss_updater/icons/dlss_updater.ico' 53 | ) 54 | 55 | coll = COLLECT( 56 | exe, 57 | a.binaries, 58 | a.zipfiles, 59 | a.datas, 60 | strip=False, 61 | upx=True, 62 | upx_exclude=[], 63 | name='DLSS_Updater', 64 | ) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DLSS Updater 2 | 3 | [![CodeQL](https://github.com/Recol/DLSS-Updater/actions/workflows/github-code-scanning/codeql/badge.svg)](https://github.com/Recol/DLSS-Updater/actions?query=workflow%3ACodeQL) 4 | ![Version](./version.svg) 5 | ![Downloads](https://img.shields.io/badge/Downloads-48742-blue) 6 | [![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-donate-yellow.svg)](https://buymeacoffee.com/decouk) 7 | 8 | 9 | ![dlss_updater](https://github.com/user-attachments/assets/b7d7fb4d-e204-412d-8e92-61a7173abfaf) 10 | 11 | What if you could update all the DLSS/XeSS DLLs for the games detected on your system? 12 | ## Features 13 | 14 | - Supports updating games from the following launchers: 15 | - Steam 16 | - Ubisoft 17 | - EA Play 18 | - Xbox Game Pass (PC) 19 | - Epic Games Launcher 20 | - GOG Galaxy 21 | - Battle.net (Note for Battle.net: Please ensure that the launcher is **open** before updating this launcher (this does not apply if you are entering a custom folder)) 22 | - A soft backup system for allowing restoration with [DLSS Swapper](https://github.com/beeradmoore/dlss-swapper). 23 | - Support for updating Ray Reconstruction/Frame Generation/Streamline (Reflex Low Latency etc) DLL's. 24 | - Support for updating XeSS/FSR/DirectStorage DLL's. 25 | - A GUI! 26 | - Support for manual folder locations. 27 | 28 | 29 | The current supported DLL included is DLSS 4. 30 | The current supported XESS DLL included is 2.0.1, please see the limitations [here](https://github.com/intel/xess/releases/tag/v2.0.1) for game support. 31 | 32 | ## GUI 33 | ![image](https://github.com/user-attachments/assets/5cd37173-d96b-4e0f-b3fa-08702222d1b6) 34 | 35 | ## Blacklisted Games 36 | 37 | The list of games that are not supported (blacklisted) is now maintained in a separate repository as a CSV file. This allows for easier updates and potential future expansion of game-specific information without requiring changes to the main application. You can view the current list of blacklisted games here: 38 | 39 | [DLSS-Updater-Blacklist](https://github.com/Recol/DLSS-Updater-Whitelist/blob/main/whitelist.csv) 40 | 41 | The blacklist includes games that: 42 | - Use their own version of DLSS for testing (e.g., 3DMark) 43 | - Replace the DLL when the game is booted (e.g., Warframe) 44 | - Are using a DLSS version <2.0 (these are non-updatable) 45 | - Have specific compatibility issues with updated DLSS versions 46 | 47 | The games that are blacklisted can be disabled manually by clicking the "Manage Blacklist" button in the GUI. This will allow you to skip games for whatever reason. 48 | 49 | ## Restoring modified DLL's 50 | - In order to do this, simply rename the **.dlsss** file of the respective DLL which you wish to restore to **.dll** and overwrite the original file. 51 | - Support does not exist yet for being able to restore them using the program. 52 | 53 | ## Execution Instructions 54 | 55 | ### Running the Pre-built Application 56 | 57 | 1. Download the latest release from the [Releases](https://github.com/Recol/DLSS-Updater/releases) page. 58 | 2. Extract the downloaded folder. 59 | 3. Navigate to the `dist/DLSS_Updater` directory. 60 | 4. Run the `DLSS_Updater.exe` executable as an administrator. 61 | 5. The program will now boot. 62 | 63 | ## Winget 64 | 65 | 1. Download DLSS Updater using ``winget install DLSS Updater``. 66 | 67 | ## Chocolatey 68 | 69 | 1. Download DLSS Updater from [here](https://community.chocolatey.org/packages/dlss-updater/). 70 | 71 | 72 | ### Building from Source 73 | 74 | If you prefer to build the application yourself, follow these steps: 75 | 76 | #### Prerequisites 77 | 78 | - Python 3.12 or higher 79 | - Git 80 | - pip (Python package installer) 81 | 82 | #### Steps 83 | 84 | 1. **Clone the Repository:** 85 | 86 | ```sh 87 | git clone https://github.com/Recol/DLSS-Updater.git 88 | cd DLSS-Updater 89 | ``` 90 | 91 | 2. **Create and Activate a Virtual Environment:** 92 | 93 | ```sh 94 | python -m venv venv 95 | venv\Scripts\activate 96 | ``` 97 | 98 | 3. **Install Dependencies:** 99 | 100 | ```sh 101 | pip install -r requirements.txt 102 | ``` 103 | 104 | 4. **Build the Executable:** 105 | 106 | Ensure you have `pyinstaller` installed: 107 | 108 | ```sh 109 | pip install pyinstaller 110 | ``` 111 | 112 | Run PyInstaller to build the executable: 113 | 114 | ```sh 115 | pyinstaller DLSS_Updater.spec 116 | ``` 117 | 118 | 5. **Run the Built Executable:** 119 | 120 | Navigate to the `dist` directory: 121 | 122 | ```sh 123 | cd dist/DLSS_Updater 124 | ``` 125 | 126 | Run the `DLSS_Updater.exe` executable: 127 | 128 | ```sh 129 | .\DLSS_Updater.exe 130 | ``` 131 | 132 | ## Easy Anti Cheat 133 | - The tool will not globally block games as some games do allow for this, with that being said i will whitelist games as they appear if they do not function for this. 134 | 135 | ## Future Features 136 | 137 | - Ability to restore and ~~create backups of DLL swaps~~. - This is currently being worked on, however support has been added for restoring with DLSS Swapper currently. 138 | - Support for a [database](https://github.com/Recol/DLSS-Updater/issues/9). 139 | - Insert xyz feature that wants to be requested. 140 | - Automation support with external software. 141 | 142 | ## Release Notes 143 | 144 | Each release includes detailed notes about new features, bug fixes, and other changes. You can find the release notes in the `release_notes.txt` file included with the application or in the Releases section. 145 | 146 | ## Troubleshooting 147 | 148 | If you encounter any issues, please refer to the Issues section on GitHub to see if your problem has already been reported. If not, feel free to open a new issue with detailed information about the problem. 149 | 150 | ## License 151 | 152 | This project is licensed under the GNU Affero General Public License. See the LICENSE file for more details. 153 | 154 | ## Credits 155 | 156 | This project uses Nvidia's DLSS (Deep Learning Super Sampling) technology. Please refer to Nvidia's [DLSS page](https://www.nvidia.com/en-us/geforce/technologies/dlss/) for more information. Special thanks to all contributors of open-source libraries used in this project, including but not limited to pefile, psutil, Pyinstaller and packaging. If any are not credited and should be, please inform the author and credit will be applied where required. 157 | 158 | This project also uses Intel's XESS (Xe Super Sampling) technology. Please refer to Intel's [XESS page](https://www.intel.com/content/www/us/en/content-details/726651/intel-xe-super-sampling-xess-an-ai-based-upscaling-for-real-time-rendering.html?wapkw=xess) for more information. 159 | -------------------------------------------------------------------------------- /VERIFICATION.TXT: -------------------------------------------------------------------------------- 1 | VERIFICATION 2 | Verification is intended to assist the Chocolatey moderators and community 3 | in verifying that this package's contents are trustworthy. 4 | 5 | This package is published by the DLSS Updater Project itself. The binaries are 6 | identical to those published in the GitHub releases section. 7 | 8 | Project URL: https://github.com/Recol/DLSS-Updater 9 | Releases: https://github.com/Recol/DLSS-Updater/releases 10 | 11 | To verify the binaries: 12 | 13 | 1. Download the official release from the GitHub releases page 14 | 2. Generate a checksum using Get-FileHash in PowerShell 15 | Get-FileHash path\to\DLSS_Updater.exe -Algorithm SHA256 16 | 3. Compare the checksum with the one provided in the release notes or in this file 17 | 18 | Alternatively, you can use the verification methods provided by GitHub to ensure 19 | the release you're downloading matches the source code at the tagged commit. 20 | 21 | Note: This file will be updated with each release to include the specific 22 | checksum for the current version. Always refer to the VERIFICATION.txt 23 | included in the package for the most up-to-date verification information. -------------------------------------------------------------------------------- /dist/DLSS_Updater/DLSS_Updater.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/DLSS_Updater.exe -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/MSVCP140.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/MSVCP140.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/MSVCP140_1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/MSVCP140_1.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/MSVCP140_2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/MSVCP140_2.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Core.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Core.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Gui.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Gui.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Network.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Network.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Pdf.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Pdf.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Svg.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Svg.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Widgets.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Widgets.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/VCRUNTIME140.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/VCRUNTIME140.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/VCRUNTIME140_1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/VCRUNTIME140_1.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/opengl32sw.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/opengl32sw.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/generic/qtuiotouchplugin.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/generic/qtuiotouchplugin.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/iconengines/qsvgicon.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/iconengines/qsvgicon.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qgif.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qgif.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qicns.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qicns.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qico.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qico.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qjpeg.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qjpeg.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qpdf.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qpdf.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qsvg.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qsvg.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qtga.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qtga.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qtiff.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qtiff.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qwbmp.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qwbmp.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qwebp.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qwebp.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/platforms/qminimal.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/platforms/qminimal.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/platforms/qoffscreen.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/platforms/qoffscreen.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/platforms/qwindows.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/platforms/qwindows.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/styles/qmodernwindowsstyle.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/styles/qmodernwindowsstyle.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ar.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ar.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_bg.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_bg.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ca.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ca.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_cs.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_cs.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_da.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_da.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_de.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_de.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_en.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_en.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_es.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_es.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_fa.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_fa.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_fi.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_fi.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_fr.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_fr.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_gd.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_gd.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_gl.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_gl.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_he.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_he.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ar.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ar.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_bg.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_bg.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ca.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ca.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_cs.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_cs.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_da.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_da.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_de.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_de.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_en.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_en.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_es.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_es.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_fr.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_fr.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_gl.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_gl.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_hr.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_hr.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_hu.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_hu.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_it.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_it.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ja.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ja.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ka.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ka.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ko.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ko.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_nl.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_nl.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_nn.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_nn.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_pl.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_pl.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_pt_BR.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_pt_BR.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ru.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ru.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_sk.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_sk.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_sl.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_sl.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_tr.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_tr.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_uk.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_uk.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_zh_CN.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_zh_CN.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_zh_TW.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_zh_TW.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_hr.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_hr.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_hu.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_hu.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_it.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_it.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ja.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ja.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ka.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ka.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ko.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ko.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_lt.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_lt.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_lv.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_lv.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_nl.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_nl.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_nn.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_nn.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_pl.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_pl.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_pt_BR.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_pt_BR.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_pt_PT.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_pt_PT.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ru.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ru.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_sk.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_sk.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_sl.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_sl.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_sv.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_sv.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_tr.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_tr.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_uk.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_uk.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_zh_CN.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_zh_CN.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_zh_TW.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_zh_TW.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ar.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ar.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_bg.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_bg.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ca.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ca.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_cs.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_cs.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_da.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_da.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_de.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_de.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_en.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_en.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_es.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_es.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_fa.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_fa.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_fi.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_fi.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_fr.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_fr.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_gd.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_gd.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_he.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_he.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_hr.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_hr.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_hu.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_hu.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_it.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_it.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ja.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ja.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ka.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ka.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ko.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ko.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_lv.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_lv.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_nl.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_nl.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_nn.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_nn.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_pl.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_pl.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_pt_BR.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_pt_BR.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ru.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ru.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_sk.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_sk.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_tr.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_tr.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_uk.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_uk.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_zh_CN.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_zh_CN.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_zh_TW.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_zh_TW.qm -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/QtCore.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/QtCore.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/QtGui.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/QtGui.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/QtWidgets.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/QtWidgets.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/PyQt6/sip.cp313-win_amd64.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/sip.cp313-win_amd64.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/VCRUNTIME140.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/VCRUNTIME140.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/VCRUNTIME140_1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/VCRUNTIME140_1.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/_asyncio.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_asyncio.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/_bz2.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_bz2.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/_ctypes.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_ctypes.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/_decimal.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_decimal.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/_elementtree.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_elementtree.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/_hashlib.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_hashlib.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/_lzma.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_lzma.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/_multiprocessing.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_multiprocessing.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/_overlapped.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_overlapped.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/_queue.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_queue.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/_socket.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_socket.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/_ssl.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_ssl.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/_uuid.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_uuid.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/_wmi.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_wmi.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-console-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-console-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-datetime-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-datetime-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-debug-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-debug-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-errorhandling-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-errorhandling-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-fibers-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-fibers-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-fibers-l1-1-1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-fibers-l1-1-1.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-file-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-file-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-file-l1-2-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-file-l1-2-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-file-l2-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-file-l2-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-handle-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-handle-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-heap-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-heap-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-interlocked-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-interlocked-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-kernel32-legacy-l1-1-1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-kernel32-legacy-l1-1-1.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-libraryloader-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-libraryloader-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-localization-l1-2-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-localization-l1-2-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-memory-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-memory-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-namedpipe-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-namedpipe-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-processenvironment-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-processenvironment-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-processthreads-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-processthreads-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-processthreads-l1-1-1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-processthreads-l1-1-1.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-profile-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-profile-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-rtlsupport-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-rtlsupport-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-string-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-string-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-synch-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-synch-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-synch-l1-2-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-synch-l1-2-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-sysinfo-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-sysinfo-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-sysinfo-l1-2-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-sysinfo-l1-2-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-timezone-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-timezone-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-core-util-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-util-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-crt-conio-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-conio-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-crt-convert-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-convert-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-crt-environment-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-environment-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-crt-filesystem-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-filesystem-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-crt-heap-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-heap-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-crt-locale-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-locale-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-crt-math-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-math-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-crt-process-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-process-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-crt-runtime-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-runtime-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-crt-stdio-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-stdio-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-crt-string-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-string-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-crt-time-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-time-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/api-ms-win-crt-utility-l1-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-utility-l1-1-0.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/certifi/py.typed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/certifi/py.typed -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/charset_normalizer/md.cp313-win_amd64.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/charset_normalizer/md.cp313-win_amd64.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/charset_normalizer/md__mypyc.cp313-win_amd64.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/charset_normalizer/md__mypyc.cp313-win_amd64.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/__init__.py: -------------------------------------------------------------------------------- 1 | from .scanner import ( 2 | get_steam_install_path, 3 | get_steam_libraries, 4 | find_dlls, 5 | find_all_dlls_sync, 6 | ) 7 | from .updater import update_dll 8 | from .whitelist import is_whitelisted 9 | from .version import __version__ 10 | from .config import resource_path, initialize_dll_paths, config_manager 11 | from .logger import setup_logger 12 | from .constants import DLL_TYPE_MAP, DLL_GROUPS 13 | from .lib.threading_lib import ThreadManager, WorkerSignals 14 | 15 | # We rename find_dlss_dlls to find_dlls and keep it for backward compatibility 16 | find_dlss_dlls = find_dlls 17 | 18 | # Let's export find_all_dlls_sync instead of the async version 19 | find_all_dlss_dlls = find_all_dlls_sync 20 | 21 | # Don't initialize DLL paths at import time anymore 22 | # This will be done explicitly after admin check 23 | LATEST_DLL_PATHS = {} 24 | 25 | __all__ = [ 26 | "get_steam_install_path", 27 | "get_steam_libraries", 28 | "find_dlss_dlls", 29 | "find_all_dlss_dlls", 30 | "update_dll", 31 | "is_whitelisted", 32 | "__version__", 33 | "LATEST_DLL_PATHS", 34 | "resource_path", 35 | "setup_logger", 36 | "DLL_TYPE_MAP", 37 | "DLL_GROUPS", 38 | "ThreadManager", 39 | "WorkerSignals", 40 | "config_manager", 41 | ] 42 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/auto_updater.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import json 3 | from urllib import request 4 | from urllib.error import URLError 5 | from packaging import version 6 | from dlss_updater.version import __version__ 7 | from dlss_updater.logger import setup_logger 8 | 9 | logger = setup_logger() 10 | 11 | GITHUB_API_URL = "https://api.github.com/repos/Recol/DLSS-Updater/releases/latest" 12 | GITHUB_RELEASES_URL = "https://github.com/Recol/DLSS-Updater/releases/latest" 13 | 14 | 15 | def check_for_updates(): 16 | """ 17 | Check for available updates by comparing versions. 18 | Returns (latest_version, is_update_available) tuple or (None, False) if check fails. 19 | """ 20 | try: 21 | logger.info("Checking for updates...") 22 | with request.urlopen(GITHUB_API_URL) as response: 23 | latest_release = json.loads(response.read().decode()) 24 | latest_version = latest_release["tag_name"].lstrip("Vv") 25 | 26 | if version.parse(latest_version) > version.parse(__version__): 27 | logger.info(f"New version available: {latest_version}") 28 | return latest_version, True 29 | else: 30 | logger.info("You have the latest version.") 31 | return latest_version, False 32 | except URLError as e: 33 | logger.error(f"Error checking for updates: {e}") 34 | return None, False 35 | except Exception as e: 36 | logger.error(f"Unexpected error checking for updates: {e}") 37 | return None, False 38 | 39 | 40 | def get_releases_url(): 41 | """Get the URL to the GitHub releases page""" 42 | return GITHUB_RELEASES_URL -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/constants.py: -------------------------------------------------------------------------------- 1 | DLL_TYPE_MAP = { 2 | "nvngx_dlss.dll": "DLSS DLL", 3 | "nvngx_dlssg.dll": "DLSS Frame Generation DLL", 4 | "nvngx_dlssd.dll": "DLSS Ray Reconstruction DLL", 5 | "libxess.dll": "XeSS DLL", 6 | "libxess_dx11.dll": "XeSS DX11 DLL", 7 | "dstorage.dll": "DirectStorage DLL", 8 | "dstoragecore.dll": "DirectStorage Core DLL", 9 | "sl.common.dll": "Streamline Shared Library DLL", 10 | "sl.dlss.dll": "Streamline DLSS Super Resolution DLL", 11 | "sl.dlss_g.dll": "Streamline DLSS Frame Generation DLL", 12 | "sl.interposer.dll": "Streamline Graphics API Interception DLL", 13 | "sl.pcl.dll": "Streamline Parameter/Platform Configuration DLL", 14 | "sl.reflex.dll": "Streamline Reflex Low-Latency DLL", 15 | "amd_fidelityfx_vk.dll": "AMD FidelityFX Super Resolution (FSR) Vulkan DLL", 16 | "amd_fidelityfx_dx12.dll": "AMD FidelityFX Super Resolution (FSR) DirectX 12 DLL", 17 | } 18 | 19 | 20 | DLL_GROUPS = { 21 | "DLSS": [ 22 | "nvngx_dlss.dll", 23 | "nvngx_dlssg.dll", 24 | "nvngx_dlssd.dll", 25 | ], 26 | "Streamline": [ 27 | "sl.common.dll", 28 | "sl.dlss.dll", 29 | "sl.dlss_g.dll", 30 | "sl.interposer.dll", 31 | "sl.pcl.dll", 32 | "sl.reflex.dll", 33 | ], 34 | "XeSS": [ 35 | "libxess.dll", 36 | "libxess_dx11.dll", 37 | ], 38 | "DirectStorage": [ 39 | "dstorage.dll", 40 | "dstoragecore.dll", 41 | ], 42 | "FSR": [ 43 | "amd_fidelityfx_vk.dll", 44 | "amd_fidelityfx_dx12.dll", 45 | ], 46 | } -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/icons/battlenet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/battlenet.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/icons/dlss_updater.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/dlss_updater.ico -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/icons/dlss_updater.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/dlss_updater.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/icons/dlss_updater_full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/dlss_updater_full.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/icons/ea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/ea.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/icons/epic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/epic.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/icons/gog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/gog.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/icons/reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/reset.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/icons/steam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/steam.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/icons/ubisoft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/ubisoft.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/icons/update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/update.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/icons/xbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/xbox.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/lib/threading_lib.py: -------------------------------------------------------------------------------- 1 | from PyQt6.QtCore import QThreadPool, QRunnable, pyqtSignal, QObject 2 | 3 | 4 | class WorkerSignals(QObject): 5 | """Signals available from a running worker thread.""" 6 | 7 | finished = pyqtSignal() 8 | result = pyqtSignal(object) 9 | error = pyqtSignal(tuple) 10 | progress = pyqtSignal(int) 11 | 12 | 13 | class Worker(QRunnable): 14 | """ 15 | Worker thread for running background tasks. 16 | 17 | Inherits from QRunnable for better thread pool management. 18 | """ 19 | 20 | def __init__(self, fn, progress_callback=None, *args, **kwargs): 21 | super().__init__() 22 | 23 | # Store constructor arguments (re-used for processing) 24 | self.fn = fn 25 | self.args = args 26 | self.kwargs = kwargs 27 | 28 | # Create signals for communication 29 | self.signals = WorkerSignals() 30 | 31 | # Store progress callback if provided 32 | self.progress_callback = progress_callback 33 | if self.progress_callback: 34 | self.signals.progress.connect(self.progress_callback) 35 | 36 | # Add an option to stop the worker if needed 37 | self.is_running = True 38 | 39 | def run(self): 40 | """ 41 | Initialise the runner function with passed args, kwargs. 42 | 43 | Automatic handling of different function signatures and return values. 44 | """ 45 | try: 46 | # Pass the signals to the function if it accepts them 47 | if "progress_signal" in self.kwargs: 48 | self.kwargs["progress_signal"] = self.signals.progress 49 | 50 | # Retrieve args/kwargs here; and fire processing using them 51 | result = self.fn(*self.args, **self.kwargs) 52 | except Exception as e: 53 | # If function raised an exception, capture it 54 | import traceback 55 | 56 | # Package the exception details 57 | exctype = type(e) 58 | value = str(e) 59 | tb = traceback.format_exc() 60 | 61 | # If still running, emit the error signal 62 | if self.is_running: 63 | self.signals.error.emit((exctype, value, tb)) 64 | else: 65 | # If function successfully completed, emit result 66 | if self.is_running: 67 | if result is not None: 68 | self.signals.result.emit(result) 69 | finally: 70 | # Always emit finished signal 71 | if self.is_running: 72 | self.signals.finished.emit() 73 | 74 | def stop(self): 75 | """Set the running state to False to prevent further signal emissions.""" 76 | self.is_running = False 77 | 78 | 79 | class ThreadManager: 80 | """ 81 | Manages thread pool and worker creation for background tasks. 82 | 83 | Provides a simplified interface for running functions in a thread pool. 84 | """ 85 | 86 | def __init__(self, parent=None): 87 | # Create a thread pool 88 | self.thread_pool = QThreadPool() 89 | 90 | # Set up maximum thread count (adjust as needed) 91 | self.thread_pool.setMaxThreadCount(8) 92 | 93 | # Store the current worker 94 | self.current_worker = None 95 | 96 | # Store the parent (optional) 97 | self.parent = parent 98 | 99 | # Signals to be connected from the current worker 100 | self.signals = None 101 | 102 | def assign_function(self, func, *args, **kwargs): 103 | """ 104 | Assign a function to be run in a background thread. 105 | 106 | Stops any existing worker before creating a new one. 107 | """ 108 | # Stop any existing worker 109 | if self.current_worker: 110 | self.current_worker.stop() 111 | 112 | # Create a new worker 113 | worker = Worker(func, *args, **kwargs) 114 | 115 | # Store the current worker 116 | self.current_worker = worker 117 | 118 | # Update signals reference 119 | self.signals = worker.signals 120 | 121 | def run(self): 122 | """ 123 | Run the currently assigned worker in the thread pool. 124 | 125 | Adds the worker to the thread pool for execution. 126 | """ 127 | if self.current_worker: 128 | # Add worker to thread pool 129 | self.thread_pool.start(self.current_worker) 130 | 131 | def waitForDone(self): 132 | """ 133 | Wait for all threads in the pool to complete. 134 | 135 | Useful for clean shutdown of the application. 136 | """ 137 | # Stop current worker if exists 138 | if self.current_worker: 139 | self.current_worker.stop() 140 | 141 | # Wait for thread pool to finish 142 | self.thread_pool.waitForDone() 143 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/logger.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import sys 3 | from pathlib import Path 4 | from PyQt6.QtCore import QObject, pyqtSignal, Qt 5 | from PyQt6.QtWidgets import QTextBrowser 6 | 7 | 8 | class QLoggerLevelSignal(QObject): 9 | """Signals for the Logger QTextBrowser derived class.""" 10 | debug = pyqtSignal() 11 | info = pyqtSignal() 12 | warning = pyqtSignal() 13 | error = pyqtSignal() 14 | 15 | 16 | class LoggerWindow(QTextBrowser): 17 | """A QTextBrowser subclass that have signals and a dict for ease of access to said signals.""" 18 | def __init__(self, parent=None): 19 | super().__init__(parent) 20 | self.signals = QLoggerLevelSignal() 21 | self.signals_to_emit = { 22 | "DEBUG": self.signals.debug, 23 | "INFO": self.signals.info, 24 | "WARNING": self.signals.warning, 25 | "ERROR": self.signals.error, 26 | } 27 | # Set document max size to prevent memory issues with very large logs 28 | self.document().setMaximumBlockCount(5000) # Limit to last 5000 lines 29 | # Set text browser properties 30 | self.setReadOnly(True) 31 | self.setOpenExternalLinks(False) 32 | # Enable smooth scrolling 33 | self.verticalScrollBar().setSingleStep(2) 34 | 35 | 36 | class QLogger(logging.Handler, QObject): 37 | """Logger handler for the Qt GUI""" 38 | # Define the signal as a class attribute 39 | logMessage = pyqtSignal(str, str) 40 | 41 | def __init__(self, text_browser): 42 | logging.Handler.__init__(self) 43 | QObject.__init__(self) # Initialize QObject 44 | 45 | self.text_browser = text_browser 46 | self.colors_dict = { 47 | "DEBUG": "white", 48 | "INFO": "green", 49 | "WARNING": "yellow", 50 | "ERROR": "red", 51 | } 52 | # Connect the signal to the slot method 53 | self.logMessage.connect(self.write_log, Qt.ConnectionType.QueuedConnection) 54 | 55 | def emit(self, record): 56 | """ 57 | Logs the record to the text browser object. 58 | @param record: LogRecord object to log. 59 | """ 60 | msg = self.format(record) 61 | # Emit the signal with levelname and formatted message 62 | self.logMessage.emit(record.levelname, msg) 63 | 64 | def write_log(self, levelname, msg): 65 | """Write the log message to the text browser in the main thread.""" 66 | color = self.colors_dict[levelname] 67 | formatted_msg = f'{msg}' 68 | self.text_browser.signals_to_emit[levelname].emit() 69 | self.text_browser.append(formatted_msg) 70 | # Scroll to bottom 71 | scrollbar = self.text_browser.verticalScrollBar() 72 | scrollbar.setValue(scrollbar.maximum()) 73 | 74 | 75 | def setup_logger(log_file_name="dlss_updater.log"): 76 | """ 77 | Setups the initial logger. 78 | param: log_file_name: filename to be used for the logfile. 79 | return: logger instance created. 80 | """ 81 | logger = logging.getLogger("DLSSUpdater") 82 | 83 | # Check if the logger has already been configured 84 | if not logger.handlers: 85 | logger.setLevel(logging.DEBUG) 86 | 87 | log_file_path = ( 88 | Path(sys.executable).parent / log_file_name 89 | if getattr(sys, "frozen", False) 90 | else Path(__file__).parent / log_file_name 91 | ) 92 | 93 | # Create handlers 94 | console_handler = logging.StreamHandler(sys.stdout) 95 | file_handler = logging.FileHandler(log_file_path, encoding="utf-8") 96 | 97 | # Create formatter and add it to handlers 98 | log_format = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") 99 | console_handler.setFormatter(log_format) 100 | file_handler.setFormatter(log_format) 101 | 102 | # Add handlers to the logger 103 | logger.addHandler(console_handler) 104 | logger.addHandler(file_handler) 105 | 106 | # Prevent propagation to avoid duplicate logs 107 | logger.propagate = False 108 | 109 | return logger 110 | 111 | 112 | def add_qt_handler(logger_to_extend, text_browser): 113 | """ 114 | Add a QTextBrowser handler to an existing logger instance. 115 | @param: logger_to_extend: logger instance to be extended. 116 | @param: text_browser: QTextBrowser instance to be added as a logger. 117 | """ 118 | # Remove any existing QLogger handlers 119 | for handler in logger_to_extend.handlers[:]: 120 | if isinstance(handler, QLogger): 121 | logger_to_extend.removeHandler(handler) 122 | 123 | # Create a new QLogger handler 124 | text_browser_handler = QLogger(text_browser) 125 | formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") 126 | text_browser_handler.setFormatter(formatter) 127 | logger_to_extend.addHandler(text_browser_handler) 128 | 129 | 130 | # Usage example 131 | if __name__ == "__main__": 132 | logger = setup_logger() 133 | logger.info("This is a test log message") 134 | logger.info("This is a test logger.info message with an argument: %s", "test arg") -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/main_ui/animated_toggle.py: -------------------------------------------------------------------------------- 1 | from PyQt6.QtCore import ( 2 | Qt, 3 | QSize, 4 | QPoint, 5 | QPointF, 6 | QRectF, 7 | QEasingCurve, 8 | QPropertyAnimation, 9 | QSequentialAnimationGroup, 10 | pyqtSlot, 11 | pyqtProperty, 12 | ) 13 | from PyQt6.QtWidgets import QCheckBox 14 | from PyQt6.QtGui import QColor, QBrush, QPaintEvent, QPen, QPainter 15 | 16 | 17 | class AnimatedToggle(QCheckBox): 18 | def __init__( 19 | self, 20 | parent=None, 21 | track_color="#888888", 22 | thumb_color="#FFFFFF", 23 | track_active_color="#2D6E88", 24 | thumb_active_color="#FFFFFF", 25 | animation_duration=120, 26 | ): 27 | super().__init__(parent) 28 | 29 | # Colors 30 | self._track_color = QColor(track_color) 31 | self._thumb_color = QColor(thumb_color) 32 | self._track_active_color = QColor(track_active_color) 33 | self._thumb_active_color = QColor(thumb_active_color) 34 | 35 | # Dimensions 36 | self._track_radius = 11 37 | self._thumb_radius = 8 38 | 39 | # Animation 40 | self._animation_duration = animation_duration 41 | self._margin = max(0, self._thumb_radius - self._track_radius) 42 | self._offset = 0 43 | self._pulse_radius = 0 44 | 45 | # Setup animations 46 | self.animation = QPropertyAnimation(self, b"offset") 47 | self.animation.setEasingCurve(QEasingCurve.Type.InOutCubic) 48 | self.animation.setDuration(self._animation_duration) 49 | 50 | self.pulse_animation = QPropertyAnimation(self, b"pulse_radius") 51 | self.pulse_animation.setDuration(self._animation_duration) 52 | self.pulse_animation.setEasingCurve(QEasingCurve.Type.InOutCubic) 53 | 54 | self.animations_group = QSequentialAnimationGroup() 55 | self.animations_group.addAnimation(self.animation) 56 | self.animations_group.addAnimation(self.pulse_animation) 57 | 58 | # Setup initial state 59 | self.setFixedSize( 60 | self._track_radius * 4 + self._margin * 2, 61 | self._track_radius * 2 + self._margin * 2, 62 | ) 63 | self.setCursor(Qt.CursorShape.PointingHandCursor) 64 | 65 | def sizeHint(self): 66 | return QSize( 67 | 4 * self._track_radius + 2 * self._margin, 68 | 2 * self._track_radius + 2 * self._margin, 69 | ) 70 | 71 | def hitButton(self, pos: QPoint): 72 | return self.contentsRect().contains(pos) 73 | 74 | @pyqtSlot(int) 75 | def setChecked(self, checked): 76 | super().setChecked(checked) 77 | self.offset = 1 if checked else 0 78 | 79 | def paintEvent(self, e: QPaintEvent): 80 | # Set up painter 81 | p = QPainter(self) 82 | p.setRenderHint(QPainter.RenderHint.Antialiasing) 83 | 84 | # Get current state 85 | checked = self.isChecked() 86 | enabled = self.isEnabled() 87 | 88 | # Calculate sizes 89 | track_opacity = 0.6 if enabled else 0.3 90 | margin = self._margin 91 | thumb_radius = self._thumb_radius 92 | track_radius = self._track_radius 93 | 94 | # Get widget dimensions 95 | width = self.width() - 2 * margin 96 | height = self.height() - 2 * margin 97 | 98 | # Draw track 99 | track_brush = QBrush(self._track_active_color if checked else self._track_color) 100 | track_pen = QPen(Qt.PenStyle.NoPen) 101 | 102 | p.setBrush(track_brush) 103 | p.setPen(track_pen) 104 | p.setOpacity(track_opacity) 105 | 106 | p.drawRoundedRect(margin, margin, width, height, track_radius, track_radius) 107 | 108 | # Calculate thumb position 109 | total_offset = width - 2 * thumb_radius 110 | offset = total_offset * self.offset 111 | 112 | # Draw thumb 113 | p.setBrush(QBrush(self._thumb_active_color if checked else self._thumb_color)) 114 | p.setPen(QPen(Qt.PenStyle.NoPen)) 115 | p.setOpacity(1.0) 116 | 117 | p.drawEllipse( 118 | QPointF(margin + thumb_radius + offset, margin + height / 2), 119 | thumb_radius, 120 | thumb_radius, 121 | ) 122 | 123 | # Draw pulse if animating 124 | if self._pulse_radius > 0: 125 | p.setBrush(QBrush(QColor(0, 0, 0, 0))) 126 | p.setPen(QPen(QColor(0, 0, 0, 0))) 127 | p.setOpacity(0.1) 128 | 129 | p.drawEllipse( 130 | QPointF(margin + thumb_radius + offset, margin + height / 2), 131 | self._pulse_radius, 132 | self._pulse_radius, 133 | ) 134 | 135 | p.end() 136 | 137 | # Property animations 138 | @pyqtProperty(float) 139 | def offset(self): 140 | return self._offset 141 | 142 | @offset.setter 143 | def offset(self, value): 144 | self._offset = value 145 | self.update() 146 | 147 | @pyqtProperty(float) 148 | def pulse_radius(self): 149 | return self._pulse_radius 150 | 151 | @pulse_radius.setter 152 | def pulse_radius(self, value): 153 | self._pulse_radius = value 154 | self.update() 155 | 156 | # Override the change event to handle state changes 157 | def mouseReleaseEvent(self, e): 158 | super().mouseReleaseEvent(e) 159 | 160 | if self.isEnabled(): 161 | if self.isChecked(): 162 | self.animation.setStartValue(0) 163 | self.animation.setEndValue(1) 164 | else: 165 | self.animation.setStartValue(1) 166 | self.animation.setEndValue(0) 167 | 168 | self.animations_group.start() 169 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/version.py: -------------------------------------------------------------------------------- 1 | __version__ = "2.7.8" 2 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/dlss_updater/whitelist.py: -------------------------------------------------------------------------------- 1 | import os 2 | import csv 3 | from io import StringIO 4 | import asyncio 5 | from urllib.request import urlopen 6 | from urllib.error import URLError 7 | from dlss_updater.logger import setup_logger 8 | from dlss_updater.config import config_manager 9 | 10 | logger = setup_logger() 11 | 12 | WHITELIST_URL = ( 13 | "https://raw.githubusercontent.com/Recol/DLSS-Updater-Whitelist/main/whitelist.csv" 14 | ) 15 | 16 | 17 | def fetch_whitelist(): 18 | try: 19 | with urlopen(WHITELIST_URL) as response: 20 | csv_data = StringIO(response.read().decode("utf-8")) 21 | reader = csv.reader(csv_data) 22 | return set(row[0].strip() for row in reader if row and row[0].strip()) 23 | except URLError as e: 24 | logger.error(f"Failed to fetch whitelist: {e}") 25 | return set() 26 | except csv.Error as e: 27 | logger.error(f"Failed to parse whitelist CSV: {e}") 28 | return set() 29 | 30 | 31 | WHITELISTED_GAMES = fetch_whitelist() 32 | 33 | 34 | async def is_whitelisted(game_path): 35 | """ 36 | Check if a game path matches any whitelisted games. 37 | Uses launcher pattern detection to find the actual game name. 38 | """ 39 | logger.debug(f"Checking game against whitelist: {game_path}") 40 | 41 | # Extract path components 42 | path_parts = [p for p in game_path.split(os.path.sep) if p] 43 | 44 | # Skip if the path is too short 45 | if len(path_parts) < 3: 46 | return False 47 | 48 | # Look for known launcher patterns to identify the game directory 49 | game_dir = None 50 | 51 | # Epic Games pattern: :\Epic Games\\... 52 | if "Epic Games" in path_parts: 53 | epic_index = path_parts.index("Epic Games") 54 | if epic_index + 1 < len(path_parts): 55 | game_dir = path_parts[epic_index + 1] 56 | 57 | # Steam pattern: :\\steamapps\common\\... 58 | elif "steamapps" in path_parts and "common" in path_parts: 59 | common_index = path_parts.index("common") 60 | if common_index + 1 < len(path_parts): 61 | game_dir = path_parts[common_index + 1] 62 | 63 | # EA Games pattern: :\EA Games\\... 64 | elif "EA Games" in path_parts: 65 | ea_index = path_parts.index("EA Games") 66 | if ea_index + 1 < len(path_parts): 67 | game_dir = path_parts[ea_index + 1] 68 | 69 | # GOG pattern: :\GOG Games\\... or :\GOG Galaxy\Games\\... 70 | elif "GOG Games" in path_parts: 71 | gog_index = path_parts.index("GOG Games") 72 | if gog_index + 1 < len(path_parts): 73 | game_dir = path_parts[gog_index + 1] 74 | elif "GOG Galaxy" in path_parts: 75 | gog_index = path_parts.index("GOG Galaxy") 76 | if "Games" in path_parts: 77 | # Pattern: D:\GOG Galaxy\Games\\... 78 | games_index = path_parts.index("Games") 79 | if games_index + 1 < len(path_parts): 80 | game_dir = path_parts[games_index + 1] 81 | else: 82 | # Pattern: D:\GOG Galaxy\\... 83 | if gog_index + 1 < len(path_parts): 84 | game_dir = path_parts[gog_index + 1] 85 | 86 | # Ubisoft pattern: :\Ubisoft\Ubisoft Game Launcher\games\\... 87 | elif "Ubisoft Game Launcher" in path_parts and "games" in path_parts: 88 | games_index = path_parts.index("games") 89 | if games_index + 1 < len(path_parts): 90 | game_dir = path_parts[games_index + 1] 91 | 92 | # Battle.net pattern: :\Battle.net\\... 93 | elif "Battle.net" in path_parts: 94 | battlenet_index = path_parts.index("Battle.net") 95 | if battlenet_index + 1 < len(path_parts): 96 | game_dir = path_parts[battlenet_index + 1] 97 | 98 | # Xbox pattern: :\Xbox\\... 99 | elif "Xbox" in path_parts: 100 | xbox_index = path_parts.index("Xbox") 101 | if xbox_index + 1 < len(path_parts): 102 | game_dir = path_parts[xbox_index + 1] 103 | 104 | # Fallback: Just use the parent directory if we couldn't identify the game 105 | if not game_dir: 106 | logger.debug( 107 | "Could not identify game from path patterns, using parent directory" 108 | ) 109 | game_dir = path_parts[-2] 110 | 111 | logger.debug(f"Identified game directory: {game_dir}") 112 | 113 | # Check for skip list first 114 | for game in WHITELISTED_GAMES: 115 | if config_manager.is_blacklist_skipped(game): 116 | if game.lower() == game_dir.lower(): 117 | logger.info( 118 | f"Game '{game_dir}' is in whitelist but also in skip list - allowing update" 119 | ) 120 | return False 121 | 122 | # Now check against whitelist 123 | for game in WHITELISTED_GAMES: 124 | # Skip if in skip list (already handled) 125 | if config_manager.is_blacklist_skipped(game): 126 | continue 127 | 128 | # Simple direct name comparison 129 | if game.lower() == game_dir.lower(): 130 | logger.info(f"Whitelist match found: {game_dir}") 131 | return True 132 | 133 | logger.debug(f"No whitelist match found for: {game_dir}") 134 | return False 135 | 136 | 137 | def get_all_blacklisted_games(): 138 | """Return the list of all blacklisted games for UI display""" 139 | return list(WHITELISTED_GAMES) 140 | 141 | async def check_whitelist_batch(game_paths): 142 | """Check multiple game paths against whitelist in parallel""" 143 | tasks = [] 144 | for path in game_paths: 145 | task = asyncio.create_task(is_whitelisted(path)) 146 | tasks.append((path, task)) 147 | 148 | results = {} 149 | for path, task in tasks: 150 | try: 151 | results[path] = await task 152 | except Exception as e: 153 | logger.error(f"Error checking whitelist for {path}: {e}") 154 | results[path] = False 155 | 156 | return results -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/icons/battlenet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/battlenet.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/icons/dlss_updater.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/dlss_updater.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/icons/dlss_updater_full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/dlss_updater_full.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/icons/ea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/ea.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/icons/epic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/epic.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/icons/gog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/gog.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/icons/reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/reset.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/icons/steam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/steam.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/icons/ubisoft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/ubisoft.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/icons/update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/update.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/icons/xbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/xbox.png -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/libcrypto-3.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/libcrypto-3.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/libffi-8.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/libffi-8.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/libssl-3.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/libssl-3.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/pefile-2023.2.7.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/pefile-2023.2.7.dist-info/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2004-2023 Ero Carrera 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/pefile-2023.2.7.dist-info/METADATA: -------------------------------------------------------------------------------- 1 | Metadata-Version: 2.1 2 | Name: pefile 3 | Version: 2023.2.7 4 | Summary: Python PE parsing module 5 | Home-page: https://github.com/erocarrera/pefile 6 | Download-URL: https://github.com/erocarrera/pefile/releases/download/v2023.2.7/pefile-2023.2.7.tar.gz 7 | Author: Ero Carrera 8 | Author-email: ero.carrera@gmail.com 9 | License: MIT 10 | Keywords: pe,exe,dll,pefile,pecoff 11 | Classifier: Development Status :: 5 - Production/Stable 12 | Classifier: Intended Audience :: Developers 13 | Classifier: Intended Audience :: Science/Research 14 | Classifier: Natural Language :: English 15 | Classifier: Operating System :: OS Independent 16 | Classifier: Programming Language :: Python 17 | Classifier: Topic :: Software Development :: Libraries :: Python Modules 18 | Requires-Python: >=3.6.0 19 | License-File: LICENSE 20 | 21 | pefile, Portable Executable reader module 22 | 23 | All the PE file basic structures are available with their default names as 24 | attributes of the instance returned. 25 | 26 | Processed elements such as the import table are made available with lowercase 27 | names, to differentiate them from the upper case basic structure names. 28 | 29 | pefile has been tested against many edge cases such as corrupted and malformed 30 | PEs as well as malware, which often attempts to abuse the format way beyond its 31 | standard use. To the best of my knowledge most of the abuse is handled 32 | gracefully. 33 | 34 | Copyright (c) 2005-2023 Ero Carrera 35 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/pefile-2023.2.7.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | __pycache__/pefile.cpython-313.pyc,, 2 | __pycache__/peutils.cpython-313.pyc,, 3 | ordlookup/__init__.py,sha256=qV325Dvqk9HYGlF2BXkjSAU8NiAqGk9wg6bcGA7DMCY,784 4 | ordlookup/__pycache__/__init__.cpython-313.pyc,, 5 | ordlookup/__pycache__/oleaut32.cpython-313.pyc,, 6 | ordlookup/__pycache__/ws2_32.cpython-313.pyc,, 7 | ordlookup/oleaut32.py,sha256=g0bNcHLRuH_nW75xqZbtZZNWTrOVBbdEV8W7vxz0Ouc,10877 8 | ordlookup/ws2_32.py,sha256=gy-Vnrt6yVmzN8sbqLQESaNwFnZ2ojh4LsiAq5IDruA,3265 9 | pefile-2023.2.7.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 10 | pefile-2023.2.7.dist-info/LICENSE,sha256=v9S15PipnJYf1vlNcI44OWzBRr_o-8XSqG5jqin7Qgg,1083 11 | pefile-2023.2.7.dist-info/METADATA,sha256=Nj9cLDBVi_AkWhZ26GqGr5QYbkgh4f6azj7_HX75EgQ,1352 12 | pefile-2023.2.7.dist-info/RECORD,, 13 | pefile-2023.2.7.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 14 | pefile-2023.2.7.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92 15 | pefile-2023.2.7.dist-info/top_level.txt,sha256=e_EleSuZUOQKcXHJLs2sSeGkxG4OZghULcCc_v6kQbo,25 16 | pefile.py,sha256=-ZRoz-0ZMOjpA2pL9Py5sjrLKMTlQh4hXONSpczcgR8,292005 17 | peutils.py,sha256=KmQ2JO3osgXgugJRGM__CdwNVcM3X6xzhuHucI_5v0g,18361 18 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/pefile-2023.2.7.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/pefile-2023.2.7.dist-info/REQUESTED -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/pefile-2023.2.7.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: bdist_wheel (0.37.1) 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | 6 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/pefile-2023.2.7.dist-info/top_level.txt: -------------------------------------------------------------------------------- 1 | ordlookup 2 | pefile 3 | peutils 4 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/psutil-7.0.0.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/psutil-7.0.0.dist-info/LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2009, Jay Loden, Dave Daeschler, Giampaolo Rodola 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without modification, 7 | are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | * Neither the name of the psutil authors nor the names of its contributors 17 | may be used to endorse or promote products derived from this software without 18 | specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 21 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 22 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 24 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 25 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 26 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 27 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 29 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/psutil-7.0.0.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | psutil-7.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 2 | psutil-7.0.0.dist-info/LICENSE,sha256=x63E1dEzelSLlnQh8fviWLkwM6BBdwj9b044-Oy864A,1577 3 | psutil-7.0.0.dist-info/METADATA,sha256=jEGY38opff7gdO5GOUIH8xeWXCXcGvitOIYrlUeVp8E,23136 4 | psutil-7.0.0.dist-info/RECORD,, 5 | psutil-7.0.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 6 | psutil-7.0.0.dist-info/WHEEL,sha256=-EX5DQzNGQEoyL99Q-0P0-D-CXbfqafenaAeiSQ_Ufk,100 7 | psutil-7.0.0.dist-info/top_level.txt,sha256=gCNhn57wzksDjSAISmgMJ0aiXzQulk0GJhb2-BAyYgw,7 8 | psutil/__init__.py,sha256=lvZWdYQ3W0flcZeW1vbN5QgoSHuqofXBnMxHZLzwgrU,89075 9 | psutil/__pycache__/__init__.cpython-313.pyc,, 10 | psutil/__pycache__/_common.cpython-313.pyc,, 11 | psutil/__pycache__/_psaix.cpython-313.pyc,, 12 | psutil/__pycache__/_psbsd.cpython-313.pyc,, 13 | psutil/__pycache__/_pslinux.cpython-313.pyc,, 14 | psutil/__pycache__/_psosx.cpython-313.pyc,, 15 | psutil/__pycache__/_psposix.cpython-313.pyc,, 16 | psutil/__pycache__/_pssunos.cpython-313.pyc,, 17 | psutil/__pycache__/_pswindows.cpython-313.pyc,, 18 | psutil/_common.py,sha256=tPE7YVzC0ZIBhZzYdzqOFnh-geJVALbyBY3TSAwASXw,29592 19 | psutil/_psaix.py,sha256=CFBLwUi8DR5KsDC0yCs0jlLtLf2dhhyGArAhG_udqK8,18817 20 | psutil/_psbsd.py,sha256=UXd-QXUVk_H_wbFHWt2vshcChWxBrPwn38PX0HeYXfo,32727 21 | psutil/_pslinux.py,sha256=wKT1c3HX8XhnZ8sDNX1hiKRbVj7p53ASJ6VaniKaxs4,88323 22 | psutil/_psosx.py,sha256=LwFP6AtKp2hzNWRSaSLaWHB6nh1CiKSMu_KvP5009IE,16421 23 | psutil/_psposix.py,sha256=AJxyaRPf1h8dyT9rnsF8c-psHwXEbKqaNEt3OOm4Zuk,7349 24 | psutil/_pssunos.py,sha256=B58FY4JjbfndrdmbEV7QGX6lVi0v--V-g_Hxsg958MM,25654 25 | psutil/_psutil_windows.pyd,sha256=nH_IVdnRYU5wcFx9zG9Kw83Kta3-tqZ9OC9a3gnq3BU,67072 26 | psutil/_pswindows.py,sha256=is_Cq3yMuFnqGUfpOeiU8oWzZQNWmK_-Xt7asb8YCu4,37052 27 | psutil/tests/__init__.py,sha256=tFfa1RqnPJP9UuVe-JN7sAavHVoHlmqiN0pyk3I4KI0,66129 28 | psutil/tests/__main__.py,sha256=AQDwErrSFPsBGSY5wIKmh7LziqWTAARYKEqz_zrXMTc,321 29 | psutil/tests/__pycache__/__init__.cpython-313.pyc,, 30 | psutil/tests/__pycache__/__main__.cpython-313.pyc,, 31 | psutil/tests/__pycache__/test_aix.cpython-313.pyc,, 32 | psutil/tests/__pycache__/test_bsd.cpython-313.pyc,, 33 | psutil/tests/__pycache__/test_connections.cpython-313.pyc,, 34 | psutil/tests/__pycache__/test_contracts.cpython-313.pyc,, 35 | psutil/tests/__pycache__/test_linux.cpython-313.pyc,, 36 | psutil/tests/__pycache__/test_memleaks.cpython-313.pyc,, 37 | psutil/tests/__pycache__/test_misc.cpython-313.pyc,, 38 | psutil/tests/__pycache__/test_osx.cpython-313.pyc,, 39 | psutil/tests/__pycache__/test_posix.cpython-313.pyc,, 40 | psutil/tests/__pycache__/test_process.cpython-313.pyc,, 41 | psutil/tests/__pycache__/test_process_all.cpython-313.pyc,, 42 | psutil/tests/__pycache__/test_scripts.cpython-313.pyc,, 43 | psutil/tests/__pycache__/test_sunos.cpython-313.pyc,, 44 | psutil/tests/__pycache__/test_system.cpython-313.pyc,, 45 | psutil/tests/__pycache__/test_testutils.cpython-313.pyc,, 46 | psutil/tests/__pycache__/test_unicode.cpython-313.pyc,, 47 | psutil/tests/__pycache__/test_windows.cpython-313.pyc,, 48 | psutil/tests/test_aix.py,sha256=M84ZfM1EeSDRyzrf404JGu5zy_ErRn5MK3t3yT11lz0,4550 49 | psutil/tests/test_bsd.py,sha256=GRbzguegV7K2m-O4dQJlUJGh7M7UH9fI8jvE2UjFOks,20784 50 | psutil/tests/test_connections.py,sha256=1D4HEQl_bZfZbk_4g-hc4rnrDqUD7q42rb9aIoJ1Amc,21723 51 | psutil/tests/test_contracts.py,sha256=8enorS1KmOftKyC4XTINXtnWNnmh18qFEYdLHKtrknY,12326 52 | psutil/tests/test_linux.py,sha256=Gap-GA6Bv9TfKbRupph49NwZC0vjv1V5isa5l-Eg3VY,91187 53 | psutil/tests/test_memleaks.py,sha256=yGEhTOOllW2NV-R2S5lybD2S8iO9CiS7--ND2E9rZTY,15608 54 | psutil/tests/test_misc.py,sha256=eQUmQqnh7nM0aIND_yOtgO4-Lwyspw3tgt3aWje0BPY,30545 55 | psutil/tests/test_osx.py,sha256=Y_NubjMylA88A7WAepiDkYTZl4YWvwgtCRFvu23Rm8A,6512 56 | psutil/tests/test_posix.py,sha256=yKL9N6ixiFUPNmv5v7cBS1OaoOZl-bm7hGdf7m2_M0E,17675 57 | psutil/tests/test_process.py,sha256=lmVD9FO6GJp4GZqSxR0j4Wsr7dcG8Py2qWsiv-furbY,61548 58 | psutil/tests/test_process_all.py,sha256=MfKc2BpL3pFBKqdmkq5gJ1GDD4CZzxUvesQ7sgnzzJg,18882 59 | psutil/tests/test_scripts.py,sha256=a3z4vFdBNlto_2pKe37kOPK6zVenfWzCsibduzyeO1c,7965 60 | psutil/tests/test_sunos.py,sha256=FxIAhIC3hycvJhgdVK8_98AmmV1pTZgXtovBgDmD9RA,1229 61 | psutil/tests/test_system.py,sha256=gi5Mci_pL5za6Q1Wp3nOv4J6Bj7L-IeM76rR5-1rFZk,37086 62 | psutil/tests/test_testutils.py,sha256=IUc3mMHGKGdnPpf_mhMWbDq0UDK9sXI4DZZ2dwujS7A,18915 63 | psutil/tests/test_unicode.py,sha256=kH08SGFmi0bxnL-LHEA7JX0fwauGPvY9W3zfkQumgTw,10705 64 | psutil/tests/test_windows.py,sha256=Zpg4Ek9KHkloYHpgHtHIrYBDXIgSf8HppSWcgWgogWE,34128 65 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/psutil-7.0.0.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/psutil-7.0.0.dist-info/REQUESTED -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/psutil-7.0.0.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: bdist_wheel (0.42.0) 3 | Root-Is-Purelib: false 4 | Tag: cp37-abi3-win_amd64 5 | 6 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/psutil-7.0.0.dist-info/top_level.txt: -------------------------------------------------------------------------------- 1 | psutil 2 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/psutil/_psutil_windows.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/psutil/_psutil_windows.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/pyexpat.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/pyexpat.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/python3.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/python3.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/python313.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/python313.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/pywin32_system32/pywintypes313.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/pywin32_system32/pywintypes313.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/release_notes.txt: -------------------------------------------------------------------------------- 1 | Version 2.6.4: 2 | Performance improvements for scanning directories. 3 | Rewrite of scanning subdirectories. 4 | There is now an output of the results in a box. 5 | Removal of the full banner from the GUI. 6 | 7 | Version 2.6.5: 8 | Updates the DLSS files to DLSS 4.0. 9 | Use at your own discretion :). 10 | 11 | Version 2.6.6: 12 | Bug fix for FG/RR DLL's being included in the skip for <2.0.0. 13 | 14 | Version 2.6.7: 15 | Updates to the DLL's to allow for profile K (refined version of profile J) to be the default for DLSS. 16 | 17 | Version 2.6.8: 18 | Updates to the RR DLL to version 310.2.1.0. 19 | Updates the frame generation DLL to version 310.2.1.0. 20 | 21 | Version 2.7.0: 22 | Added support for XeSS DLLs (libxess.dll and libxess_dx11.dll) - version 2.0.1.41. 23 | Added support for up to 4 custom game folders. 24 | Improved auto-updater to better handle update process and cleanup. 25 | Added ability to skip specific games in the blacklist. 26 | Enhanced UI with separated sections for launcher types. 27 | Fixed bug in game name extraction for better reporting. 28 | Introduction of animations for certain components, should be better for viewability. 29 | 30 | Version 2.7.1: 31 | UI spacing fixes with the logger output. 32 | Hover bug mentioned in the prior release fixed. 33 | Removal of the maximum span width so it's possible to resize the GUI fully. 34 | Few other erronous colour fixes. 35 | 36 | Version 2.7.2: 37 | Addition of DirectStorage. 38 | Offloading of the DLL's to a separate repository to strip down the file size. 39 | Addition of a checklist to allow selection on what is updated. 40 | Implemented DLL caching to check for new DLL's. 41 | 42 | Version 2.7.3: 43 | Updated support for handling DLSS Streamline components (Reflex/DLSS Streamline/FG etc). 44 | 45 | Version 2.7.4: 46 | Introduced parallelism for allowing multiple DLL's to be upgraded at once. 47 | Bug fix for DLL cache initialisation to only happen once on booting. 48 | 49 | Version 2.7.5: 50 | Added concurrency for parallel backups at once for multiple DLL's. 51 | Removal of auto-upgrades as a deprecated feature to cleanup code, added a "Check for update" button in the GUI. 52 | Parallelism for scanning Steam directories. 53 | Introduction of custom animations to properly track the update % correctly. 54 | 55 | Version 2.7.6: 56 | Added support for updating FSR 3.1.1+ games to 3.1.4. 57 | Increases to maximum thread pool allocations. 58 | 59 | Version 2.7.7: 60 | Update to address GOG Galaxy paths being erronous for some games. 61 | 62 | Version 2.7.8: 63 | Update to separate out Streamline DLL's to be their own components, and to be switched off by default due to incompatibility with some games. -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/select.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/select.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/METADATA: -------------------------------------------------------------------------------- 1 | Metadata-Version: 2.1 2 | Name: importlib_metadata 3 | Version: 8.0.0 4 | Summary: Read metadata from Python packages 5 | Author-email: "Jason R. Coombs" 6 | Project-URL: Source, https://github.com/python/importlib_metadata 7 | Classifier: Development Status :: 5 - Production/Stable 8 | Classifier: Intended Audience :: Developers 9 | Classifier: License :: OSI Approved :: Apache Software License 10 | Classifier: Programming Language :: Python :: 3 11 | Classifier: Programming Language :: Python :: 3 :: Only 12 | Requires-Python: >=3.8 13 | Description-Content-Type: text/x-rst 14 | License-File: LICENSE 15 | Requires-Dist: zipp >=0.5 16 | Requires-Dist: typing-extensions >=3.6.4 ; python_version < "3.8" 17 | Provides-Extra: doc 18 | Requires-Dist: sphinx >=3.5 ; extra == 'doc' 19 | Requires-Dist: jaraco.packaging >=9.3 ; extra == 'doc' 20 | Requires-Dist: rst.linker >=1.9 ; extra == 'doc' 21 | Requires-Dist: furo ; extra == 'doc' 22 | Requires-Dist: sphinx-lint ; extra == 'doc' 23 | Requires-Dist: jaraco.tidelift >=1.4 ; extra == 'doc' 24 | Provides-Extra: perf 25 | Requires-Dist: ipython ; extra == 'perf' 26 | Provides-Extra: test 27 | Requires-Dist: pytest !=8.1.*,>=6 ; extra == 'test' 28 | Requires-Dist: pytest-checkdocs >=2.4 ; extra == 'test' 29 | Requires-Dist: pytest-cov ; extra == 'test' 30 | Requires-Dist: pytest-mypy ; extra == 'test' 31 | Requires-Dist: pytest-enabler >=2.2 ; extra == 'test' 32 | Requires-Dist: pytest-ruff >=0.2.1 ; extra == 'test' 33 | Requires-Dist: packaging ; extra == 'test' 34 | Requires-Dist: pyfakefs ; extra == 'test' 35 | Requires-Dist: flufl.flake8 ; extra == 'test' 36 | Requires-Dist: pytest-perf >=0.9.2 ; extra == 'test' 37 | Requires-Dist: jaraco.test >=5.4 ; extra == 'test' 38 | Requires-Dist: importlib-resources >=1.3 ; (python_version < "3.9") and extra == 'test' 39 | 40 | .. image:: https://img.shields.io/pypi/v/importlib_metadata.svg 41 | :target: https://pypi.org/project/importlib_metadata 42 | 43 | .. image:: https://img.shields.io/pypi/pyversions/importlib_metadata.svg 44 | 45 | .. image:: https://github.com/python/importlib_metadata/actions/workflows/main.yml/badge.svg 46 | :target: https://github.com/python/importlib_metadata/actions?query=workflow%3A%22tests%22 47 | :alt: tests 48 | 49 | .. image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json 50 | :target: https://github.com/astral-sh/ruff 51 | :alt: Ruff 52 | 53 | .. image:: https://readthedocs.org/projects/importlib-metadata/badge/?version=latest 54 | :target: https://importlib-metadata.readthedocs.io/en/latest/?badge=latest 55 | 56 | .. image:: https://img.shields.io/badge/skeleton-2024-informational 57 | :target: https://blog.jaraco.com/skeleton 58 | 59 | .. image:: https://tidelift.com/badges/package/pypi/importlib-metadata 60 | :target: https://tidelift.com/subscription/pkg/pypi-importlib-metadata?utm_source=pypi-importlib-metadata&utm_medium=readme 61 | 62 | Library to access the metadata for a Python package. 63 | 64 | This package supplies third-party access to the functionality of 65 | `importlib.metadata `_ 66 | including improvements added to subsequent Python versions. 67 | 68 | 69 | Compatibility 70 | ============= 71 | 72 | New features are introduced in this third-party library and later merged 73 | into CPython. The following table indicates which versions of this library 74 | were contributed to different versions in the standard library: 75 | 76 | .. list-table:: 77 | :header-rows: 1 78 | 79 | * - importlib_metadata 80 | - stdlib 81 | * - 7.0 82 | - 3.13 83 | * - 6.5 84 | - 3.12 85 | * - 4.13 86 | - 3.11 87 | * - 4.6 88 | - 3.10 89 | * - 1.4 90 | - 3.8 91 | 92 | 93 | Usage 94 | ===== 95 | 96 | See the `online documentation `_ 97 | for usage details. 98 | 99 | `Finder authors 100 | `_ can 101 | also add support for custom package installers. See the above documentation 102 | for details. 103 | 104 | 105 | Caveats 106 | ======= 107 | 108 | This project primarily supports third-party packages installed by PyPA 109 | tools (or other conforming packages). It does not support: 110 | 111 | - Packages in the stdlib. 112 | - Packages installed without metadata. 113 | 114 | Project details 115 | =============== 116 | 117 | * Project home: https://github.com/python/importlib_metadata 118 | * Report bugs at: https://github.com/python/importlib_metadata/issues 119 | * Code hosting: https://github.com/python/importlib_metadata 120 | * Documentation: https://importlib-metadata.readthedocs.io/ 121 | 122 | For Enterprise 123 | ============== 124 | 125 | Available as part of the Tidelift Subscription. 126 | 127 | This project and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use. 128 | 129 | `Learn more `_. 130 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | importlib_metadata-8.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 2 | importlib_metadata-8.0.0.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358 3 | importlib_metadata-8.0.0.dist-info/METADATA,sha256=anuQ7_7h4J1bSEzfcjIBakPi2cyVQ7y7jklLHsBeH1k,4648 4 | importlib_metadata-8.0.0.dist-info/RECORD,, 5 | importlib_metadata-8.0.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 6 | importlib_metadata-8.0.0.dist-info/WHEEL,sha256=mguMlWGMX-VHnMpKOjjQidIo1ssRlCFu4a4mBpz1s2M,91 7 | importlib_metadata-8.0.0.dist-info/top_level.txt,sha256=CO3fD9yylANiXkrMo4qHLV_mqXL2sC5JFKgt1yWAT-A,19 8 | importlib_metadata/__init__.py,sha256=tZNB-23h8Bixi9uCrQqj9Yf0aeC--Josdy3IZRIQeB0,33798 9 | importlib_metadata/__pycache__/__init__.cpython-312.pyc,, 10 | importlib_metadata/__pycache__/_adapters.cpython-312.pyc,, 11 | importlib_metadata/__pycache__/_collections.cpython-312.pyc,, 12 | importlib_metadata/__pycache__/_compat.cpython-312.pyc,, 13 | importlib_metadata/__pycache__/_functools.cpython-312.pyc,, 14 | importlib_metadata/__pycache__/_itertools.cpython-312.pyc,, 15 | importlib_metadata/__pycache__/_meta.cpython-312.pyc,, 16 | importlib_metadata/__pycache__/_text.cpython-312.pyc,, 17 | importlib_metadata/__pycache__/diagnose.cpython-312.pyc,, 18 | importlib_metadata/_adapters.py,sha256=rIhWTwBvYA1bV7i-5FfVX38qEXDTXFeS5cb5xJtP3ks,2317 19 | importlib_metadata/_collections.py,sha256=CJ0OTCHIjWA0ZIVS4voORAsn2R4R2cQBEtPsZEJpASY,743 20 | importlib_metadata/_compat.py,sha256=73QKrN9KNoaZzhbX5yPCCZa-FaALwXe8TPlDR72JgBU,1314 21 | importlib_metadata/_functools.py,sha256=PsY2-4rrKX4RVeRC1oGp1lB1pmC9eKN88_f-bD9uOoA,2895 22 | importlib_metadata/_itertools.py,sha256=cvr_2v8BRbxcIl5x5ldfqdHjhI8Yi8s8yk50G_nm6jQ,2068 23 | importlib_metadata/_meta.py,sha256=nxZ7C8GVlcBFAKWyVOn_dn7ot_twBcbm1NmvjIetBHI,1801 24 | importlib_metadata/_text.py,sha256=HCsFksZpJLeTP3NEk_ngrAeXVRRtTrtyh9eOABoRP4A,2166 25 | importlib_metadata/compat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 26 | importlib_metadata/compat/__pycache__/__init__.cpython-312.pyc,, 27 | importlib_metadata/compat/__pycache__/py311.cpython-312.pyc,, 28 | importlib_metadata/compat/__pycache__/py39.cpython-312.pyc,, 29 | importlib_metadata/compat/py311.py,sha256=uqm-K-uohyj1042TH4a9Er_I5o7667DvulcD-gC_fSA,608 30 | importlib_metadata/compat/py39.py,sha256=cPkMv6-0ilK-0Jw_Tkn0xYbOKJZc4WJKQHow0c2T44w,1102 31 | importlib_metadata/diagnose.py,sha256=nkSRMiowlmkhLYhKhvCg9glmt_11Cox-EmLzEbqYTa8,379 32 | importlib_metadata/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 33 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/REQUESTED -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: setuptools (70.1.1) 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | 6 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/top_level.txt: -------------------------------------------------------------------------------- 1 | importlib_metadata 2 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/setuptools/_vendor/jaraco/text/Lorem ipsum.txt: -------------------------------------------------------------------------------- 1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 2 | Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque. Aliquam faucibus, elit ut dictum aliquet, felis nisl adipiscing sapien, sed malesuada diam lacus eget erat. Cras mollis scelerisque nunc. Nullam arcu. Aliquam consequat. Curabitur augue lorem, dapibus quis, laoreet et, pretium ac, nisi. Aenean magna nisl, mollis quis, molestie eu, feugiat in, orci. In hac habitasse platea dictumst. 3 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/setuptools/_vendor/wheel-0.45.1.dist-info/INSTALLER: -------------------------------------------------------------------------------- 1 | pip 2 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/setuptools/_vendor/wheel-0.45.1.dist-info/LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2012 Daniel Holth and contributors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a 6 | copy of this software and associated documentation files (the "Software"), 7 | to deal in the Software without restriction, including without limitation 8 | the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 | and/or sell copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included 13 | in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 | THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 19 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 20 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 21 | OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/setuptools/_vendor/wheel-0.45.1.dist-info/METADATA: -------------------------------------------------------------------------------- 1 | Metadata-Version: 2.3 2 | Name: wheel 3 | Version: 0.45.1 4 | Summary: A built-package format for Python 5 | Keywords: wheel,packaging 6 | Author-email: Daniel Holth 7 | Maintainer-email: Alex Grönholm 8 | Requires-Python: >=3.8 9 | Description-Content-Type: text/x-rst 10 | Classifier: Development Status :: 5 - Production/Stable 11 | Classifier: Intended Audience :: Developers 12 | Classifier: Topic :: System :: Archiving :: Packaging 13 | Classifier: License :: OSI Approved :: MIT License 14 | Classifier: Programming Language :: Python 15 | Classifier: Programming Language :: Python :: 3 :: Only 16 | Classifier: Programming Language :: Python :: 3.8 17 | Classifier: Programming Language :: Python :: 3.9 18 | Classifier: Programming Language :: Python :: 3.10 19 | Classifier: Programming Language :: Python :: 3.11 20 | Classifier: Programming Language :: Python :: 3.12 21 | Requires-Dist: pytest >= 6.0.0 ; extra == "test" 22 | Requires-Dist: setuptools >= 65 ; extra == "test" 23 | Project-URL: Changelog, https://wheel.readthedocs.io/en/stable/news.html 24 | Project-URL: Documentation, https://wheel.readthedocs.io/ 25 | Project-URL: Issue Tracker, https://github.com/pypa/wheel/issues 26 | Project-URL: Source, https://github.com/pypa/wheel 27 | Provides-Extra: test 28 | 29 | wheel 30 | ===== 31 | 32 | This is a command line tool for manipulating Python wheel files, as defined in 33 | `PEP 427`_. It contains the following functionality: 34 | 35 | * Convert ``.egg`` archives into ``.whl`` 36 | * Unpack wheel archives 37 | * Repack wheel archives 38 | * Add or remove tags in existing wheel archives 39 | 40 | .. _PEP 427: https://www.python.org/dev/peps/pep-0427/ 41 | 42 | Historical note 43 | --------------- 44 | 45 | This project used to contain the implementation of the setuptools_ ``bdist_wheel`` 46 | command, but as of setuptools v70.1, it no longer needs ``wheel`` installed for that to 47 | work. Thus, you should install this **only** if you intend to use the ``wheel`` command 48 | line tool! 49 | 50 | .. _setuptools: https://pypi.org/project/setuptools/ 51 | 52 | Documentation 53 | ------------- 54 | 55 | The documentation_ can be found on Read The Docs. 56 | 57 | .. _documentation: https://wheel.readthedocs.io/ 58 | 59 | Code of Conduct 60 | --------------- 61 | 62 | Everyone interacting in the wheel project's codebases, issue trackers, chat 63 | rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_. 64 | 65 | .. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md 66 | 67 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/setuptools/_vendor/wheel-0.45.1.dist-info/RECORD: -------------------------------------------------------------------------------- 1 | ../../bin/wheel,sha256=pBhV19bQIgjS-r541fG3kLU6QtcyKaKdQ2RE9YIzeiU,249 2 | wheel-0.45.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 3 | wheel-0.45.1.dist-info/LICENSE.txt,sha256=MMI2GGeRCPPo6h0qZYx8pBe9_IkcmO8aifpP8MmChlQ,1107 4 | wheel-0.45.1.dist-info/METADATA,sha256=mKz84H7m7jsxJyzeIcTVORiTb0NPMV39KvOIYhGgmjA,2313 5 | wheel-0.45.1.dist-info/RECORD,, 6 | wheel-0.45.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 7 | wheel-0.45.1.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82 8 | wheel-0.45.1.dist-info/entry_points.txt,sha256=rTY1BbkPHhkGMm4Q3F0pIzJBzW2kMxoG1oriffvGdA0,104 9 | wheel/__init__.py,sha256=mrxMnvdXACur_LWegbUfh5g5ysWZrd63UJn890wvGNk,59 10 | wheel/__main__.py,sha256=NkMUnuTCGcOkgY0IBLgBCVC_BGGcWORx2K8jYGS12UE,455 11 | wheel/__pycache__/__init__.cpython-311.pyc,, 12 | wheel/__pycache__/__main__.cpython-311.pyc,, 13 | wheel/__pycache__/_bdist_wheel.cpython-311.pyc,, 14 | wheel/__pycache__/_setuptools_logging.cpython-311.pyc,, 15 | wheel/__pycache__/bdist_wheel.cpython-311.pyc,, 16 | wheel/__pycache__/macosx_libfile.cpython-311.pyc,, 17 | wheel/__pycache__/metadata.cpython-311.pyc,, 18 | wheel/__pycache__/util.cpython-311.pyc,, 19 | wheel/__pycache__/wheelfile.cpython-311.pyc,, 20 | wheel/_bdist_wheel.py,sha256=UghCQjSH_pVfcZh6oRjzSw_TQhcf3anSx1OkiLSL82M,21694 21 | wheel/_setuptools_logging.py,sha256=-5KC-lne0ilOUWIDfOkqapUWGMFZhuKYDIavIZiB5kM,781 22 | wheel/bdist_wheel.py,sha256=tpf9WufiSO1RuEMg5oPhIfSG8DMziCZ_4muCKF69Cqo,1107 23 | wheel/cli/__init__.py,sha256=Npq6_jKi03dhIcRnmbuFhwviVJxwO0tYEnEhWMv9cJo,4402 24 | wheel/cli/__pycache__/__init__.cpython-311.pyc,, 25 | wheel/cli/__pycache__/convert.cpython-311.pyc,, 26 | wheel/cli/__pycache__/pack.cpython-311.pyc,, 27 | wheel/cli/__pycache__/tags.cpython-311.pyc,, 28 | wheel/cli/__pycache__/unpack.cpython-311.pyc,, 29 | wheel/cli/convert.py,sha256=Bi0ntEXb9nTllCxWeTRQ4j-nPs3szWSEKipG_GgnMkQ,12634 30 | wheel/cli/pack.py,sha256=CAFcHdBVulvsHYJlndKVO7KMI9JqBTZz5ii0PKxxCOs,3103 31 | wheel/cli/tags.py,sha256=lHw-LaWrkS5Jy_qWcw-6pSjeNM6yAjDnqKI3E5JTTCU,4760 32 | wheel/cli/unpack.py,sha256=Y_J7ynxPSoFFTT7H0fMgbBlVErwyDGcObgme5MBuz58,1021 33 | wheel/macosx_libfile.py,sha256=k1x7CE3LPtOVGqj6NXQ1nTGYVPaeRrhVzUG_KPq3zDs,16572 34 | wheel/metadata.py,sha256=JC4p7jlQZu2bUTAQ2fevkqLjg_X6gnNyRhLn6OUO1tc,6171 35 | wheel/util.py,sha256=aL7aibHwYUgfc8WlolL5tXdkV4DatbJxZHb1kwHFJAU,423 36 | wheel/vendored/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 37 | wheel/vendored/__pycache__/__init__.cpython-311.pyc,, 38 | wheel/vendored/packaging/LICENSE,sha256=ytHvW9NA1z4HS6YU0m996spceUDD2MNIUuZcSQlobEg,197 39 | wheel/vendored/packaging/LICENSE.APACHE,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174 40 | wheel/vendored/packaging/LICENSE.BSD,sha256=tw5-m3QvHMb5SLNMFqo5_-zpQZY2S8iP8NIYDwAo-sU,1344 41 | wheel/vendored/packaging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 42 | wheel/vendored/packaging/__pycache__/__init__.cpython-311.pyc,, 43 | wheel/vendored/packaging/__pycache__/_elffile.cpython-311.pyc,, 44 | wheel/vendored/packaging/__pycache__/_manylinux.cpython-311.pyc,, 45 | wheel/vendored/packaging/__pycache__/_musllinux.cpython-311.pyc,, 46 | wheel/vendored/packaging/__pycache__/_parser.cpython-311.pyc,, 47 | wheel/vendored/packaging/__pycache__/_structures.cpython-311.pyc,, 48 | wheel/vendored/packaging/__pycache__/_tokenizer.cpython-311.pyc,, 49 | wheel/vendored/packaging/__pycache__/markers.cpython-311.pyc,, 50 | wheel/vendored/packaging/__pycache__/requirements.cpython-311.pyc,, 51 | wheel/vendored/packaging/__pycache__/specifiers.cpython-311.pyc,, 52 | wheel/vendored/packaging/__pycache__/tags.cpython-311.pyc,, 53 | wheel/vendored/packaging/__pycache__/utils.cpython-311.pyc,, 54 | wheel/vendored/packaging/__pycache__/version.cpython-311.pyc,, 55 | wheel/vendored/packaging/_elffile.py,sha256=hbmK8OD6Z7fY6hwinHEUcD1by7czkGiNYu7ShnFEk2k,3266 56 | wheel/vendored/packaging/_manylinux.py,sha256=P7sdR5_7XBY09LVYYPhHmydMJIIwPXWsh4olk74Uuj4,9588 57 | wheel/vendored/packaging/_musllinux.py,sha256=z1s8To2hQ0vpn_d-O2i5qxGwEK8WmGlLt3d_26V7NeY,2674 58 | wheel/vendored/packaging/_parser.py,sha256=4tT4emSl2qTaU7VTQE1Xa9o1jMPCsBezsYBxyNMUN-s,10347 59 | wheel/vendored/packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431 60 | wheel/vendored/packaging/_tokenizer.py,sha256=alCtbwXhOFAmFGZ6BQ-wCTSFoRAJ2z-ysIf7__MTJ_k,5292 61 | wheel/vendored/packaging/markers.py,sha256=_TSPI1BhJYO7Bp9AzTmHQxIqHEVXaTjmDh9G-w8qzPA,8232 62 | wheel/vendored/packaging/requirements.py,sha256=dgoBeVprPu2YE6Q8nGfwOPTjATHbRa_ZGLyXhFEln6Q,2933 63 | wheel/vendored/packaging/specifiers.py,sha256=IWSt0SrLSP72heWhAC8UL0eGvas7XIQHjqiViVfmPKE,39778 64 | wheel/vendored/packaging/tags.py,sha256=fedHXiOHkBxNZTXotXv8uXPmMFU9ae-TKBujgYHigcA,18950 65 | wheel/vendored/packaging/utils.py,sha256=XgdmP3yx9-wQEFjO7OvMj9RjEf5JlR5HFFR69v7SQ9E,5268 66 | wheel/vendored/packaging/version.py,sha256=PFJaYZDxBgyxkfYhH3SQw4qfE9ICCWrTmitvq14y3bs,16234 67 | wheel/vendored/vendor.txt,sha256=Z2ENjB1i5prfez8CdM1Sdr3c6Zxv2rRRolMpLmBncAE,16 68 | wheel/wheelfile.py,sha256=USCttNlJwafxt51YYFFKG7jnxz8dfhbyqAZL6jMTA9s,8411 69 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/setuptools/_vendor/wheel-0.45.1.dist-info/REQUESTED: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/setuptools/_vendor/wheel-0.45.1.dist-info/REQUESTED -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/setuptools/_vendor/wheel-0.45.1.dist-info/WHEEL: -------------------------------------------------------------------------------- 1 | Wheel-Version: 1.0 2 | Generator: flit 3.10.1 3 | Root-Is-Purelib: true 4 | Tag: py3-none-any 5 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/setuptools/_vendor/wheel-0.45.1.dist-info/entry_points.txt: -------------------------------------------------------------------------------- 1 | [console_scripts] 2 | wheel=wheel.cli:main 3 | 4 | [distutils.commands] 5 | bdist_wheel=wheel.bdist_wheel:bdist_wheel 6 | 7 | -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/ucrtbase.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/ucrtbase.dll -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/unicodedata.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/unicodedata.pyd -------------------------------------------------------------------------------- /dist/DLSS_Updater/_internal/win32/win32api.pyd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/win32/win32api.pyd -------------------------------------------------------------------------------- /dlss_updater/__init__.py: -------------------------------------------------------------------------------- 1 | from .scanner import ( 2 | get_steam_install_path, 3 | get_steam_libraries, 4 | find_dlls, 5 | find_all_dlls_sync, 6 | ) 7 | from .updater import update_dll 8 | from .whitelist import is_whitelisted 9 | from .version import __version__ 10 | from .config import resource_path, initialize_dll_paths, config_manager 11 | from .logger import setup_logger 12 | from .constants import DLL_TYPE_MAP, DLL_GROUPS 13 | from .lib.threading_lib import ThreadManager, WorkerSignals 14 | 15 | # We rename find_dlss_dlls to find_dlls and keep it for backward compatibility 16 | find_dlss_dlls = find_dlls 17 | 18 | # Let's export find_all_dlls_sync instead of the async version 19 | find_all_dlss_dlls = find_all_dlls_sync 20 | 21 | # Don't initialize DLL paths at import time anymore 22 | # This will be done explicitly after admin check 23 | LATEST_DLL_PATHS = {} 24 | 25 | __all__ = [ 26 | "get_steam_install_path", 27 | "get_steam_libraries", 28 | "find_dlss_dlls", 29 | "find_all_dlss_dlls", 30 | "update_dll", 31 | "is_whitelisted", 32 | "__version__", 33 | "LATEST_DLL_PATHS", 34 | "resource_path", 35 | "setup_logger", 36 | "DLL_TYPE_MAP", 37 | "DLL_GROUPS", 38 | "ThreadManager", 39 | "WorkerSignals", 40 | "config_manager", 41 | ] 42 | -------------------------------------------------------------------------------- /dlss_updater/auto_updater.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import json 3 | from urllib import request 4 | from urllib.error import URLError 5 | from packaging import version 6 | from dlss_updater.version import __version__ 7 | from dlss_updater.logger import setup_logger 8 | 9 | logger = setup_logger() 10 | 11 | GITHUB_API_URL = "https://api.github.com/repos/Recol/DLSS-Updater/releases/latest" 12 | GITHUB_RELEASES_URL = "https://github.com/Recol/DLSS-Updater/releases/latest" 13 | 14 | 15 | def check_for_updates(): 16 | """ 17 | Check for available updates by comparing versions. 18 | Returns (latest_version, is_update_available) tuple or (None, False) if check fails. 19 | """ 20 | try: 21 | logger.info("Checking for updates...") 22 | with request.urlopen(GITHUB_API_URL) as response: 23 | latest_release = json.loads(response.read().decode()) 24 | latest_version = latest_release["tag_name"].lstrip("Vv") 25 | 26 | if version.parse(latest_version) > version.parse(__version__): 27 | logger.info(f"New version available: {latest_version}") 28 | return latest_version, True 29 | else: 30 | logger.info("You have the latest version.") 31 | return latest_version, False 32 | except URLError as e: 33 | logger.error(f"Error checking for updates: {e}") 34 | return None, False 35 | except Exception as e: 36 | logger.error(f"Unexpected error checking for updates: {e}") 37 | return None, False 38 | 39 | 40 | def get_releases_url(): 41 | """Get the URL to the GitHub releases page""" 42 | return GITHUB_RELEASES_URL -------------------------------------------------------------------------------- /dlss_updater/constants.py: -------------------------------------------------------------------------------- 1 | DLL_TYPE_MAP = { 2 | "nvngx_dlss.dll": "DLSS DLL", 3 | "nvngx_dlssg.dll": "DLSS Frame Generation DLL", 4 | "nvngx_dlssd.dll": "DLSS Ray Reconstruction DLL", 5 | "libxess.dll": "XeSS DLL", 6 | "libxess_dx11.dll": "XeSS DX11 DLL", 7 | "dstorage.dll": "DirectStorage DLL", 8 | "dstoragecore.dll": "DirectStorage Core DLL", 9 | "sl.common.dll": "Streamline Shared Library DLL", 10 | "sl.dlss.dll": "Streamline DLSS Super Resolution DLL", 11 | "sl.dlss_g.dll": "Streamline DLSS Frame Generation DLL", 12 | "sl.interposer.dll": "Streamline Graphics API Interception DLL", 13 | "sl.pcl.dll": "Streamline Parameter/Platform Configuration DLL", 14 | "sl.reflex.dll": "Streamline Reflex Low-Latency DLL", 15 | "amd_fidelityfx_vk.dll": "AMD FidelityFX Super Resolution (FSR) Vulkan DLL", 16 | "amd_fidelityfx_dx12.dll": "AMD FidelityFX Super Resolution (FSR) DirectX 12 DLL", 17 | } 18 | 19 | 20 | DLL_GROUPS = { 21 | "DLSS": [ 22 | "nvngx_dlss.dll", 23 | "nvngx_dlssg.dll", 24 | "nvngx_dlssd.dll", 25 | ], 26 | "Streamline": [ 27 | "sl.common.dll", 28 | "sl.dlss.dll", 29 | "sl.dlss_g.dll", 30 | "sl.interposer.dll", 31 | "sl.pcl.dll", 32 | "sl.reflex.dll", 33 | ], 34 | "XeSS": [ 35 | "libxess.dll", 36 | "libxess_dx11.dll", 37 | ], 38 | "DirectStorage": [ 39 | "dstorage.dll", 40 | "dstoragecore.dll", 41 | ], 42 | "FSR": [ 43 | "amd_fidelityfx_vk.dll", 44 | "amd_fidelityfx_dx12.dll", 45 | ], 46 | } -------------------------------------------------------------------------------- /dlss_updater/dll_repository.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | import requests 4 | from .logger import setup_logger 5 | import concurrent.futures 6 | from .config import initialize_dll_paths 7 | 8 | logger = setup_logger() 9 | 10 | # Configuration 11 | GITHUB_DLL_REPO = "Recol/DLSS-Updater-DLLs" 12 | GITHUB_API_BASE = f"https://api.github.com/repos/{GITHUB_DLL_REPO}" 13 | GITHUB_RAW_BASE = f"https://raw.githubusercontent.com/{GITHUB_DLL_REPO}/main" 14 | DLL_MANIFEST_URL = f"{GITHUB_RAW_BASE}/manifest.json" 15 | LOCAL_DLL_CACHE_DIR = os.path.join( 16 | os.path.expanduser("~"), ".dlss_updater", "dll_cache" 17 | ) 18 | 19 | 20 | def ensure_cache_dir(): 21 | """Ensure local cache directory exists""" 22 | os.makedirs(LOCAL_DLL_CACHE_DIR, exist_ok=True) 23 | 24 | 25 | def get_local_dll_path(dll_name): 26 | """Get path to cached DLL, download if newer version exists""" 27 | ensure_cache_dir() 28 | local_path = os.path.join(LOCAL_DLL_CACHE_DIR, dll_name) 29 | 30 | # If it doesn't exist locally, try to download 31 | if not os.path.exists(local_path): 32 | if download_latest_dll(dll_name): 33 | return local_path 34 | else: 35 | logger.error(f"Failed to download {dll_name} and no local copy exists") 36 | return None 37 | 38 | # Check for updates 39 | if check_for_dll_update(dll_name): 40 | download_latest_dll(dll_name) 41 | 42 | return local_path 43 | 44 | 45 | def get_remote_manifest(): 46 | """Fetch the remote DLL manifest""" 47 | try: 48 | response = requests.get(DLL_MANIFEST_URL, timeout=10) 49 | response.raise_for_status() 50 | return response.json() 51 | except Exception as e: 52 | logger.error(f"Failed to fetch DLL manifest: {e}") 53 | return None 54 | 55 | 56 | def get_cached_manifest(): 57 | """Get the cached manifest if available""" 58 | manifest_path = os.path.join(LOCAL_DLL_CACHE_DIR, "manifest.json") 59 | if os.path.exists(manifest_path): 60 | try: 61 | with open(manifest_path, "r") as f: 62 | return json.load(f) 63 | except Exception as e: 64 | logger.error(f"Failed to read cached manifest: {e}") 65 | return None 66 | 67 | 68 | def update_cached_manifest(manifest): 69 | """Update the cached manifest""" 70 | manifest_path = os.path.join(LOCAL_DLL_CACHE_DIR, "manifest.json") 71 | try: 72 | with open(manifest_path, "w") as f: 73 | json.dump(manifest, f, indent=2) 74 | return True 75 | except Exception as e: 76 | logger.error(f"Failed to update cached manifest: {e}") 77 | return False 78 | 79 | 80 | def check_for_dll_update(dll_name): 81 | """Check if a newer version of the DLL is available""" 82 | # Import parse_version and get_dll_version inside the function 83 | from .updater import get_dll_version, parse_version 84 | 85 | local_path = os.path.join(LOCAL_DLL_CACHE_DIR, dll_name) 86 | if not os.path.exists(local_path): 87 | logger.info(f"No local copy of {dll_name} exists, download needed") 88 | return True # No local copy, need to download 89 | 90 | local_version = get_dll_version(local_path) 91 | if not local_version: 92 | logger.info( 93 | f"Could not determine version of local {dll_name}, assuming update needed" 94 | ) 95 | return True # Can't determine local version, assume update needed 96 | 97 | # Get remote version info 98 | manifest = get_remote_manifest() or get_cached_manifest() 99 | if not manifest: 100 | logger.warning("No manifest available, can't check for updates") 101 | return False 102 | 103 | if dll_name not in manifest: 104 | logger.warning(f"{dll_name} not found in manifest") 105 | return False 106 | 107 | remote_version = manifest[dll_name]["version"] 108 | 109 | # Compare versions with better error handling 110 | try: 111 | local_parsed = parse_version(local_version) 112 | remote_parsed = parse_version(remote_version) 113 | 114 | # Add detailed logging for debugging 115 | logger.info( 116 | f"Comparing versions for {dll_name}: local={local_version} ({local_parsed}) remote={remote_version} ({remote_parsed})" 117 | ) 118 | 119 | if remote_parsed > local_parsed: 120 | logger.info( 121 | f"Update available for {dll_name}: {local_version} -> {remote_version}" 122 | ) 123 | return True 124 | else: 125 | logger.info( 126 | f"{dll_name} is up to date (local: {local_version}, remote: {remote_version})" 127 | ) 128 | return False 129 | except Exception as e: 130 | logger.error(f"Version comparison error for {dll_name}: {e}") 131 | # Assume update needed if we can't compare versions safely 132 | logger.info( 133 | f"Assuming update needed for {dll_name} due to version comparison error" 134 | ) 135 | return True 136 | 137 | 138 | def download_latest_dll(dll_name): 139 | """Download the latest version of a DLL""" 140 | manifest = get_remote_manifest() 141 | if not manifest: 142 | logger.error("Failed to fetch manifest, cannot download DLL") 143 | return False 144 | 145 | if dll_name not in manifest: 146 | logger.error(f"{dll_name} not found in manifest") 147 | return False 148 | 149 | # Get download URL from manifest 150 | dll_info = manifest[dll_name] 151 | download_url = f"{GITHUB_RAW_BASE}/dlls/{dll_name}" 152 | 153 | # Download the DLL 154 | local_path = os.path.join(LOCAL_DLL_CACHE_DIR, dll_name) 155 | try: 156 | response = requests.get(download_url, stream=True, timeout=30) 157 | response.raise_for_status() 158 | 159 | # Save to temp file first, then rename to avoid partial downloads 160 | temp_path = f"{local_path}.tmp" 161 | with open(temp_path, "wb") as f: 162 | for chunk in response.iter_content(chunk_size=8192): 163 | f.write(chunk) 164 | 165 | # Replace existing file 166 | if os.path.exists(local_path): 167 | os.remove(local_path) 168 | os.rename(temp_path, local_path) 169 | 170 | logger.info(f"Successfully downloaded {dll_name} v{dll_info['version']}") 171 | return True 172 | except Exception as e: 173 | logger.error(f"Failed to download {dll_name}: {e}") 174 | return False 175 | 176 | 177 | _cache_initialized = False 178 | 179 | 180 | def initialize_dll_cache(): 181 | """Initialize the DLL cache on application startup - parallel version""" 182 | global _cache_initialized 183 | 184 | if _cache_initialized: 185 | logger.debug("DLL cache already initialized, skipping") 186 | return 187 | 188 | logger.info("Initializing DLL cache") 189 | ensure_cache_dir() 190 | 191 | # Fetch latest manifest 192 | manifest = get_remote_manifest() 193 | if manifest: 194 | update_cached_manifest(manifest) 195 | 196 | # Check all DLLs for updates in parallel 197 | with concurrent.futures.ThreadPoolExecutor(max_workers=8) as executor: 198 | future_to_dll = {} 199 | 200 | for dll_name in manifest: 201 | if check_for_dll_update(dll_name): 202 | logger.info( 203 | f"Updating {dll_name} to version {manifest[dll_name]['version']}" 204 | ) 205 | future = executor.submit(download_latest_dll, dll_name) 206 | future_to_dll[future] = dll_name 207 | else: 208 | logger.info(f"{dll_name} is up to date") 209 | 210 | # Wait for all downloads to complete 211 | for future in concurrent.futures.as_completed(future_to_dll): 212 | dll_name = future_to_dll[future] 213 | try: 214 | success = future.result() 215 | if not success: 216 | logger.error(f"Failed to download {dll_name}") 217 | except Exception as e: 218 | logger.error(f"Error downloading {dll_name}: {e}") 219 | else: 220 | logger.warning("Using cached manifest, updates may not be available") 221 | 222 | # Initialize DLL paths after cache initialization 223 | initialize_dll_paths() 224 | _cache_initialized = True 225 | -------------------------------------------------------------------------------- /dlss_updater/icons/battlenet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/battlenet.png -------------------------------------------------------------------------------- /dlss_updater/icons/dlss_updater.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/dlss_updater.ico -------------------------------------------------------------------------------- /dlss_updater/icons/dlss_updater.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/dlss_updater.png -------------------------------------------------------------------------------- /dlss_updater/icons/dlss_updater_full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/dlss_updater_full.png -------------------------------------------------------------------------------- /dlss_updater/icons/ea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/ea.png -------------------------------------------------------------------------------- /dlss_updater/icons/epic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/epic.png -------------------------------------------------------------------------------- /dlss_updater/icons/gog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/gog.png -------------------------------------------------------------------------------- /dlss_updater/icons/reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/reset.png -------------------------------------------------------------------------------- /dlss_updater/icons/steam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/steam.png -------------------------------------------------------------------------------- /dlss_updater/icons/ubisoft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/ubisoft.png -------------------------------------------------------------------------------- /dlss_updater/icons/update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/update.png -------------------------------------------------------------------------------- /dlss_updater/icons/xbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/xbox.png -------------------------------------------------------------------------------- /dlss_updater/lib/threading_lib.py: -------------------------------------------------------------------------------- 1 | from PyQt6.QtCore import QThreadPool, QRunnable, pyqtSignal, QObject 2 | 3 | 4 | class WorkerSignals(QObject): 5 | """Signals available from a running worker thread.""" 6 | 7 | finished = pyqtSignal() 8 | result = pyqtSignal(object) 9 | error = pyqtSignal(tuple) 10 | progress = pyqtSignal(int) 11 | 12 | 13 | class Worker(QRunnable): 14 | """ 15 | Worker thread for running background tasks. 16 | 17 | Inherits from QRunnable for better thread pool management. 18 | """ 19 | 20 | def __init__(self, fn, progress_callback=None, *args, **kwargs): 21 | super().__init__() 22 | 23 | # Store constructor arguments (re-used for processing) 24 | self.fn = fn 25 | self.args = args 26 | self.kwargs = kwargs 27 | 28 | # Create signals for communication 29 | self.signals = WorkerSignals() 30 | 31 | # Store progress callback if provided 32 | self.progress_callback = progress_callback 33 | if self.progress_callback: 34 | self.signals.progress.connect(self.progress_callback) 35 | 36 | # Add an option to stop the worker if needed 37 | self.is_running = True 38 | 39 | def run(self): 40 | """ 41 | Initialise the runner function with passed args, kwargs. 42 | 43 | Automatic handling of different function signatures and return values. 44 | """ 45 | try: 46 | # Pass the signals to the function if it accepts them 47 | if "progress_signal" in self.kwargs: 48 | self.kwargs["progress_signal"] = self.signals.progress 49 | 50 | # Retrieve args/kwargs here; and fire processing using them 51 | result = self.fn(*self.args, **self.kwargs) 52 | except Exception as e: 53 | # If function raised an exception, capture it 54 | import traceback 55 | 56 | # Package the exception details 57 | exctype = type(e) 58 | value = str(e) 59 | tb = traceback.format_exc() 60 | 61 | # If still running, emit the error signal 62 | if self.is_running: 63 | self.signals.error.emit((exctype, value, tb)) 64 | else: 65 | # If function successfully completed, emit result 66 | if self.is_running: 67 | if result is not None: 68 | self.signals.result.emit(result) 69 | finally: 70 | # Always emit finished signal 71 | if self.is_running: 72 | self.signals.finished.emit() 73 | 74 | def stop(self): 75 | """Set the running state to False to prevent further signal emissions.""" 76 | self.is_running = False 77 | 78 | 79 | class ThreadManager: 80 | """ 81 | Manages thread pool and worker creation for background tasks. 82 | 83 | Provides a simplified interface for running functions in a thread pool. 84 | """ 85 | 86 | def __init__(self, parent=None): 87 | # Create a thread pool 88 | self.thread_pool = QThreadPool() 89 | 90 | # Set up maximum thread count (adjust as needed) 91 | self.thread_pool.setMaxThreadCount(8) 92 | 93 | # Store the current worker 94 | self.current_worker = None 95 | 96 | # Store the parent (optional) 97 | self.parent = parent 98 | 99 | # Signals to be connected from the current worker 100 | self.signals = None 101 | 102 | def assign_function(self, func, *args, **kwargs): 103 | """ 104 | Assign a function to be run in a background thread. 105 | 106 | Stops any existing worker before creating a new one. 107 | """ 108 | # Stop any existing worker 109 | if self.current_worker: 110 | self.current_worker.stop() 111 | 112 | # Create a new worker 113 | worker = Worker(func, *args, **kwargs) 114 | 115 | # Store the current worker 116 | self.current_worker = worker 117 | 118 | # Update signals reference 119 | self.signals = worker.signals 120 | 121 | def run(self): 122 | """ 123 | Run the currently assigned worker in the thread pool. 124 | 125 | Adds the worker to the thread pool for execution. 126 | """ 127 | if self.current_worker: 128 | # Add worker to thread pool 129 | self.thread_pool.start(self.current_worker) 130 | 131 | def waitForDone(self): 132 | """ 133 | Wait for all threads in the pool to complete. 134 | 135 | Useful for clean shutdown of the application. 136 | """ 137 | # Stop current worker if exists 138 | if self.current_worker: 139 | self.current_worker.stop() 140 | 141 | # Wait for thread pool to finish 142 | self.thread_pool.waitForDone() 143 | -------------------------------------------------------------------------------- /dlss_updater/logger.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import sys 3 | from pathlib import Path 4 | from PyQt6.QtCore import QObject, pyqtSignal, Qt 5 | from PyQt6.QtWidgets import QTextBrowser 6 | 7 | 8 | class QLoggerLevelSignal(QObject): 9 | """Signals for the Logger QTextBrowser derived class.""" 10 | debug = pyqtSignal() 11 | info = pyqtSignal() 12 | warning = pyqtSignal() 13 | error = pyqtSignal() 14 | 15 | 16 | class LoggerWindow(QTextBrowser): 17 | """A QTextBrowser subclass that have signals and a dict for ease of access to said signals.""" 18 | def __init__(self, parent=None): 19 | super().__init__(parent) 20 | self.signals = QLoggerLevelSignal() 21 | self.signals_to_emit = { 22 | "DEBUG": self.signals.debug, 23 | "INFO": self.signals.info, 24 | "WARNING": self.signals.warning, 25 | "ERROR": self.signals.error, 26 | } 27 | # Set document max size to prevent memory issues with very large logs 28 | self.document().setMaximumBlockCount(5000) # Limit to last 5000 lines 29 | # Set text browser properties 30 | self.setReadOnly(True) 31 | self.setOpenExternalLinks(False) 32 | # Enable smooth scrolling 33 | self.verticalScrollBar().setSingleStep(2) 34 | 35 | 36 | class QLogger(logging.Handler, QObject): 37 | """Logger handler for the Qt GUI""" 38 | # Define the signal as a class attribute 39 | logMessage = pyqtSignal(str, str) 40 | 41 | def __init__(self, text_browser): 42 | logging.Handler.__init__(self) 43 | QObject.__init__(self) # Initialize QObject 44 | 45 | self.text_browser = text_browser 46 | self.colors_dict = { 47 | "DEBUG": "white", 48 | "INFO": "green", 49 | "WARNING": "yellow", 50 | "ERROR": "red", 51 | } 52 | # Connect the signal to the slot method 53 | self.logMessage.connect(self.write_log, Qt.ConnectionType.QueuedConnection) 54 | 55 | def emit(self, record): 56 | """ 57 | Logs the record to the text browser object. 58 | @param record: LogRecord object to log. 59 | """ 60 | msg = self.format(record) 61 | # Emit the signal with levelname and formatted message 62 | self.logMessage.emit(record.levelname, msg) 63 | 64 | def write_log(self, levelname, msg): 65 | """Write the log message to the text browser in the main thread.""" 66 | color = self.colors_dict[levelname] 67 | formatted_msg = f'{msg}' 68 | self.text_browser.signals_to_emit[levelname].emit() 69 | self.text_browser.append(formatted_msg) 70 | # Scroll to bottom 71 | scrollbar = self.text_browser.verticalScrollBar() 72 | scrollbar.setValue(scrollbar.maximum()) 73 | 74 | 75 | def setup_logger(log_file_name="dlss_updater.log"): 76 | """ 77 | Setups the initial logger. 78 | param: log_file_name: filename to be used for the logfile. 79 | return: logger instance created. 80 | """ 81 | logger = logging.getLogger("DLSSUpdater") 82 | 83 | # Check if the logger has already been configured 84 | if not logger.handlers: 85 | logger.setLevel(logging.DEBUG) 86 | 87 | log_file_path = ( 88 | Path(sys.executable).parent / log_file_name 89 | if getattr(sys, "frozen", False) 90 | else Path(__file__).parent / log_file_name 91 | ) 92 | 93 | # Create handlers 94 | console_handler = logging.StreamHandler(sys.stdout) 95 | file_handler = logging.FileHandler(log_file_path, encoding="utf-8") 96 | 97 | # Create formatter and add it to handlers 98 | log_format = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") 99 | console_handler.setFormatter(log_format) 100 | file_handler.setFormatter(log_format) 101 | 102 | # Add handlers to the logger 103 | logger.addHandler(console_handler) 104 | logger.addHandler(file_handler) 105 | 106 | # Prevent propagation to avoid duplicate logs 107 | logger.propagate = False 108 | 109 | return logger 110 | 111 | 112 | def add_qt_handler(logger_to_extend, text_browser): 113 | """ 114 | Add a QTextBrowser handler to an existing logger instance. 115 | @param: logger_to_extend: logger instance to be extended. 116 | @param: text_browser: QTextBrowser instance to be added as a logger. 117 | """ 118 | # Remove any existing QLogger handlers 119 | for handler in logger_to_extend.handlers[:]: 120 | if isinstance(handler, QLogger): 121 | logger_to_extend.removeHandler(handler) 122 | 123 | # Create a new QLogger handler 124 | text_browser_handler = QLogger(text_browser) 125 | formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") 126 | text_browser_handler.setFormatter(formatter) 127 | logger_to_extend.addHandler(text_browser_handler) 128 | 129 | 130 | # Usage example 131 | if __name__ == "__main__": 132 | logger = setup_logger() 133 | logger.info("This is a test log message") 134 | logger.info("This is a test logger.info message with an argument: %s", "test arg") -------------------------------------------------------------------------------- /dlss_updater/main_ui/animated_toggle.py: -------------------------------------------------------------------------------- 1 | from PyQt6.QtCore import ( 2 | Qt, 3 | QSize, 4 | QPoint, 5 | QPointF, 6 | QRectF, 7 | QEasingCurve, 8 | QPropertyAnimation, 9 | QSequentialAnimationGroup, 10 | pyqtSlot, 11 | pyqtProperty, 12 | ) 13 | from PyQt6.QtWidgets import QCheckBox 14 | from PyQt6.QtGui import QColor, QBrush, QPaintEvent, QPen, QPainter 15 | 16 | 17 | class AnimatedToggle(QCheckBox): 18 | def __init__( 19 | self, 20 | parent=None, 21 | track_color="#888888", 22 | thumb_color="#FFFFFF", 23 | track_active_color="#2D6E88", 24 | thumb_active_color="#FFFFFF", 25 | animation_duration=120, 26 | ): 27 | super().__init__(parent) 28 | 29 | # Colors 30 | self._track_color = QColor(track_color) 31 | self._thumb_color = QColor(thumb_color) 32 | self._track_active_color = QColor(track_active_color) 33 | self._thumb_active_color = QColor(thumb_active_color) 34 | 35 | # Dimensions 36 | self._track_radius = 11 37 | self._thumb_radius = 8 38 | 39 | # Animation 40 | self._animation_duration = animation_duration 41 | self._margin = max(0, self._thumb_radius - self._track_radius) 42 | self._offset = 0 43 | self._pulse_radius = 0 44 | 45 | # Setup animations 46 | self.animation = QPropertyAnimation(self, b"offset") 47 | self.animation.setEasingCurve(QEasingCurve.Type.InOutCubic) 48 | self.animation.setDuration(self._animation_duration) 49 | 50 | self.pulse_animation = QPropertyAnimation(self, b"pulse_radius") 51 | self.pulse_animation.setDuration(self._animation_duration) 52 | self.pulse_animation.setEasingCurve(QEasingCurve.Type.InOutCubic) 53 | 54 | self.animations_group = QSequentialAnimationGroup() 55 | self.animations_group.addAnimation(self.animation) 56 | self.animations_group.addAnimation(self.pulse_animation) 57 | 58 | # Setup initial state 59 | self.setFixedSize( 60 | self._track_radius * 4 + self._margin * 2, 61 | self._track_radius * 2 + self._margin * 2, 62 | ) 63 | self.setCursor(Qt.CursorShape.PointingHandCursor) 64 | 65 | def sizeHint(self): 66 | return QSize( 67 | 4 * self._track_radius + 2 * self._margin, 68 | 2 * self._track_radius + 2 * self._margin, 69 | ) 70 | 71 | def hitButton(self, pos: QPoint): 72 | return self.contentsRect().contains(pos) 73 | 74 | @pyqtSlot(int) 75 | def setChecked(self, checked): 76 | super().setChecked(checked) 77 | self.offset = 1 if checked else 0 78 | 79 | def paintEvent(self, e: QPaintEvent): 80 | # Set up painter 81 | p = QPainter(self) 82 | p.setRenderHint(QPainter.RenderHint.Antialiasing) 83 | 84 | # Get current state 85 | checked = self.isChecked() 86 | enabled = self.isEnabled() 87 | 88 | # Calculate sizes 89 | track_opacity = 0.6 if enabled else 0.3 90 | margin = self._margin 91 | thumb_radius = self._thumb_radius 92 | track_radius = self._track_radius 93 | 94 | # Get widget dimensions 95 | width = self.width() - 2 * margin 96 | height = self.height() - 2 * margin 97 | 98 | # Draw track 99 | track_brush = QBrush(self._track_active_color if checked else self._track_color) 100 | track_pen = QPen(Qt.PenStyle.NoPen) 101 | 102 | p.setBrush(track_brush) 103 | p.setPen(track_pen) 104 | p.setOpacity(track_opacity) 105 | 106 | p.drawRoundedRect(margin, margin, width, height, track_radius, track_radius) 107 | 108 | # Calculate thumb position 109 | total_offset = width - 2 * thumb_radius 110 | offset = total_offset * self.offset 111 | 112 | # Draw thumb 113 | p.setBrush(QBrush(self._thumb_active_color if checked else self._thumb_color)) 114 | p.setPen(QPen(Qt.PenStyle.NoPen)) 115 | p.setOpacity(1.0) 116 | 117 | p.drawEllipse( 118 | QPointF(margin + thumb_radius + offset, margin + height / 2), 119 | thumb_radius, 120 | thumb_radius, 121 | ) 122 | 123 | # Draw pulse if animating 124 | if self._pulse_radius > 0: 125 | p.setBrush(QBrush(QColor(0, 0, 0, 0))) 126 | p.setPen(QPen(QColor(0, 0, 0, 0))) 127 | p.setOpacity(0.1) 128 | 129 | p.drawEllipse( 130 | QPointF(margin + thumb_radius + offset, margin + height / 2), 131 | self._pulse_radius, 132 | self._pulse_radius, 133 | ) 134 | 135 | p.end() 136 | 137 | # Property animations 138 | @pyqtProperty(float) 139 | def offset(self): 140 | return self._offset 141 | 142 | @offset.setter 143 | def offset(self, value): 144 | self._offset = value 145 | self.update() 146 | 147 | @pyqtProperty(float) 148 | def pulse_radius(self): 149 | return self._pulse_radius 150 | 151 | @pulse_radius.setter 152 | def pulse_radius(self, value): 153 | self._pulse_radius = value 154 | self.update() 155 | 156 | # Override the change event to handle state changes 157 | def mouseReleaseEvent(self, e): 158 | super().mouseReleaseEvent(e) 159 | 160 | if self.isEnabled(): 161 | if self.isChecked(): 162 | self.animation.setStartValue(0) 163 | self.animation.setEndValue(1) 164 | else: 165 | self.animation.setStartValue(1) 166 | self.animation.setEndValue(0) 167 | 168 | self.animations_group.start() 169 | -------------------------------------------------------------------------------- /dlss_updater/version.py: -------------------------------------------------------------------------------- 1 | __version__ = "2.7.8" 2 | -------------------------------------------------------------------------------- /dlss_updater/whitelist.py: -------------------------------------------------------------------------------- 1 | import os 2 | import csv 3 | from io import StringIO 4 | import asyncio 5 | from urllib.request import urlopen 6 | from urllib.error import URLError 7 | from dlss_updater.logger import setup_logger 8 | from dlss_updater.config import config_manager 9 | 10 | logger = setup_logger() 11 | 12 | WHITELIST_URL = ( 13 | "https://raw.githubusercontent.com/Recol/DLSS-Updater-Whitelist/main/whitelist.csv" 14 | ) 15 | 16 | 17 | def fetch_whitelist(): 18 | try: 19 | with urlopen(WHITELIST_URL) as response: 20 | csv_data = StringIO(response.read().decode("utf-8")) 21 | reader = csv.reader(csv_data) 22 | return set(row[0].strip() for row in reader if row and row[0].strip()) 23 | except URLError as e: 24 | logger.error(f"Failed to fetch whitelist: {e}") 25 | return set() 26 | except csv.Error as e: 27 | logger.error(f"Failed to parse whitelist CSV: {e}") 28 | return set() 29 | 30 | 31 | WHITELISTED_GAMES = fetch_whitelist() 32 | 33 | 34 | async def is_whitelisted(game_path): 35 | """ 36 | Check if a game path matches any whitelisted games. 37 | Uses launcher pattern detection to find the actual game name. 38 | """ 39 | logger.debug(f"Checking game against whitelist: {game_path}") 40 | 41 | # Extract path components 42 | path_parts = [p for p in game_path.split(os.path.sep) if p] 43 | 44 | # Skip if the path is too short 45 | if len(path_parts) < 3: 46 | return False 47 | 48 | # Look for known launcher patterns to identify the game directory 49 | game_dir = None 50 | 51 | # Epic Games pattern: :\Epic Games\\... 52 | if "Epic Games" in path_parts: 53 | epic_index = path_parts.index("Epic Games") 54 | if epic_index + 1 < len(path_parts): 55 | game_dir = path_parts[epic_index + 1] 56 | 57 | # Steam pattern: :\\steamapps\common\\... 58 | elif "steamapps" in path_parts and "common" in path_parts: 59 | common_index = path_parts.index("common") 60 | if common_index + 1 < len(path_parts): 61 | game_dir = path_parts[common_index + 1] 62 | 63 | # EA Games pattern: :\EA Games\\... 64 | elif "EA Games" in path_parts: 65 | ea_index = path_parts.index("EA Games") 66 | if ea_index + 1 < len(path_parts): 67 | game_dir = path_parts[ea_index + 1] 68 | 69 | # GOG pattern: :\GOG Games\\... or :\GOG Galaxy\Games\\... 70 | elif "GOG Games" in path_parts: 71 | gog_index = path_parts.index("GOG Games") 72 | if gog_index + 1 < len(path_parts): 73 | game_dir = path_parts[gog_index + 1] 74 | elif "GOG Galaxy" in path_parts: 75 | gog_index = path_parts.index("GOG Galaxy") 76 | if "Games" in path_parts: 77 | # Pattern: D:\GOG Galaxy\Games\\... 78 | games_index = path_parts.index("Games") 79 | if games_index + 1 < len(path_parts): 80 | game_dir = path_parts[games_index + 1] 81 | else: 82 | # Pattern: D:\GOG Galaxy\\... 83 | if gog_index + 1 < len(path_parts): 84 | game_dir = path_parts[gog_index + 1] 85 | 86 | # Ubisoft pattern: :\Ubisoft\Ubisoft Game Launcher\games\\... 87 | elif "Ubisoft Game Launcher" in path_parts and "games" in path_parts: 88 | games_index = path_parts.index("games") 89 | if games_index + 1 < len(path_parts): 90 | game_dir = path_parts[games_index + 1] 91 | 92 | # Battle.net pattern: :\Battle.net\\... 93 | elif "Battle.net" in path_parts: 94 | battlenet_index = path_parts.index("Battle.net") 95 | if battlenet_index + 1 < len(path_parts): 96 | game_dir = path_parts[battlenet_index + 1] 97 | 98 | # Xbox pattern: :\Xbox\\... 99 | elif "Xbox" in path_parts: 100 | xbox_index = path_parts.index("Xbox") 101 | if xbox_index + 1 < len(path_parts): 102 | game_dir = path_parts[xbox_index + 1] 103 | 104 | # Fallback: Just use the parent directory if we couldn't identify the game 105 | if not game_dir: 106 | logger.debug( 107 | "Could not identify game from path patterns, using parent directory" 108 | ) 109 | game_dir = path_parts[-2] 110 | 111 | logger.debug(f"Identified game directory: {game_dir}") 112 | 113 | # Check for skip list first 114 | for game in WHITELISTED_GAMES: 115 | if config_manager.is_blacklist_skipped(game): 116 | if game.lower() == game_dir.lower(): 117 | logger.info( 118 | f"Game '{game_dir}' is in whitelist but also in skip list - allowing update" 119 | ) 120 | return False 121 | 122 | # Now check against whitelist 123 | for game in WHITELISTED_GAMES: 124 | # Skip if in skip list (already handled) 125 | if config_manager.is_blacklist_skipped(game): 126 | continue 127 | 128 | # Simple direct name comparison 129 | if game.lower() == game_dir.lower(): 130 | logger.info(f"Whitelist match found: {game_dir}") 131 | return True 132 | 133 | logger.debug(f"No whitelist match found for: {game_dir}") 134 | return False 135 | 136 | 137 | def get_all_blacklisted_games(): 138 | """Return the list of all blacklisted games for UI display""" 139 | return list(WHITELISTED_GAMES) 140 | 141 | async def check_whitelist_batch(game_paths): 142 | """Check multiple game paths against whitelist in parallel""" 143 | tasks = [] 144 | for path in game_paths: 145 | task = asyncio.create_task(is_whitelisted(path)) 146 | tasks.append((path, task)) 147 | 148 | results = {} 149 | for path, task in tasks: 150 | try: 151 | results[path] = await task 152 | except Exception as e: 153 | logger.error(f"Error checking whitelist for {path}: {e}") 154 | results[path] = False 155 | 156 | return results -------------------------------------------------------------------------------- /hooks/hook-dlss_updater.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import collect_submodules, collect_data_files 2 | 3 | hiddenimports = collect_submodules('dlss_updater') 4 | datas = collect_data_files('dlss_updater') -------------------------------------------------------------------------------- /hooks/hook-pefile.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import copy_metadata 2 | 3 | datas = copy_metadata('pefile') 4 | -------------------------------------------------------------------------------- /hooks/hook-psutil.py: -------------------------------------------------------------------------------- 1 | from PyInstaller.utils.hooks import copy_metadata 2 | 3 | datas = copy_metadata('psutil') 4 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | from dlss_updater.utils import * 2 | from dlss_updater.logger import setup_logger 3 | from dlss_updater.main_ui.main_window import MainWindow 4 | from PyQt6.QtWidgets import QApplication 5 | import os 6 | import sys 7 | 8 | logger = setup_logger() 9 | 10 | # Add the directory containing the executable to sys.path 11 | if getattr(sys, "frozen", False): 12 | application_path = os.path.dirname(sys.executable) 13 | sys.path.insert(0, application_path) 14 | 15 | 16 | def main(): 17 | try: 18 | if gui_mode: 19 | log_file = os.path.join(os.path.dirname(sys.executable), "dlss_updater.log") 20 | sys.stdout = sys.stderr = open(log_file, "w") 21 | # Run the application with Qt GUI 22 | main_ui = QApplication(sys.argv) 23 | main_window = MainWindow(logger) 24 | main_window.show() 25 | main_window.get_current_settings() 26 | sys.exit(main_ui.exec()) 27 | except Exception as e: 28 | logger.error(f"Critical error starting application: {e}") 29 | import traceback 30 | 31 | logger.error(traceback.format_exc()) 32 | input("Press Enter to exit...") # Wait for user input before exiting 33 | 34 | 35 | if __name__ == "__main__": 36 | # Remove auto-update cleanup - no longer needed 37 | # Remove check_update_completion and check_update_error calls 38 | 39 | gui_mode = "--gui" in sys.argv 40 | logger.debug("Python executable: %s", sys.executable) 41 | logger.debug("sys.path: %s", sys.path) 42 | logger.info("DLSS Updater started") 43 | 44 | if not check_dependencies(): 45 | sys.exit(1) 46 | 47 | # Check for admin rights and request if needed 48 | if not is_admin(): 49 | logger.info("Requesting administrator privileges...") 50 | run_as_admin() 51 | sys.exit(0) # Exit after requesting admin privileges 52 | else: 53 | # Initialize DLL cache ONLY after we have admin privileges 54 | logger.debug("Starting DLL cache initialization after admin check") 55 | from dlss_updater.dll_repository import initialize_dll_cache 56 | from dlss_updater.config import initialize_dll_paths 57 | from dlss_updater import LATEST_DLL_PATHS 58 | 59 | initialize_dll_cache() 60 | # Update the global LATEST_DLL_PATHS 61 | LATEST_DLL_PATHS.update(initialize_dll_paths()) 62 | 63 | logger.debug("DLL cache initialization completed") 64 | main() 65 | -------------------------------------------------------------------------------- /release_notes.txt: -------------------------------------------------------------------------------- 1 | Version 2.6.4: 2 | Performance improvements for scanning directories. 3 | Rewrite of scanning subdirectories. 4 | There is now an output of the results in a box. 5 | Removal of the full banner from the GUI. 6 | 7 | Version 2.6.5: 8 | Updates the DLSS files to DLSS 4.0. 9 | Use at your own discretion :). 10 | 11 | Version 2.6.6: 12 | Bug fix for FG/RR DLL's being included in the skip for <2.0.0. 13 | 14 | Version 2.6.7: 15 | Updates to the DLL's to allow for profile K (refined version of profile J) to be the default for DLSS. 16 | 17 | Version 2.6.8: 18 | Updates to the RR DLL to version 310.2.1.0. 19 | Updates the frame generation DLL to version 310.2.1.0. 20 | 21 | Version 2.7.0: 22 | Added support for XeSS DLLs (libxess.dll and libxess_dx11.dll) - version 2.0.1.41. 23 | Added support for up to 4 custom game folders. 24 | Improved auto-updater to better handle update process and cleanup. 25 | Added ability to skip specific games in the blacklist. 26 | Enhanced UI with separated sections for launcher types. 27 | Fixed bug in game name extraction for better reporting. 28 | Introduction of animations for certain components, should be better for viewability. 29 | 30 | Version 2.7.1: 31 | UI spacing fixes with the logger output. 32 | Hover bug mentioned in the prior release fixed. 33 | Removal of the maximum span width so it's possible to resize the GUI fully. 34 | Few other erronous colour fixes. 35 | 36 | Version 2.7.2: 37 | Addition of DirectStorage. 38 | Offloading of the DLL's to a separate repository to strip down the file size. 39 | Addition of a checklist to allow selection on what is updated. 40 | Implemented DLL caching to check for new DLL's. 41 | 42 | Version 2.7.3: 43 | Updated support for handling DLSS Streamline components (Reflex/DLSS Streamline/FG etc). 44 | 45 | Version 2.7.4: 46 | Introduced parallelism for allowing multiple DLL's to be upgraded at once. 47 | Bug fix for DLL cache initialisation to only happen once on booting. 48 | 49 | Version 2.7.5: 50 | Added concurrency for parallel backups at once for multiple DLL's. 51 | Removal of auto-upgrades as a deprecated feature to cleanup code, added a "Check for update" button in the GUI. 52 | Parallelism for scanning Steam directories. 53 | Introduction of custom animations to properly track the update % correctly. 54 | 55 | Version 2.7.6: 56 | Added support for updating FSR 3.1.1+ games to 3.1.4. 57 | Increases to maximum thread pool allocations. 58 | 59 | Version 2.7.7: 60 | Update to address GOG Galaxy paths being erronous for some games. 61 | 62 | Version 2.7.8: 63 | Update to separate out Streamline DLL's to be their own components, and to be switched off by default due to incompatibility with some games. -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | pefile 2 | psutil 3 | packaging 4 | pywin32 5 | appdirs 6 | PyQt6 7 | pyinstaller 8 | requests -------------------------------------------------------------------------------- /tools/chocolateyInstall.ps1: -------------------------------------------------------------------------------- 1 | $toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)" 2 | $fileLocation = Join-Path $toolsDir 'DLSS_Updater.exe' 3 | 4 | # Create a shortcut that runs as admin 5 | $shortcutPath = Join-Path ([Environment]::GetFolderPath("Desktop")) "DLSS Updater.lnk" 6 | $shell = New-Object -ComObject WScript.Shell 7 | $shortcut = $shell.CreateShortcut($shortcutPath) 8 | $shortcut.TargetPath = $fileLocation 9 | $shortcut.Arguments = "--gui" 10 | $shortcut.Save() 11 | 12 | # Set the shortcut to run as administrator 13 | $bytes = [System.IO.File]::ReadAllBytes($shortcutPath) 14 | $bytes[0x15] = $bytes[0x15] -bor 0x20 # Set run as administrator flag 15 | [System.IO.File]::WriteAllBytes($shortcutPath, $bytes) 16 | 17 | $packageArgs = @{ 18 | packageName = $env:ChocolateyPackageName 19 | fileType = 'exe' 20 | file = $fileLocation 21 | softwareName = 'DLSS Updater*' 22 | silentArgs = "--gui" 23 | validExitCodes= @(0) 24 | # Force running as admin 25 | requireAdmin = $true 26 | } -------------------------------------------------------------------------------- /tools/chocolateyUninstall.ps1: -------------------------------------------------------------------------------- 1 | $shortcutPath = Join-Path ([Environment]::GetFolderPath("Desktop")) "DLSS Updater.lnk" 2 | if (Test-Path $shortcutPath) { 3 | Remove-Item $shortcutPath -Force 4 | } 5 | 6 | $packageArgs = @{ 7 | packageName = $env:ChocolateyPackageName 8 | softwareName = 'DLSS Updater*' 9 | fileType = 'exe' 10 | } -------------------------------------------------------------------------------- /version.svg: -------------------------------------------------------------------------------- 1 | version: 2.7.8version2.7.8 -------------------------------------------------------------------------------- /version.txt: -------------------------------------------------------------------------------- 1 | VSVersionInfo( 2 | ffi=FixedFileInfo( 3 | filevers=(2, 2, 6, 0), 4 | prodvers=(2, 2, 6, 0), 5 | mask=0x3f, 6 | flags=0x0, 7 | OS=0x4, 8 | fileType=0x1, 9 | subtype=0x0, 10 | date=(0, 0) 11 | ), 12 | kids=[ 13 | StringFileInfo([ 14 | StringTable( 15 | u'040904B0', 16 | [StringStruct(u'CompanyName', u'Deco'), 17 | StringStruct(u'FileDescription', u'DLSS Updater'), 18 | StringStruct(u'FileVersion', u'2.4.3'), 19 | StringStruct(u'InternalName', u'DLSS_Updater'), 20 | StringStruct(u'LegalCopyright', u'Copyright (c) Deco'), 21 | StringStruct(u'OriginalFilename', u'DLSS_Updater.exe'), 22 | StringStruct(u'ProductName', u'DLSS Updater'), 23 | StringStruct(u'ProductVersion', u'2.7.8')]) 24 | ]), 25 | VarFileInfo([VarStruct(u'Translation', [1033, 1200])]) 26 | ] 27 | ) --------------------------------------------------------------------------------