Model or dataset
athcagithub/SlideSmith avatar
athcagithub/SlideSmith

Slidesmith: a local carousel generator that hands posting to post-bridge

TikTok Slideshow Generator

335 stars79 forksTypeScriptNOASSERTION

At a glance

What is it?
Two API keys, one small Express process on your own machine, and a queue of TikTok and Instagram carousels rendered in the browser. What is worth understanding is where credentials are shared across projects, why the server binds to loopback, and what the noncommercial licence rules out.
Who is it for?
Slidesmith fits an operator who already pays for OpenRouter and post-bridge, publishes only to their own connected accounts, and is willing to run a credential-holding Express process on loopback. Before committing, check the licence against your revenue model, replace the bundled backgrounds if the work is commercial, and confirm the model you pick in the OpenRouter dropdown handles the slide length and caption shape your brand needs.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 112 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.

Editorial analysis

One npm run dev starts a Vite app and an Express key vault on two ports

The dev script is a single command that runs two things at once. Vite serves the web UI on port 5173, and a watched Node process runs a small Express server on 8787 that holds your API keys and talks to Claude and post-bridge. The Express process is the one with the watcher attached, so edits under `server/` restart it on save. For a single process deployment you build the UI first and then start the server on its own:

bash
git clone <this-repo>
cd slidesmith
npm install
npm run dev
bash
npm run build
npm start

`npm run build` runs `tsc -b && vite build`, and `npm start` runs `node server/index.js`, which serves the built UI and the API from one process on port 8787. In development the URL you open is printed by Vite and defaults to http://localhost:5173. The stack behind both paths is React 19 with Vite and Tailwind for the UI, and no database anywhere in it.

The Brain is per project, but keys and model choice are shared

A project in Slidesmith is one brand or one account. It carries its own Brain, its own default posting accounts, and its own choice of background packs. The Brain holds the niche, the app or brand, the audience, and a style memory, and it shapes every generation that project produces. What it does not carry is credentials. Your OpenRouter key, your post-bridge key, and the model you picked from the dropdown belong to the installation, so switching brands means re-reading the same Brain text but not re-entering keys or choosing a model again. The framing is also worth separating: the headline describes Claude writing the slideshows, while the settings description says generation runs through OpenRouter with any model from the dropdown. One Generate click writes a batch into the queue with backgrounds already applied.

The server hands your API keys back to the Settings page, so it binds to loopback

This is the sharpest edge in the project. The local server holds the OpenRouter and post-bridge keys, and it also returns them to the Settings screen so you can review or change them, which makes that port a credential endpoint rather than a private internal port. The bind address defaults to 127.0.0.1, loopback only, and the env file is blunt about why: do not expose it to a network unless you are behind a firewall and know what you are doing. Two overrides exist for self hosting, and neither one carries a key:

bash
PORT=8787
HOST=127.0.0.1
SLIDESMITH_DIR=/path/to/data

The env file also says plainly that you do not need to put API keys there, since the Settings screen is the intended place. Keys leave the machine only to reach the services they belong to, and the browser never sees them, they stay on the local server.

Slides are rendered in your browser, not by an image model

There is no image-gen API in the pipeline and no per image cost. Rendering happens in the browser: text is drawn over either a gradient or a background image from the Library. Generate auto applies a chosen background to every slide in the batch, and the Edit button on any card opens a preview of the carousel where you can change the caption, the hashtags, the text on each individual slide, and the background on each individual slide. The choice is per slide rather than per batch, so a pack that suits the opening slide can be swapped out by the fourth one. Selecting no packs at all leaves the deck on plain gradients. Approval is the step that turns slides into files: each slide is rendered to an image and handed to post-bridge.

The bundled backgrounds came off the web, not a stock library

The repository ships roughly 140 curated background images under `public/library/`, sorted into aesthetic packs that each project selects from. They are a starting point rather than an asset library: they were collected from the web, they may be subject to third party copyright, and they are not licensed stock. The supported way past that is the Library tab, where your own Apify key scrapes any Pinterest search and drops the results into `~/.slidesmith/library/` next to the packs. Keeping the two sources apart matters when the carousel is going anywhere commercial, because the bundled set carries no grant from the photographers or the platforms those images came from, and the licence below does not supply one either.

Everything past Approve lives in post-bridge, not on your disk

Local storage is small and specific. API keys, Brain, and settings sit in `~/.slidesmith/config.json`. Generated drafts that have not been scheduled yet sit in `~/.slidesmith/queue.json`. Scraped library images go to `~/.slidesmith/library/`, with the bundled packs staying in the repository at `public/library/`. Nothing else is local: media hosting, scheduled posts, and results all live in your post-bridge account, and the Schedule and Results screens read them back from there. Approve is the boundary. You pick which connected accounts receive the carousel, then either set a time or save it as a draft in post-bridge. Accounts are connected inside post-bridge rather than here, and they appear in Slidesmith once connected.

PolyForm Noncommercial closes the door on reselling it

The LICENSE is PolyForm Noncommercial 1.0.0, covering use, modification, self hosting, and sharing for noncommercial purposes. Commercial use needs separate permission from the author, and three shapes are called out: reselling it, hosting it as a paid service, and bundling it into a product you charge for. That matters for the deployment story, because the design assumes a small number of people running a dashboard on their own machine for their own accounts, with no database and no tenancy model underneath to separate them. Version in package.json is 0.0.0, the package is marked private, and the repository publishes no GitHub releases, with the last push to main dated 11 June 2026.

Editorial conclusion

Slidesmith fits an operator who already pays for OpenRouter and post-bridge, publishes only to their own connected accounts, and is willing to run a credential-holding Express process on loopback. Before committing, check the licence against your revenue model, replace the bundled backgrounds if the work is commercial, and confirm the model you pick in the OpenRouter dropdown handles the slide length and caption shape your brand needs. The last push to main is dated 11 June 2026 and the project publishes no GitHub releases, so pin dependency versions rather than tracking the branch.

Frequently asked questions

What does Slidesmith need before it can generate a slideshow?

An OpenRouter key for the model that writes the copy and a post-bridge key for scheduling, posting, and analytics, both entered in the Settings screen and checked with Test connection. An Apify key is optional and only needed to scrape Pinterest images into the Library.

Where does Slidesmith keep my API keys and my unscheduled drafts?

Keys, Brain, and settings go to ~/.slidesmith/config.json, generated drafts that have not been scheduled yet go to ~/.slidesmith/queue.json, and scraped library images go to ~/.slidesmith/library/. Setting SLIDESMITH_DIR moves that whole directory.

Does Slidesmith post to TikTok and Instagram on its own?

No. Media hosting, scheduling, posting, and analytics are handled by post-bridge under your own account. Slidesmith renders each slide to an image and hands it over after you pick the connected accounts and either set a time or save a draft.

Can I use the bundled background images for commercial work?

The roughly 140 images in public/library/ were collected from the web, may be subject to third party copyright, and are not licensed stock. The licence is PolyForm Noncommercial 1.0.0, so commercial use needs separate permission from the author.

How many processes does Slidesmith run during development?

Two. The dev script starts the Vite web UI on port 5173 and a watched Node and Express server on 8787, and the Express side is the process that holds your keys. Building the UI and then running npm start collapses both into one Node process on 8787.

Official sources

  1. athcagithub/SlideSmith on GitHub
  2. Issues
  3. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/athcagithub-slidesmith.svg)](https://hysenlabs.com/projects/athcagithub-slidesmith)