{"id":19140668,"url":"https://github.com/palexdev/enbmanager","last_synced_at":"2025-09-08T21:32:04.164Z","repository":{"id":176130967,"uuid":"654238968","full_name":"palexdev/ENBManager","owner":"palexdev","description":null,"archived":false,"fork":false,"pushed_at":"2023-06-18T13:35:09.000Z","size":620,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-09T07:50:29.617Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/palexdev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-15T17:21:36.000Z","updated_at":"2024-05-07T18:22:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"6db63b63-5c7d-44f7-9423-cb8c4bfbb3e1","html_url":"https://github.com/palexdev/ENBManager","commit_stats":null,"previous_names":["palexdev/enbmanager"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/palexdev/ENBManager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/palexdev%2FENBManager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/palexdev%2FENBManager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/palexdev%2FENBManager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/palexdev%2FENBManager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/palexdev","download_url":"https://codeload.github.com/palexdev/ENBManager/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/palexdev%2FENBManager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274231465,"owners_count":25245625,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-08T02:00:09.813Z","response_time":121,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T07:18:23.613Z","updated_at":"2025-09-08T21:32:04.152Z","avatar_url":"https://github.com/palexdev.png","language":"Java","readme":"\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n\u003ch3 align=\"center\"\u003eENBManager\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    A cross-platform tool to manage your ENB and ReShade configurations\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/palexdev/ENBManager/wiki\"\u003e\u003cstrong\u003eExplore the docs »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/palexdev/ENBManager/issues\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/palexdev/ENBManager/issues\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\n      \u003ca href=\"#about-the-project\"\u003eAbout The Project\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#built-with\"\u003eBuilt With\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#versioning\"\u003eVersioning\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#features-and-usage\"\u003eFeatures and Usage\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#configs-and-files-detection\"\u003eConfigs and Files Detection\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#games-support\"\u003eGames Support\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#roadmap\"\u003eRoadmap\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"theming\"\u003eTheming\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#support\"\u003eSupport\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/details\u003e\n\n\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n\n## About The Project\n\n[![ENBManager][product-screenshot]](#about-the-project)\n\nFinding the best graphic configuration for your new modded journey can be quite frustrating when the possibilities are\nvast.\nENBManager wants to make your life easier, allowing to load and save ENB and ReShade configurations with just a few\nclicks.\nIts UI wants to make you conformable, it's elegant, up to modern standards, intuitive and yet rich of features.\n\nThere already are many great tools on the Nexus for the same job. Shutout to  **volvaga0** for its\namazing [ENBManager](https://www.nexusmods.com/skyrimspecialedition/mods/4143)\ntool that saved my a lot of time in the past. So you may ask: **Why?**\n\nMy tool has several advantages. One already mentioned, the UI. I'm not a designer, but I really like fiddling with '\nfrontend'\nstuff. Also, the app is cross-platform thanks to the **Java Language**, meaning that it will reliably work on all\nsupported\nOSes. A few years ago, I decided to ditch Windows once and for all, and so I transitioned to Linux on all my PCs.\nUnfortunately,\nnot all tools work great on Linux, especially the ones built with Microsoft's .NET.\n\nSo, out of need, and because I love coding, I decided to make my own tool.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n### Built With\n\n* **[Java](https://www.java.com)**\n* **[JavaFX](https://github.com/openjdk/jfx)**\n* **[MaterialFX](https://github.com/palexdev/MaterialFX)**\n* **[MFXComponents](https://github.com/palexdev/MaterialFX/tree/rewrite)**\n* **[MFXCore](https://github.com/palexdev/MaterialFX/tree/rewrite)**\n* **[MFXEffects](https://github.com/palexdev/MaterialFX/tree/rewrite)**\n* **[MFXResources](https://github.com/palexdev/MaterialFX/tree/rewrite)**\n* **[VirtualizedFX](https://github.com/palexdev/VirtualizedFX)**\n* **[markdown-javafx-renderer](https://github.com/JPro-one/markdown-javafx-renderer)**\n* **[CSSFX](https://github.com/McFoggy/cssfx)**\n* **[ScenicView](https://github.com/JonathanGiles/scenic-view)**\n* **[Inverno](https://inverno.io)**\n* **[DirectoryWatcher](https://github.com/gmethvin/directory-watcher)**\n* **[IntelliJ Idea](https://www.jetbrains.com/idea/)**\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"https://inverno.io/img/inverno_portable.svg\" width=\"240\" alt=\"\"/\u003e\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\u003cstrong\u003eShutout to the \u003ca href=\"https://inverno.io\"\u003eInverno\u003c/a\u003e framework, the one and only DI framework among many giants that made this project possible\u003c/strong\u003e\u003c/p\u003e\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- VERSIONING --\u003e\n\n## Versioning\n\nAs you may have noticed, I adopt a quite strange versioning strategy. In reality, it is a variation of the\nstandard [Semver](https://semver.org/).  \nThe version is separated in three parts:\n\n1) The first number represents the Java SDK version used to compile and run the app\n2) The second number is the MAJOR version. Changes of this number represent addition/removal of features, and in general\n   any major change to the code base\n3) The third number id the MINOR version. Changes to this number represent the fix of minor issues or the\n   addition/removal/change\n   of minor details in the codebase\n\n\u003c!-- FEATURES AND USAGE --\u003e\n\n## Features and Usage\n\nThe app's functionalities can be break down in 4 main sections:\n\n1) **Main Window:** the main window is the container/root on which the other sections will appear when switching through\n   the buttons on the sidebar. In the top left corner, there's an image showing the currently managed game. By clicking\n   on\n   that, you are allowed to change the game.\n2) **Home Section:** the home section is the view you will always see at the start of the app. Here's a table will show\n   you which files have been detected in the game's folder. Selection boxes on the left allow you to choose which files\n   to\n   back up/delete. A selection box on the left most column allows you to quickly select/deselect all the detected files.\n   On the bottom, a series of buttons allow you to perform some actions. In order, you can:\n   1) Autosize the table's columns, to make all file names fit\n   2) Refresh the detected files. When a change occur in the game directory, the table automatically updates its state,\n      so this is not needed normally. If for whatever reason the new files are not detected you can use this button to\n      force it\n   3) Save the selected files in a new named config (this is enabled only if files are selected in the table)\n   4) Delete the selected files (this is enabled only if files are selected in the table)  \n      More info on configs and files detection: [Configs and Files Detection](#configs-and-files-detection)\n3) **Repo Section:** The Repo section displays the list of saved configurations for the currently managed game.\n   Here, you can load or delete configurations and check which files are included in them.\n4) **Settings Section:** The Settings section contains app-related settings as well as settings specific to the\n   currently managed game.\n   Here, you can customize the app theme as well as change the game directory if necessary.\n   Currently, there are only two themes to choose between, adding other colors is fairly simple and I plan to do it in\n   the\n   future. Some more info here: [Theming](#theming)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- CONFIGS AND FILES DETECTION --\u003e\n\n## Configs and Files Detection\n\nFor the app to work properly there are two hard requirements:\n\n1) The OS, either Linux or Windows, MacOS is not supported as I don't think its worth it,\n   but if anyone needs it feel free to open an issue. Thanks to **Java** adding the supports is super easy.\n2) The app uses two paths, these must be present otherwise it will crash:\n   1) The `Config Directory`, a path at which configs are stored: on Windows this is at `%%APPDATA%%\\ENBManager\\Game`,\n      on Linux it is at `~/.config/ENBManager/Game`\n   2) The `Cache Directory`, a path at which cache files are stored: on Windows this is\n      at `%%APPDATA%%\\Cache\\ENBManager`,\n      on Linux it is at `~/.cache/ENBManager`\n\n(Bonus: the app stores its logs in the OS temporary directory: on Windows `...\\AppData\\Local\\Tmp`, on Linux `/tmp`)\n\n\u003cbr /\u003e\n\u003cbr /\u003e\n\nOnce the game directory is set (or changed in the settings) an automatic system will detect all the files that are\nrelated\nto ENB or ReShade. The list of files is hardcoded, but can be changed after the first startup. The list is cached in a\ntext file in the `Config Directory`. When the file is present, the names will be parsed from it, so: you can delete the\nfile\nto reset the detection system, you can alter the file to add/remove some from the detection.\n\n_I tried to include every file possible related to the two graphical extensions. I may have missed some. If that's the\ncase\nfeel free to submit an issue or contact me and I will add them._\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- GAMES SUPPORT --\u003e\n\n## Games Support\n\nAt the time of writing this, ENBManager only supports two games:\n\n1) Skyrim\n2) Skyrim Special Edition\n\nThat is because those are the only ones I'm playing. However, adding new games should be fairly simple. You can open an\nissue here on [GitHub](https://github.com/palexdev/ENBManager/issues), there is already a template for this. I\nessentially\nneed three things:\n\n1) An icon for the game, it should be a 128x128 PNG image\n2) The game's 'full' name\n3) The game's executable name\n\n\u003c!-- ROADMAP --\u003e\n\n## Roadmap\n\n- [ ] Add support for more games (need community help)\n- [ ] Add more themes\n- [ ] Add possibility to import/export configurations\n- [ ] Add multi-language support\n- [ ] Fix a bunch of minor bugs, as well as address some TODOs in the codebase\n\nSee the [open issues](https://github.com/othneildrew/Best-README-Template/issues) for a full list of proposed features (\nand known issues).\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- THEMING --\u003e\n\n## Theming\n\n_This section is for users that want to make custom themes, it will require a lot of time and patience to learn how.\nIf you don't have any of these requirements I don't recommend you investing time on it_\n\nENBManager offers a series of predefined themes that can be switched at runtime in the blink of an eye in the settings\nsection. The reality however is much more complicated.  \nThe app is built with [JavaFX](https://github.com/openjdk/jfx). For those who never heard of the framework before, in\nsynthesis, it is the successor of Swing, the old GUI toolkit of Java. The peculiarity of this framework compared to many\nothers (especially on the desktop) is that the views/components can be styled by\nusing [CSS](https://en.wikipedia.org/wiki/CSS).\nWell, to be precise, it uses a custom subset of the CSS specification, the specs can be found\nhere: [JavaFX CSS](https://openjfx.io/javadoc/20/javafx.graphics/javafx/scene/doc-files/cssref.html).\n\nIt is amazing. Customizing components is easy and fast once you understand how it works, which again, it's fairly easy\nbut time-consuming.\n\nThat said, now we can break down the app's themes in three components:\n\n1) JavaFX comes with two inbuilt themes (that kinda suck) called MODENA and CASPIAN. The first one is the latest, and\n   it's\n   a bit more modern and elegant than CASPIAN, but still pretty retro\n2) The app's components (buttons, check boxes, etc...) mostly come from libraries that wrote and maintain. In\n   particular,\n   [MaterialFX](https://github.com/palexdev/MaterialFX/tree/rewrite) (beware, the one on the `rewrite` branch!), brings\n   Material Design 3 components to JavaFX. Understanding how this works is **crucial** to make a custom theme.  \n   Themes can be found\n   here: [MFXResources](https://github.com/palexdev/MaterialFX/tree/rewrite/modules/resources/src/main/resources/io/github/palexdev/mfxresources/themes/material).\n   Every theme, exposes a set of `tokens`, in simple terms, think about them as variables that can be reused in any part\n   of the theme.\n   Themes there, are written in SCSS, don't worry, it's CSS on steroids, it is compiled to CSS anyway. This is needed\n   because like I said before\n   the JavaFX CSS implementation is limited and variables do not exist. To be precise, there are lookups for the colors,\n   but they\n   are just for the colors and nothing else. These themes, follow Google's\n   latest [Material Design Guidelines](https://m3.material.io/),\n   the cool thing is that thanks to the `tokens` systems it is super super easy to create dark themes.\n3) The app specific theme file,\n   here: [Stylesheet](https://github.com/palexdev/ENBManager/blob/main/modules/frontend/src/main/resources/io/github/palexdev/enbmanager/frontend/css/AppTheme.css)\n\nFor technical reasons not worth explaining here, the app compiles a single CSS file from the three mentioned above. Then\nthey are cached\nin the `Cache Directory` and reload from the disk if present the next time the app is started.\n\nNow, if you take a look at one of these cached themes, you may be overwhelmed by the size of it. Don't worry, you\nactually\nhave to consider only a portion of it. You have to skip all the MODENA section, and go to the MaterialFX section.\n\n**Q:** _Where?._ You may ask.  \n**A:** You can recognize this section easily as it always starts like this:\n\n```CSS\n.root {\n   -md-source: . . .;\n   -md-ref-palette . . .: . . .;\n}\n```\n\nIn this section are defined the look of every 'trivial' component such as: buttons, check boxes, toggles, popups,\netc...  \nAt the time of writing this, MaterialFX covers only so little. The thing is, the newest version is a `rewrite` of the\nold\nversion available on the `main` branch. I'm working on it, but it requires a lot of time which lately I don't have haha.\n\nThe next section is the app specific theme, it starts with:\n\n```css\n.root {\n   -red: #F44336;\n   -orange: #FF9800;\n   -yellow: #FBC02D;\n   -blue: #2196F3;\n   -green: #4CAF50;\n   -purple: #9C27B0;\n}\n```\n\nThis part specifies the look of every section of the app: Main, Home, Repo, Settings, About. As well as defining the\nlook\nof the window header, the window buttons, and customizing components that come from MaterialFX.\n\n**Q:** _Wow so many information, but how can I make my custom theme?_  \n**A:** So, you have two options:\n\n1) ENBManager implements a system that watches for any change in the cached themes. If you modify the theme file (and of\n   course\n   you have that theme currently active) upon focusing the app window you will see the changes you made. This is great\n   to\n   create personal custom themes, or to fiddle around with the theming system, see what works and what doesn't. It's a\n   great\n   learning 'tool'. This system is quite flexible, in fact you could abuse it to create a custom theme entirely from\n   scratch even.\n   **However**, keep in mind that cache files may be deleted or overwritten, so my suggestion is to always keep a backup\n   of\n   your modifications if anything happens\n2) If you want to see more colors, send me the HEX value. To be precise, I would need three colors: the primary (the one\n   you want to see),\n   the secondary and the tertiary. They should be harmonious with each other, from these three I can generate new\n   Material Design 3 themes. You can take a look at this\n   tool: [Material Design 3 Figma](https://www.figma.com/community/plugin/1034969338659738588/Material-Theme-Builder)\n\n_Anyway, explaining every little detail here would be overkill and I perfectly understand that trying to learn all of\nthis\nfor a newbie can be **a lot**, so, If you need assistance on theming, feel free to open a\nnew [Discussion](https://github.com/palexdev/ENBManager/discussions) here on GitHub._\n\n\u003c!-- CONTRIBUTING --\u003e\n\n## Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any\ncontributions you make are **greatly appreciated**.\n\nIf you have a suggestion that would make this better, please fork the repo and create a pull request. You can also\nsimply open an issue.\nDon't forget to give the project a star! Thanks again!\n\n1. Fork the Project\n2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the Branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- SUPPORT --\u003e\n\n## Support\n\nIf you like the project, and you want to show your support you can do it in various ways:\n\n1) If you feel like it, you can pay me a coffee here [PayPal](https://www.paypal.com/paypalme/alxpar404/2)\n2) Star the project here on GitHub\n3) Endorse the mod on the [Nexus](https://www.nexusmods.com/skyrimspecialedition/mods/93764)\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n\n[contributors-shield]: https://img.shields.io/github/contributors/palexdev/ENBManager.svg?style=for-the-badge\n\n[contributors-url]: https://github.com/palexdev/ENBManager/graphs/contributors\n\n[forks-shield]: https://img.shields.io/github/forks/palexdev/ENBManager.svg?style=for-the-badge\n\n[forks-url]: https://github.com/palexdev/ENBManager/network/members\n\n[stars-shield]: https://img.shields.io/github/stars/palexdev/ENBManager.svg?style=for-the-badge\n\n[stars-url]: https://github.com/palexdev/ENBManager/stargazers\n\n[issues-shield]: https://img.shields.io/github/issues/palexdev/ENBManager.svg?style=for-the-badge\n\n[issues-url]: https://github.com/palexdev/ENBManager/issues\n\n[product-screenshot]: images/main.png\n","funding_links":["https://www.paypal.com/paypalme/alxpar404/2"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpalexdev%2Fenbmanager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpalexdev%2Fenbmanager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpalexdev%2Fenbmanager/lists"}