Skip to content

Instantly share code, notes, and snippets.

@mat-1
Last active January 30, 2026 15:09
Show Gist options
  • Select an option

  • Save mat-1/61c2bb5cc218b900ed89c62980a58e99 to your computer and use it in GitHub Desktop.

Select an option

Save mat-1/61c2bb5cc218b900ed89c62980a58e99 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name Photopea Premium
// @namespace http://tampermonkey.net/
// @version 2024-02-03
// @description Unlock Photopea Premium by patching their JS
// @author mat
// @match https://www.photopea.com/
// @match https://www.photopea.com/?utm_source=homescreen
// @icon https://www.google.com/s2/favicons?sz=64&domain=photopea.com
// @grant GM_webRequest
// @run-at document-start
// @downloadURL https://gist.githubusercontent.com/mat-1/61c2bb5cc218b900ed89c62980a58e99/raw/photopea-premium.js
// @updateURL https://gist.githubusercontent.com/mat-1/61c2bb5cc218b900ed89c62980a58e99/raw/photopea-premium.js
// @webRequest {"selector": "https://vecpea.com/code/pp/*", "action": "cancel"}
// ==/UserScript==
unsafeWindow.locStor = unsafeWindow.localStorage
// the service worker breaks our patching so we have to disable it :(
unsafeWindow.navigator.serviceWorker.register = async (..._) => {}
unsafeWindow.addEventListener('load', async () => {
const scriptEls = document.getElementsByTagName('script')
// find the script that looks like //vecpea.com/code/pp/pp1722375167.js
// at the time of writing it's always just the last script, but this may change
let mainScriptSrc;
for (const scriptEl of scriptEls) {
if (scriptEl.src.includes("/code/pp/")) {
mainScriptSrc = scriptEl.src
}
}
// unblock it
GM_webRequest([
{ selector: 'https://vecpea.com/code/pp/*', action: '' },
]);
const js = await fetch(mainScriptSrc).then(res => res.text())
const patchedJs = js.replace(/(?<=\w\w\.\w\w=function\(\)){(?=var \w=\w\w\.\w\w\(\);if\(\w==null\)return null;var )/g, '{return true;')
unsafeWindow.eval(patchedJs)
unsafeWindow.onload()
})
@mat-1

mat-1 commented Aug 1, 2024

Copy link
Copy Markdown
Author

Note that this script is obsoleted by (and conflicts with) the built in "Unbreak" uBO filter. Still, I updated the script anyways.

@mat-1

mat-1 commented Aug 9, 2024

Copy link
Copy Markdown
Author

Also note that this doesn't work with Violentmonkey as they don't implement GM_webRequest (violentmonkey/violentmonkey#583).

@c1bles

c1bles commented Nov 7, 2024

Copy link
Copy Markdown

Note that this script is obsoleted by (and conflicts with) the built in "Unbreak" uBO filter. Still, I updated the script anyways.

what was the script about? free premium in photopea and vectorpea?

@mat-1

mat-1 commented Nov 7, 2024

Copy link
Copy Markdown
Author

Note that this script is obsoleted by (and conflicts with) the built in "Unbreak" uBO filter. Still, I updated the script anyways.

what was the script about? free premium in photopea and vectorpea?

I made it to remove the ad area that takes up a bunch of space, since uBlock Origin used to just hide the ad but leave the space blank there. It would also unlock any premium-only features if they existed, I'm not sure if they do though.

@TAEDIUM-OFFICIEL

Copy link
Copy Markdown

it doesn't work for me

@getlone

getlone commented Jul 16, 2025

Copy link
Copy Markdown

Nice work, thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment