This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady
What I Built
I recently started creating content on Instagram, and discovered that a “casual photo dump” takes a surprisingly deliberate amount of work.
Choosing the photos is only the beginning. Then come the arrangements, backgrounds, fonts, tiny decorations, and the task of making separate slides feel connected.
I wanted the scrapbook aesthetic without rebuilding the scrapbook every time.
So I built Dump Studio, a local carousel editor that uses Gemma through Ollama to turn a short description into editable design suggestions.
Describe something like:
“Beach weekend, sunset colours, playful scrapbook with postcards and film strips.”
Dump Studio generates three directions to compare. Choose one, add your photos, adjust the details, and export five numbered Instagram slides.
The editor includes:
- Eight original compositions, including coastal postcards, film strips, contact sheets, and scrapbook collages.
- Editable text, seven font families, colours, stickers, and photo frames.
- Photo cropping, zoom, rotation, and filters.
- A continuous canvas with slide guides and individual slide previews.
- Local autosave and downloadable project files.
- Export as five 1080 × 1350 PNGs in a ZIP, or one complete spread. The person who gets to be a little lazier is me - and hopefully anyone else whose camera roll grows faster than their motivation to arrange it(basically everyone using instagram).
Demo
Watch the one-minute Dump Studio demo
Code
The source code and setup instructions are available on GitHub: Tannuu18/carousel.
Dump Studio’s original application code is MIT licensed. Dependencies, fonts, and model weights retain their respective licences.
How I Built It
Dump Studio uses HTML, CSS, JavaScript, Canvas 2D, a Python server, and Ollama. The local model is:
gemma4:e2b-it-q4_K_M
The workflow looks like this:
Written brief
↓
Local Python server
↓
Gemma through Ollama
↓
Structured design suggestions + validation
↓
Editable canvas
↓
Five numbered PNG slides
Gemma selects a composition within each design family and suggests a title, supporting text, a palette, and geometry hints. The renderer combines those suggestions with designed composition structures.
That distinction matters: Gemma helps plan the design; it does not generate the photographs or paint the final carousel. Photos, text, and decorations remain editable canvas layers.
One important engineering challenge was turning a model’s suggestions into something that actually fits a very wide canvas. A valid JSON response can still describe overlapping frames, unreadable colours, or empty slides.
The backend therefore checks coordinates, contrast, slide coverage, overlap, and rotated frame bounds. It repairs bounded overflow and allows one validation retry. If generation fails, the current canvas stays in place.
The frontend also waits for its fonts before exporting, so typography is available when the images are rendered.
Community projects such as ToolsMonk’s browser-based photo editor and Martin Stark’s local screenshot editor were useful references for keeping image editing local and preserving editable layers.
I used Codex to assist with implementation, debugging, and iteration.
Why Does Open Innovation Matter?
My photo dump contains personal memories. I wanted help arranging them without making uploading them a prerequisite.
Only the written brief reaches the local model. The photos stay in the browser; they are not sent to the Python server or Ollama.
Running an open-weight model locally also means:
- No hosted inference bill: experimenting with another direction does not consume paid API credits. Hardware and electricity still have a cost.
- Offline operation after setup: once the model and dependencies are downloaded, the workflow does not require a hosted AI service.
- Control over behaviour: I can inspect and change the prompt, schema, validation rules, and model configuration.
- An inspectable implementation: other developers can study and adapt the application. For this project, local inference gave me something concrete that a hosted API would not: generation that works without sending the brief to an external provider. The trade-off is setup and dependence on the user’s hardware. I accepted that because privacy and repeatable local experimentation fit the tool I wanted to build. The “Slow and Steady” part is simple: I still choose the memories and make the final creative decisions. Dump Studio handles more of the repetitive arranging and slicing, leaving me with fewer boxes to move before I can post.
The Lazy Payoff
The irony of a photo dump is how much effort goes into making it look effortless.
Dump Studio brings the repetitive steps into one workflow: describe the vibe, compare three AI-assisted directions, add photos, adjust the details, and export five numbered slides. I can preview the whole spread instead of arranging each slide separately and manually slicing the result.
I’ve been testing the editor while building it, but I haven’t measured time savings or used it for a published Instagram post yet. The practical payoff so far is having an editable starting point instead of a blank canvas.
I still get to make the creative decisions. I just have fewer boxes to move.
Prize Categories
Best Use of Gemma
Dump Studio runs Gemma locally through Ollama to translate a written brief into structured, editable carousel suggestions. Gemma contributes composition selection, palette suggestions, copy, and bounded geometry hints to the creation workflow.
Top comments (1)
use it and let me know!!!