Inspiration
Photos of personally meaningful objects should be easy to turn into polished posters, thumbnails, and social graphics without regenerating or changing the object itself. Soul Pics was inspired by the simple wish to photograph a favorite instrument once, then place it into many different visual stories.
What it does
Soul Pics is a bilingual, local-first image composer with independent background, subject, and text layers. Users can describe the subject they want to keep, cut it out locally, position and transform it, add styled text, fine-tune the final composition, and export a PNG that matches the live preview.
The subject-cutout path is API-free. Japanese prompt text is normalized locally and passed through Grounding DINO, SAM 2.1, and BiRefNet for detection, segmentation, and high-resolution alpha matting. Optional prompt-based background generation is the only explicit OpenAI API action and uses GPT Image 2. Normal editing, final-quality adjustment, preview, and export stay local.
How we built it
The editor is built with React, Vite, JavaScript, and Canvas 2D, with an Express service coordinating local image-processing tools. A shared Canvas renderer keeps the preview and exported PNG consistent. The local cutout pipeline preserves the source dimensions, aspect ratio, and RGB image while generating a refined alpha channel.
I collaborated with Codex using GPT-5.6 throughout the Build Week. Codex accelerated architecture exploration, implementation, debugging, UI refinement, bilingual copy, local-model integration, regression checking, release packaging, and documentation. I made the key product decisions: keep the photographed subject faithful, make the API boundary explicit, avoid hidden retries or charges, and prioritize a complete consumer editing experience over a one-off technical demo.
Challenges we ran into
The hardest challenge was obtaining product-image-quality edges without changing the original subject. Early API experiments produced rough boundaries and inconsistent proportions. Moving the cutout path to Grounding DINO, SAM 2.1, and BiRefNet improved edge quality while also eliminating per-cutout API cost.
Other challenges included preserving the current transformed state when flipping the subject, keeping processing indicators correct when file selection was canceled, reconciling Japanese and English layouts, and ensuring the final PNG used the same rendering logic as the preview.
Accomplishments that we're proud of
- Local Japanese-prompt subject cutout with no OpenAI API call
- High-resolution cutout verified on a 5712×4284 source image
- Independent, draggable background, subject, and text layers
- Local final-quality controls and matching Canvas preview/export
- Clear visual disclosure of the single optional paid API action
- A polished bilingual interface, installation guide, user guide, and reproducible release package
- The Devpost thumbnail itself was composed and exported in Soul Pics, using a blurred app screenshot as the background and Soul Pics text layers
What we learned
A hybrid architecture can be more useful than sending every operation to a hosted model. Local models are well suited to repeatable subject extraction, while an explicit generative-image API remains valuable when the user deliberately asks for a new background. Clear cost and processing boundaries are part of the product experience, not just documentation.
What's next for Soul Pics
Next steps include a simpler packaged installer, broader hardware compatibility, downloadable local-model bundles, reusable project files, more composition templates, and additional edge-quality controls for difficult subjects such as hair, glass, and translucent materials.
Log in or sign up for Devpost to join the conversation.