Repository files navigation

Dark Reader for Google Chrome and Mozilla Firefox

Dark Reader screenshot

This extension inverts brightness of web pages and aims to reduce eyestrain while browsing the web. Visit Chrome Web Store and Firefox Add-ons for more info.

How to contribute

Sponsorship

Donate via Open Collective.

Translation

Improve or suggest a translation here. See the list of supported language codes.

Fixing wrong inversion

If some site is already dark, you can add it to dark-sites.config file(please, preserve alphabetical order).

If some parts of web-pages are wrongly inverted, you can specify necessary CSS selectors at dynamic-theme-fixes.config file (for Dynamic Theme mode) or inversion-fixes.config file (for Filter and Filter+ modes) (please, preserve alphabetical order by URL, use short selectors, preserve code style).

Notice that merged changes to these files are automatically delivered to all users within 15 minutes.

Using Dev Tools

  • Open Chrome Dev Tools (F12).
  • Click on element picker (top-left corner).
  • Pick wrongly inverted element.
  • Choose a selector for that element or all similar elements (e.g. if element has class="icon small" selector may look like .icon).
  • Click Dark Reader icon.
  • Click Open developer tools (at bottom).
  • Find or add a block containing URL and selectors to invert.
================================
example.com
INVERT
.icon
  • WARNING: For Dynamic Theme mode use INVERT only for dark images, that are invisible on dark backgrounds (icons, diagrams, charts, <img> and <svg> elements). Image analysis will be improved in future and this rule should become unnecessary.
  • For Filter and Filter+ config it is also possible to specify custom CSS rules. If chosen element contains images or other content that becomes wrongly displayed, NO INVERT rule can be used. REMOVE BG removes background image from element. IMPORTANT: When Dark mode is on, the whole page (root <html> element) is inverted by filter. To revert the images, videos etc. INVERT selectors are used, so the inversion will be applied to these elements twice. If inverted elements contain other elements that match the INVERT selectors, then these elements will be inverted 3 or more times. To prevent it NO INVERT selectors are used.
================================
example.com
INVERT
.icon
.button
#player
NO INVERT
#player *
REMOVE BG
.bg-photo
CSS
.overlay {
background: rgba(255, 255, 255, 0.5);
}
  • Click Apply.
  • If the fix worked open dynamic-theme-fixes.config file or inversion-fixes.config file.
  • Click edit (sign-in to GitHub first).
  • Insert your fix there. Preserve alphabetical order by URL.
  • Provide a short description of what you have done.
  • Click Propose file change.
  • Review your changes. Click Create pull request.
  • The Travis CI will run tests reviewing your changes.
  • If you see a red cross click Details and see what is wrong and edit existing Pull Request.
  • When you see a green checkmark than everything is fine.
  • Dark Reader developer will review and merge your changes making them available for all users.

Adding new features or fixing bugs

If you would like to add new feature to Dark Reader or fix a bug, submit an issue in GitHub (if there is no existing one), discuss it with active contributors, wait for approvement.

In order to build and debug the extension install the nodejs. Install development dependencies by running npm install in project root folder. Then execute npm run debug. Open the Chrome's extensions page. Enable the Developer mode, press Load unpacked extension button, navigate to project's debug/ folder.

After making any code changes the project will be automatically recompiled. If the extension didn't reload automatically it can be reloaded at Extensions page by pressing the Reload (Ctrl+R) hyperlink.

For editing the code you can use any text editor or web IDE (like Visual Studio Code, Atom, WebStorm). Preserve code style (whitespaces etc).

Submit a pull request, wait for review.

Contributors

This project exists thanks to all the people who contribute

Backers

Thank you to all our backers!

Sponsors

Support this project by becoming a sponsor

About

Dark Reader Chrome and Firefox extension

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Dark Reader for Google Chrome and Mozilla Firefox

Dark Reader screenshot

This extension inverts brightness of web pages and aims to reduce eyestrain while browsing the web. Visit Chrome Web Store and Firefox Add-ons for more info.

How to contribute

Sponsorship

Donate via Open Collective.

Translation

Improve or suggest a translation here. See the list of supported language codes.

Fixing wrong inversion

If some site is already dark, you can add it to dark-sites.config file(please, preserve alphabetical order).

If some parts of web-pages are wrongly inverted, you can specify necessary CSS selectors at dynamic-theme-fixes.config file (for Dynamic Theme mode) or inversion-fixes.config file (for Filter and Filter+ modes) (please, preserve alphabetical order by URL, use short selectors, preserve code style).

Notice that merged changes to these files are automatically delivered to all users within 15 minutes.

Using Dev Tools

  • Open Chrome Dev Tools (F12).
  • Click on element picker (top-left corner).
  • Pick wrongly inverted element.
  • Choose a selector for that element or all similar elements (e.g. if element has class="icon small" selector may look like .icon).
  • Click Dark Reader icon.
  • Click Open developer tools (at bottom).
  • Find or add a block containing URL and selectors to invert.
================================
example.com
INVERT
.icon
  • WARNING: For Dynamic Theme mode use INVERT only for dark images, that are invisible on dark backgrounds (icons, diagrams, charts, <img> and <svg> elements). Image analysis will be improved in future and this rule should become unnecessary.
  • For Filter and Filter+ config it is also possible to specify custom CSS rules. If chosen element contains images or other content that becomes wrongly displayed, NO INVERT rule can be used. REMOVE BG removes background image from element. IMPORTANT: When Dark mode is on, the whole page (root <html> element) is inverted by filter. To revert the images, videos etc. INVERT selectors are used, so the inversion will be applied to these elements twice. If inverted elements contain other elements that match the INVERT selectors, then these elements will be inverted 3 or more times. To prevent it NO INVERT selectors are used.
================================
example.com
INVERT
.icon
.button
#player
NO INVERT
#player *
REMOVE BG
.bg-photo
CSS
.overlay {
background: rgba(255, 255, 255, 0.5);
}
  • Click Apply.
  • If the fix worked open dynamic-theme-fixes.config file or inversion-fixes.config file.
  • Click edit (sign-in to GitHub first).
  • Insert your fix there. Preserve alphabetical order by URL.
  • Provide a short description of what you have done.
  • Click Propose file change.
  • Review your changes. Click Create pull request.
  • The Travis CI will run tests reviewing your changes.
  • If you see a red cross click Details and see what is wrong and edit existing Pull Request.
  • When you see a green checkmark than everything is fine.
  • Dark Reader developer will review and merge your changes making them available for all users.

Adding new features or fixing bugs

If you would like to add new feature to Dark Reader or fix a bug, submit an issue in GitHub (if there is no existing one), discuss it with active contributors, wait for approvement.

In order to build and debug the extension install the nodejs. Install development dependencies by running npm install in project root folder. Then execute npm run debug. Open the Chrome's extensions page. Enable the Developer mode, press Load unpacked extension button, navigate to project's debug/ folder.

After making any code changes the project will be automatically recompiled. If the extension didn't reload automatically it can be reloaded at Extensions page by pressing the Reload (Ctrl+R) hyperlink.

For editing the code you can use any text editor or web IDE (like Visual Studio Code, Atom, WebStorm). Preserve code style (whitespaces etc).

Submit a pull request, wait for review.

Contributors

This project exists thanks to all the people who contribute

Backers

Thank you to all our backers!

Sponsors

Support this project by becoming a sponsor

About

Dark Reader Chrome and Firefox extension

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Dark Reader for Google Chrome and Mozilla Firefox

Dark Reader screenshot

This extension inverts brightness of web pages and aims to reduce eyestrain while browsing the web. Visit Chrome Web Store and Firefox Add-ons for more info.

How to contribute

Sponsorship

Donate via Open Collective.

Translation

Improve or suggest a translation here. See the list of supported language codes.

Fixing wrong inversion

If some site is already dark, you can add it to dark-sites.config file(please, preserve alphabetical order).

If some parts of web-pages are wrongly inverted, you can specify necessary CSS selectors at dynamic-theme-fixes.config file (for Dynamic Theme mode) or inversion-fixes.config file (for Filter and Filter+ modes) (please, preserve alphabetical order by URL, use short selectors, preserve code style).

Notice that merged changes to these files are automatically delivered to all users within 15 minutes.

Using Dev Tools

  • Open Chrome Dev Tools (F12).
  • Click on element picker (top-left corner).
  • Pick wrongly inverted element.
  • Choose a selector for that element or all similar elements (e.g. if element has class="icon small" selector may look like .icon).
  • Click Dark Reader icon.
  • Click Open developer tools (at bottom).
  • Find or add a block containing URL and selectors to invert.
================================
example.com
INVERT
.icon
  • WARNING: For Dynamic Theme mode use INVERT only for dark images, that are invisible on dark backgrounds (icons, diagrams, charts, <img> and <svg> elements). Image analysis will be improved in future and this rule should become unnecessary.
  • For Filter and Filter+ config it is also possible to specify custom CSS rules. If chosen element contains images or other content that becomes wrongly displayed, NO INVERT rule can be used. REMOVE BG removes background image from element. IMPORTANT: When Dark mode is on, the whole page (root <html> element) is inverted by filter. To revert the images, videos etc. INVERT selectors are used, so the inversion will be applied to these elements twice. If inverted elements contain other elements that match the INVERT selectors, then these elements will be inverted 3 or more times. To prevent it NO INVERT selectors are used.
================================
example.com
INVERT
.icon
.button
#player
NO INVERT
#player *
REMOVE BG
.bg-photo
CSS
.overlay {
background: rgba(255, 255, 255, 0.5);
}
  • Click Apply.
  • If the fix worked open dynamic-theme-fixes.config file or inversion-fixes.config file.
  • Click edit (sign-in to GitHub first).
  • Insert your fix there. Preserve alphabetical order by URL.
  • Provide a short description of what you have done.
  • Click Propose file change.
  • Review your changes. Click Create pull request.
  • The Travis CI will run tests reviewing your changes.
  • If you see a red cross click Details and see what is wrong and edit existing Pull Request.
  • When you see a green checkmark than everything is fine.
  • Dark Reader developer will review and merge your changes making them available for all users.

Adding new features or fixing bugs

If you would like to add new feature to Dark Reader or fix a bug, submit an issue in GitHub (if there is no existing one), discuss it with active contributors, wait for approvement.

In order to build and debug the extension install the nodejs. Install development dependencies by running npm install in project root folder. Then execute npm run debug. Open the Chrome's extensions page. Enable the Developer mode, press Load unpacked extension button, navigate to project's debug/ folder.

After making any code changes the project will be automatically recompiled. If the extension didn't reload automatically it can be reloaded at Extensions page by pressing the Reload (Ctrl+R) hyperlink.

For editing the code you can use any text editor or web IDE (like Visual Studio Code, Atom, WebStorm). Preserve code style (whitespaces etc).

Submit a pull request, wait for review.

Contributors

This project exists thanks to all the people who contribute

Backers

Thank you to all our backers!

Sponsors

Support this project by becoming a sponsor

About

Dark Reader Chrome and Firefox extension

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Dark Reader for Google Chrome and Mozilla Firefox

Dark Reader screenshot

This extension inverts brightness of web pages and aims to reduce eyestrain while browsing the web. Visit Chrome Web Store and Firefox Add-ons for more info.

How to contribute

Sponsorship

Donate via Open Collective.

Translation

Improve or suggest a translation here. See the list of supported language codes.

Fixing wrong inversion

If some site is already dark, you can add it to dark-sites.config file(please, preserve alphabetical order).

If some parts of web-pages are wrongly inverted, you can specify necessary CSS selectors at dynamic-theme-fixes.config file (for Dynamic Theme mode) or inversion-fixes.config file (for Filter and Filter+ modes) (please, preserve alphabetical order by URL, use short selectors, preserve code style).

Notice that merged changes to these files are automatically delivered to all users within 15 minutes.

Using Dev Tools

  • Open Chrome Dev Tools (F12).
  • Click on element picker (top-left corner).
  • Pick wrongly inverted element.
  • Choose a selector for that element or all similar elements (e.g. if element has class="icon small" selector may look like .icon).
  • Click Dark Reader icon.
  • Click Open developer tools (at bottom).
  • Find or add a block containing URL and selectors to invert.
================================
example.com
INVERT
.icon
  • WARNING: For Dynamic Theme mode use INVERT only for dark images, that are invisible on dark backgrounds (icons, diagrams, charts, <img> and <svg> elements). Image analysis will be improved in future and this rule should become unnecessary.
  • For Filter and Filter+ config it is also possible to specify custom CSS rules. If chosen element contains images or other content that becomes wrongly displayed, NO INVERT rule can be used. REMOVE BG removes background image from element. IMPORTANT: When Dark mode is on, the whole page (root <html> element) is inverted by filter. To revert the images, videos etc. INVERT selectors are used, so the inversion will be applied to these elements twice. If inverted elements contain other elements that match the INVERT selectors, then these elements will be inverted 3 or more times. To prevent it NO INVERT selectors are used.
================================
example.com
INVERT
.icon
.button
#player
NO INVERT
#player *
REMOVE BG
.bg-photo
CSS
.overlay {
background: rgba(255, 255, 255, 0.5);
}
  • Click Apply.
  • If the fix worked open dynamic-theme-fixes.config file or inversion-fixes.config file.
  • Click edit (sign-in to GitHub first).
  • Insert your fix there. Preserve alphabetical order by URL.
  • Provide a short description of what you have done.
  • Click Propose file change.
  • Review your changes. Click Create pull request.
  • The Travis CI will run tests reviewing your changes.
  • If you see a red cross click Details and see what is wrong and edit existing Pull Request.
  • When you see a green checkmark than everything is fine.
  • Dark Reader developer will review and merge your changes making them available for all users.

Adding new features or fixing bugs

If you would like to add new feature to Dark Reader or fix a bug, submit an issue in GitHub (if there is no existing one), discuss it with active contributors, wait for approvement.

In order to build and debug the extension install the nodejs. Install development dependencies by running npm install in project root folder. Then execute npm run debug. Open the Chrome's extensions page. Enable the Developer mode, press Load unpacked extension button, navigate to project's debug/ folder.

After making any code changes the project will be automatically recompiled. If the extension didn't reload automatically it can be reloaded at Extensions page by pressing the Reload (Ctrl+R) hyperlink.

For editing the code you can use any text editor or web IDE (like Visual Studio Code, Atom, WebStorm). Preserve code style (whitespaces etc).

Submit a pull request, wait for review.

Contributors

This project exists thanks to all the people who contribute

Backers

Thank you to all our backers!

Sponsors

Support this project by becoming a sponsor

About

Dark Reader Chrome and Firefox extension

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Dark Reader for Google Chrome and Mozilla Firefox

Dark Reader screenshot

This extension inverts brightness of web pages and aims to reduce eyestrain while browsing the web. Visit Chrome Web Store and Firefox Add-ons for more info.

How to contribute

Sponsorship

Donate via Open Collective.

Translation

Improve or suggest a translation here. See the list of supported language codes.

Fixing wrong inversion

If some site is already dark, you can add it to dark-sites.config file(please, preserve alphabetical order).

If some parts of web-pages are wrongly inverted, you can specify necessary CSS selectors at dynamic-theme-fixes.config file (for Dynamic Theme mode) or inversion-fixes.config file (for Filter and Filter+ modes) (please, preserve alphabetical order by URL, use short selectors, preserve code style).

Notice that merged changes to these files are automatically delivered to all users within 15 minutes.

Using Dev Tools

  • Open Chrome Dev Tools (F12).
  • Click on element picker (top-left corner).
  • Pick wrongly inverted element.
  • Choose a selector for that element or all similar elements (e.g. if element has class="icon small" selector may look like .icon).
  • Click Dark Reader icon.
  • Click Open developer tools (at bottom).
  • Find or add a block containing URL and selectors to invert.
================================
example.com
INVERT
.icon
  • WARNING: For Dynamic Theme mode use INVERT only for dark images, that are invisible on dark backgrounds (icons, diagrams, charts, <img> and <svg> elements). Image analysis will be improved in future and this rule should become unnecessary.
  • For Filter and Filter+ config it is also possible to specify custom CSS rules. If chosen element contains images or other content that becomes wrongly displayed, NO INVERT rule can be used. REMOVE BG removes background image from element. IMPORTANT: When Dark mode is on, the whole page (root <html> element) is inverted by filter. To revert the images, videos etc. INVERT selectors are used, so the inversion will be applied to these elements twice. If inverted elements contain other elements that match the INVERT selectors, then these elements will be inverted 3 or more times. To prevent it NO INVERT selectors are used.
================================
example.com
INVERT
.icon
.button
#player
NO INVERT
#player *
REMOVE BG
.bg-photo
CSS
.overlay {
background: rgba(255, 255, 255, 0.5);
}
  • Click Apply.
  • If the fix worked open dynamic-theme-fixes.config file or inversion-fixes.config file.
  • Click edit (sign-in to GitHub first).
  • Insert your fix there. Preserve alphabetical order by URL.
  • Provide a short description of what you have done.
  • Click Propose file change.
  • Review your changes. Click Create pull request.
  • The Travis CI will run tests reviewing your changes.
  • If you see a red cross click Details and see what is wrong and edit existing Pull Request.
  • When you see a green checkmark than everything is fine.
  • Dark Reader developer will review and merge your changes making them available for all users.

Adding new features or fixing bugs

If you would like to add new feature to Dark Reader or fix a bug, submit an issue in GitHub (if there is no existing one), discuss it with active contributors, wait for approvement.

In order to build and debug the extension install the nodejs. Install development dependencies by running npm install in project root folder. Then execute npm run debug. Open the Chrome's extensions page. Enable the Developer mode, press Load unpacked extension button, navigate to project's debug/ folder.

After making any code changes the project will be automatically recompiled. If the extension didn't reload automatically it can be reloaded at Extensions page by pressing the Reload (Ctrl+R) hyperlink.

For editing the code you can use any text editor or web IDE (like Visual Studio Code, Atom, WebStorm). Preserve code style (whitespaces etc).

Submit a pull request, wait for review.

Contributors

This project exists thanks to all the people who contribute

Backers

Thank you to all our backers!

Sponsors

Support this project by becoming a sponsor

About

Dark Reader Chrome and Firefox extension

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Dark Reader for Google Chrome and Mozilla Firefox

Dark Reader screenshot

This extension inverts brightness of web pages and aims to reduce eyestrain while browsing the web. Visit Chrome Web Store and Firefox Add-ons for more info.

How to contribute

Sponsorship

Donate via Open Collective.

Translation

Improve or suggest a translation here. See the list of supported language codes.

Fixing wrong inversion

If some site is already dark, you can add it to dark-sites.config file(please, preserve alphabetical order).

If some parts of web-pages are wrongly inverted, you can specify necessary CSS selectors at dynamic-theme-fixes.config file (for Dynamic Theme mode) or inversion-fixes.config file (for Filter and Filter+ modes) (please, preserve alphabetical order by URL, use short selectors, preserve code style).

Notice that merged changes to these files are automatically delivered to all users within 15 minutes.

Using Dev Tools

  • Open Chrome Dev Tools (F12).
  • Click on element picker (top-left corner).
  • Pick wrongly inverted element.
  • Choose a selector for that element or all similar elements (e.g. if element has class="icon small" selector may look like .icon).
  • Click Dark Reader icon.
  • Click Open developer tools (at bottom).
  • Find or add a block containing URL and selectors to invert.
================================
example.com
INVERT
.icon
  • WARNING: For Dynamic Theme mode use INVERT only for dark images, that are invisible on dark backgrounds (icons, diagrams, charts, <img> and <svg> elements). Image analysis will be improved in future and this rule should become unnecessary.
  • For Filter and Filter+ config it is also possible to specify custom CSS rules. If chosen element contains images or other content that becomes wrongly displayed, NO INVERT rule can be used. REMOVE BG removes background image from element. IMPORTANT: When Dark mode is on, the whole page (root <html> element) is inverted by filter. To revert the images, videos etc. INVERT selectors are used, so the inversion will be applied to these elements twice. If inverted elements contain other elements that match the INVERT selectors, then these elements will be inverted 3 or more times. To prevent it NO INVERT selectors are used.
================================
example.com
INVERT
.icon
.button
#player
NO INVERT
#player *
REMOVE BG
.bg-photo
CSS
.overlay {
background: rgba(255, 255, 255, 0.5);
}
  • Click Apply.
  • If the fix worked open dynamic-theme-fixes.config file or inversion-fixes.config file.
  • Click edit (sign-in to GitHub first).
  • Insert your fix there. Preserve alphabetical order by URL.
  • Provide a short description of what you have done.
  • Click Propose file change.
  • Review your changes. Click Create pull request.
  • The Travis CI will run tests reviewing your changes.
  • If you see a red cross click Details and see what is wrong and edit existing Pull Request.
  • When you see a green checkmark than everything is fine.
  • Dark Reader developer will review and merge your changes making them available for all users.

Adding new features or fixing bugs

If you would like to add new feature to Dark Reader or fix a bug, submit an issue in GitHub (if there is no existing one), discuss it with active contributors, wait for approvement.

In order to build and debug the extension install the nodejs. Install development dependencies by running npm install in project root folder. Then execute npm run debug. Open the Chrome's extensions page. Enable the Developer mode, press Load unpacked extension button, navigate to project's debug/ folder.

After making any code changes the project will be automatically recompiled. If the extension didn't reload automatically it can be reloaded at Extensions page by pressing the Reload (Ctrl+R) hyperlink.

For editing the code you can use any text editor or web IDE (like Visual Studio Code, Atom, WebStorm). Preserve code style (whitespaces etc).

Submit a pull request, wait for review.

Contributors

This project exists thanks to all the people who contribute

Backers

Thank you to all our backers!

Sponsors

Support this project by becoming a sponsor

About

Dark Reader Chrome and Firefox extension

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Dark Reader for Google Chrome and Mozilla Firefox

Dark Reader screenshot

This extension inverts brightness of web pages and aims to reduce eyestrain while browsing the web. Visit Chrome Web Store and Firefox Add-ons for more info.

How to contribute

Sponsorship

Donate via Open Collective.

Translation

Improve or suggest a translation here. See the list of supported language codes.

Fixing wrong inversion

If some site is already dark, you can add it to dark-sites.config file(please, preserve alphabetical order).

If some parts of web-pages are wrongly inverted, you can specify necessary CSS selectors at dynamic-theme-fixes.config file (for Dynamic Theme mode) or inversion-fixes.config file (for Filter and Filter+ modes) (please, preserve alphabetical order by URL, use short selectors, preserve code style).

Notice that merged changes to these files are automatically delivered to all users within 15 minutes.

Using Dev Tools

  • Open Chrome Dev Tools (F12).
  • Click on element picker (top-left corner).
  • Pick wrongly inverted element.
  • Choose a selector for that element or all similar elements (e.g. if element has class="icon small" selector may look like .icon).
  • Click Dark Reader icon.
  • Click Open developer tools (at bottom).
  • Find or add a block containing URL and selectors to invert.
================================
example.com
INVERT
.icon
  • WARNING: For Dynamic Theme mode use INVERT only for dark images, that are invisible on dark backgrounds (icons, diagrams, charts, <img> and <svg> elements). Image analysis will be improved in future and this rule should become unnecessary.
  • For Filter and Filter+ config it is also possible to specify custom CSS rules. If chosen element contains images or other content that becomes wrongly displayed, NO INVERT rule can be used. REMOVE BG removes background image from element. IMPORTANT: When Dark mode is on, the whole page (root <html> element) is inverted by filter. To revert the images, videos etc. INVERT selectors are used, so the inversion will be applied to these elements twice. If inverted elements contain other elements that match the INVERT selectors, then these elements will be inverted 3 or more times. To prevent it NO INVERT selectors are used.
================================
example.com
INVERT
.icon
.button
#player
NO INVERT
#player *
REMOVE BG
.bg-photo
CSS
.overlay {
background: rgba(255, 255, 255, 0.5);
}
  • Click Apply.
  • If the fix worked open dynamic-theme-fixes.config file or inversion-fixes.config file.
  • Click edit (sign-in to GitHub first).
  • Insert your fix there. Preserve alphabetical order by URL.
  • Provide a short description of what you have done.
  • Click Propose file change.
  • Review your changes. Click Create pull request.
  • The Travis CI will run tests reviewing your changes.
  • If you see a red cross click Details and see what is wrong and edit existing Pull Request.
  • When you see a green checkmark than everything is fine.
  • Dark Reader developer will review and merge your changes making them available for all users.

Adding new features or fixing bugs

If you would like to add new feature to Dark Reader or fix a bug, submit an issue in GitHub (if there is no existing one), discuss it with active contributors, wait for approvement.

In order to build and debug the extension install the nodejs. Install development dependencies by running npm install in project root folder. Then execute npm run debug. Open the Chrome's extensions page. Enable the Developer mode, press Load unpacked extension button, navigate to project's debug/ folder.

After making any code changes the project will be automatically recompiled. If the extension didn't reload automatically it can be reloaded at Extensions page by pressing the Reload (Ctrl+R) hyperlink.

For editing the code you can use any text editor or web IDE (like Visual Studio Code, Atom, WebStorm). Preserve code style (whitespaces etc).

Submit a pull request, wait for review.

Contributors

This project exists thanks to all the people who contribute

Backers

Thank you to all our backers!

Sponsors

Support this project by becoming a sponsor

About

Dark Reader Chrome and Firefox extension

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Dark Reader for Google Chrome and Mozilla Firefox

Dark Reader screenshot

This extension inverts brightness of web pages and aims to reduce eyestrain while browsing the web. Visit Chrome Web Store and Firefox Add-ons for more info.

How to contribute

Sponsorship

Donate via Open Collective.

Translation

Improve or suggest a translation here. See the list of supported language codes.

Fixing wrong inversion

If some site is already dark, you can add it to dark-sites.config file(please, preserve alphabetical order).

If some parts of web-pages are wrongly inverted, you can specify necessary CSS selectors at dynamic-theme-fixes.config file (for Dynamic Theme mode) or inversion-fixes.config file (for Filter and Filter+ modes) (please, preserve alphabetical order by URL, use short selectors, preserve code style).

Notice that merged changes to these files are automatically delivered to all users within 15 minutes.

Using Dev Tools

  • Open Chrome Dev Tools (F12).
  • Click on element picker (top-left corner).
  • Pick wrongly inverted element.
  • Choose a selector for that element or all similar elements (e.g. if element has class="icon small" selector may look like .icon).
  • Click Dark Reader icon.
  • Click Open developer tools (at bottom).
  • Find or add a block containing URL and selectors to invert.
================================
example.com
INVERT
.icon
  • WARNING: For Dynamic Theme mode use INVERT only for dark images, that are invisible on dark backgrounds (icons, diagrams, charts, <img> and <svg> elements). Image analysis will be improved in future and this rule should become unnecessary.
  • For Filter and Filter+ config it is also possible to specify custom CSS rules. If chosen element contains images or other content that becomes wrongly displayed, NO INVERT rule can be used. REMOVE BG removes background image from element. IMPORTANT: When Dark mode is on, the whole page (root <html> element) is inverted by filter. To revert the images, videos etc. INVERT selectors are used, so the inversion will be applied to these elements twice. If inverted elements contain other elements that match the INVERT selectors, then these elements will be inverted 3 or more times. To prevent it NO INVERT selectors are used.
================================
example.com
INVERT
.icon
.button
#player
NO INVERT
#player *
REMOVE BG
.bg-photo
CSS
.overlay {
background: rgba(255, 255, 255, 0.5);
}
  • Click Apply.
  • If the fix worked open dynamic-theme-fixes.config file or inversion-fixes.config file.
  • Click edit (sign-in to GitHub first).
  • Insert your fix there. Preserve alphabetical order by URL.
  • Provide a short description of what you have done.
  • Click Propose file change.
  • Review your changes. Click Create pull request.
  • The Travis CI will run tests reviewing your changes.
  • If you see a red cross click Details and see what is wrong and edit existing Pull Request.
  • When you see a green checkmark than everything is fine.
  • Dark Reader developer will review and merge your changes making them available for all users.

Adding new features or fixing bugs

If you would like to add new feature to Dark Reader or fix a bug, submit an issue in GitHub (if there is no existing one), discuss it with active contributors, wait for approvement.

In order to build and debug the extension install the nodejs. Install development dependencies by running npm install in project root folder. Then execute npm run debug. Open the Chrome's extensions page. Enable the Developer mode, press Load unpacked extension button, navigate to project's debug/ folder.

After making any code changes the project will be automatically recompiled. If the extension didn't reload automatically it can be reloaded at Extensions page by pressing the Reload (Ctrl+R) hyperlink.

For editing the code you can use any text editor or web IDE (like Visual Studio Code, Atom, WebStorm). Preserve code style (whitespaces etc).

Submit a pull request, wait for review.

Contributors

This project exists thanks to all the people who contribute

Backers

Thank you to all our backers!

Sponsors

Support this project by becoming a sponsor

About

Dark Reader Chrome and Firefox extension

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages