Discuss Scratch
- Heathercat123
-
Scratcher
23 posts
Website development
Also if you know how to make my scratch-paint properly link with my scratch-gui (and perhaps other scratch-editor package forks), and have all of that link w/ scratch-www, without causing weird NPM issues, please let me know!
Sorry I'm basically asking for free work here, I'm just sort of stuck on that…
I'll see what I can do after I'm done decompiling the 2.0 online editor (even if we decide to implement 3.0 compatibility on the server and not the frontend or something, we still have to change the colors to match the rest of the website and fix hard-coded urls in the embed player, and binary patching is kinda hacky)
Creator of much of the backend code for this website (the Scratch section, not the rest!) along with contributions from @chipmunkmc.
- Heathercat123
-
Scratcher
23 posts
Website development
Also, I noticed that the WWW is currently broken. That's my fault, I moved the urls that correspond to hosts on the real Scratch website to a new /hosts path:
In bin/set-env.sh, this:
becomes the following:
Also, when Codeberg gets back up, I'll add support for the 2.0 media libraries, which require their assets to be in APIClone's assets directory. As such, to make it work, you should copy every asset from the Scratch 2.0 Offline Editor's /media directory to /files/assets.
In bin/set-env.sh, this:
export API_HOST=/api
export ASSET_HOST=/assets
export BACKPACK_HOST=/backpack
export PROJECT_HOST=/projectshost
export STATIC_HOST=/uploads
becomes the following:
export API_HOST=/hosts/api
export ASSET_HOST=/hosts/assets
export BACKPACK_HOST=/hosts/backpack
export CLOUDDATA_HOST=/hosts/clouddata
export PROJECT_HOST=/hosts/projects
export STATIC_HOST=/hosts/uploads
Also, when Codeberg gets back up, I'll add support for the 2.0 media libraries, which require their assets to be in APIClone's assets directory. As such, to make it work, you should copy every asset from the Scratch 2.0 Offline Editor's /media directory to /files/assets.
Last edited by Heathercat123 (March 4, 2026 20:58:23)
Creator of much of the backend code for this website (the Scratch section, not the rest!) along with contributions from @chipmunkmc.
- Heathercat123
-
Scratcher
23 posts
Website development
Also if you know how to make my scratch-paint properly link with my scratch-gui (and perhaps other scratch-editor package forks), and have all of that link w/ scratch-www, without causing weird NPM issues, please let me know!
I managed to link scratch-paint and scratch-editor's scratch-gui using npm install –save ../../../scratch-paint, but when I open the paint editor, it just crashes

Creator of much of the backend code for this website (the Scratch section, not the rest!) along with contributions from @chipmunkmc.
- chipmunkmc
-
Scratch Team
35 posts
Website development
Well you see, I've been neglecting to re-compile scratch-www until I get the forks working properly. I mean I could just revert it to vanilla scratch-gui but that's not ideal…
- Heathercat123
-
Scratcher
23 posts
Website development
CHIPMUNK I'M A VERIFIED TEACHED AS OF MARCH 2ND
(it only took them 5 days ToT)
(it only took them 5 days ToT)Attachments:
my classes.png (107.1 KB)
Creator of much of the backend code for this website (the Scratch section, not the rest!) along with contributions from @chipmunkmc.
- chipmunkmc
-
Scratch Team
35 posts
Website development
CHIPMUNK I'M A VERIFIED TEACHED AS OF MARCH 2ND![]()
(it only took them 5 days ToT)
Yoooo that's epic!!! Also I just realized attachments can only be viewed while logged in :S…
Last edited by chipmunkmc (March 6, 2026 03:30:05)
- chipmunkmc
-
Scratch Team
35 posts
Website development
I would like to note that the age shown on my profile's admin panel is inaccurate. Perhaps you can do something like `datetime.datetime.now().date() - datetime.date(1970, 1, 1)`, where the second operand is the birth date?
- chipmunkmc
-
Scratch Team
35 posts
Website development
One last thing: I just adjusted the nginx config a bit, will update scratch-gui-tw and scratchschools later.
- chipmunkmc
-
Scratch Team
35 posts
Website development
Ok for real this time this is the last thing… Is it just me or do anons get the admin panel HTML?
- Heathercat123
-
Scratcher
23 posts
Website development
Ok for real this time this is the last thing… Is it just me or do anons get the admin panel HTML?
I think it's just you, except for the admin panel iframe used for the WWW project and studio pages, I kinda forgot to make these admin-only.
Creator of much of the backend code for this website (the Scratch section, not the rest!) along with contributions from @chipmunkmc.
- chipmunkmc
-
Scratch Team
35 posts
Website development
I think it's just you, except for the admin panel iframe used for the WWW project and studio pages, I kinda forgot to make these admin-only.
My bad, I went to https://tw.scr.chipmunk.land/hosts/ after having logged in from another subdomain, forgetting that sessions are shared between them…
- chipmunkmc
-
Scratch Team
35 posts
Website development
I'm sorry, I think I was wrong about the age thing. I forgot Scratch doesn't use full dates, and it turns out I had the wrong month set on mine anyway… Now I can't update my profile from the admin panel since I have to set a Featured project label though.
- Heathercat123
-
Scratcher
23 posts
Website development
I'm sorry, I think I was wrong about the age thing. I forgot Scratch doesn't use full dates, and it turns out I had the wrong month set on mine anyway…
Ah… it's okay
Now I can't update my profile from the admin panel since I have to set a Featured project label though.
Oops, my bad! Lemme fix that rq.
Creator of much of the backend code for this website (the Scratch section, not the rest!) along with contributions from @chipmunkmc.
- chipmunkmc
-
Scratch Team
35 posts
Website development
Is it intentional that /ngapi/ is not under /hosts/? I mean it's not part of the current Scratch API nor a subdomain (unsure if this will change), but at the same time it's not part of scratchr2 either.
Also, how should I patch it to fix project pages? Sorry, I'm too lazy to figure it out.
Also, how should I patch it to fix project pages? Sorry, I'm too lazy to figure it out.
- Heathercat123
-
Scratcher
23 posts
Website development
Is it intentional that /ngapi/ is not under /hosts/? I mean it's not part of the current Scratch API nor a subdomain (unsure if this will change), but at the same time it's not part of scratchr2 either.
It's intentional.
Also, how should I patch it to fix project pages? Sorry, I'm too lazy to figure it out.
I kinda forgot sooo here's mine:
Attachments:
index-CePi2HhN.js (276.5 KB)
Creator of much of the backend code for this website (the Scratch section, not the rest!) along with contributions from @chipmunkmc.
- max_teacher
-
Scratcher
2 posts
Website development
Thanks! Also I cannot comment from this new account due to this error:
Also I see this in messages:
2026-03-07 22:58:55,303 ERROR Internal Server Error: /site-api/comments/user/chipmunkmc/add/ Traceback (most recent call last): File "/usr/lib/python3.12/site-packages/asgiref/sync.py", line 489, in thread_handler raise exc_info[1] File "/usr/lib/python3.12/site-packages/django/core/handlers/exception.py", line 42, in inner response = await get_response(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/asgiref/sync.py", line 489, in thread_handler raise exc_info[1] File "/usr/lib/python3.12/site-packages/django/core/handlers/base.py", line 253, in _get_response_async response = await wrapped_callback( ^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/asgiref/sync.py", line 439, in __call__ ret = await asyncio.shield(exec_coro) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/asgiref/current_thread_executor.py", line 40, in run result = self.fn(*self.args, **self.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/asgiref/sync.py", line 493, in thread_handler return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/opt/apiclone/base_comments/views.py", line 391, in R2PostCommentView status, error = BaseComment.is_comment_okay(request.user, reqjson['content'], same_rate_limit) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/apiclone/base_comments/models.py", line 113, in is_comment_okay last_comment = last_comment[len(last_comment) - 1] ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/site-packages/django/db/models/query.py", line 431, in __getitem__ raise ValueError("Negative indexing is not supported.") ValueError: Negative indexing is not supported.
Also I see this in messages:
PLACEHOLDER: max_teacher did a userjoin. 9:59 p.m.
- Heathercat123
-
Scratcher
23 posts
Website development
Thanks! Also I cannot comment from this new account due to this error: -snip-
Whoops, I accidentally made it check if the QuerySet.exists() function exists instead of calling it, sorry! This should be fixed in the latest commit.
PLACEHOLDER: max_teacher did a userjoin. 9:59 p.m.
The code for checking if the user is on r2 was really weak on the notifications page, this should be fixed too. (According to scratchr2_translations, Scratch 2.0 had no join notification, which kinda makes sense since the 2.0 registration modal already had a Welcome slide).
Creator of much of the backend code for this website (the Scratch section, not the rest!) along with contributions from @chipmunkmc.
- max_teacher
-
Scratcher
2 posts
Website development
The r2. subdomain became not r2-only due to the context processor changing and me not adapting it, anyway I merged the latest commit(s)!
- chipmunkmc
-
Scratch Team
35 posts
Website development
Unsure if it's my fault, but clicking the comment form without being logged in no longer shows me a modal
- Heathercat123
-
Scratcher
23 posts
Website development
Unsure if it's my fault, but clicking the comment form without being logged in no longer shows me a modal
My bad, I accidentally broke it while refactoring the template's code ._. It should be fixed now.
Creator of much of the backend code for this website (the Scratch section, not the rest!) along with contributions from @chipmunkmc.