Skip to content

Instantly share code, notes, and snippets.

@travishorn
Last active August 11, 2026 13:24
Show Gist options
  • Select an option

  • Save travishorn/c2b6111a4e63efdbf87a1de84c833ab1 to your computer and use it in GitHub Desktop.

Select an option

Save travishorn/c2b6111a4e63efdbf87a1de84c833ab1 to your computer and use it in GitHub Desktop.
Saving the images and videos from your ClassDojo storyline

Archived

Please see Patrick330's fork of this script.

ClassDojo changes their site regularly, so a script like this needs regular maintenance. I have decided to archive this project and stop providing updates. Patrick330's fork linked above may be a good alternative.

Original Purpose

ClassDojo is a classroom communication app used to share reports between parents and teachers. Teachers track student behavior and upload photos or videos. The gamification style system teaches developmental skills through real-time feedback.

When your child's teacher shares a photo, it goes on your parent "storyline". Unfortunately, ClassDojo does not provide any means of saving these photos. In fact, the photos are displayed in a <div> using style: background-image('...'); so right-clicking and choosing "Save image" is not an option.

@MacManas

MacManas commented Jul 4, 2025

Copy link
Copy Markdown

If you have more than one kid, you can use:
const FIRST_FEED = "https://home.classdojo.com/api/storyFeed?withStudentCommentsAndLikes=true&studentId=<STUDENT_ID>";
The <STUDENT_ID> is the number that appears in the URL when you select the feed from only one kid.
Also, had to remove withArchived=false since otherwise it tends to mix feeds from the kids for some reason. Since I don't have access to the API docs, I cannot tell why this is the case

@rostmodern

Copy link
Copy Markdown

is there a way to also grab the text of the posts?
a simple text file also mentioning the corresponding jpeg files might be good start to archive this valuable info or metadata.

Is this possible via the api or any other way?? Is there a project already addressing this issue?
I could not find one...
Any help is greatly appreciated!

@8bitwilliam

8bitwilliam commented Oct 6, 2025

Copy link
Copy Markdown

is there a way to also grab the text of the posts? a simple text file also mentioning the corresponding jpeg files might be good start to archive this valuable info or metadata.

Is this possible via the api or any other way?? Is there a project already addressing this issue? I could not find one... Any help is greatly appreciated!

I have a Chromium-based extension that may help if you’re using browsers like Chrome or Edge.
https://github.com/8bitwilliam/Ninja

It saves the post information for each day to a text file, including the file name for reference, and of course downloads any photos and videos from the specified date range.

The text file looks something like...

[2025-01-01 12:]
Teacher:
Class:
Story:
Files:

  • 2025-01-01_8qfowp4b7a.jpg

@toonarmycaptain

Copy link
Copy Markdown

I made an update here that does both image/video and uses a single dialog rather one per-image.

@Psyhomantis

Copy link
Copy Markdown

You are an absolute legend! 👑

Tried so many scripts before this and none worked, but yours saved years of our child's school memories in minutes. The File System Access API approach is pure genius—no endless "Save As" prompts!

Thank you so much for building and sharing this masterpiece! 🚀👏

@toonarmycaptain

Copy link
Copy Markdown

Welcome! ❤️
Just sharing the solution to my own problem/laziness - that's why when you rerun it in a few months, if you pick the same target directory, it should only download the new ones, and hopefully with more comprehensible filenames than the defaults :)

@bdf0506

bdf0506 commented Aug 11, 2026

Copy link
Copy Markdown

I created a newer version, which uses the browser extension TamperMonkey, as well as embeds some metadata into the files to preserve the date the images were taken as well as captions.

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