Ideas in. Attention out. A private, self-hosted studio for planning, producing, and exporting short-form social videos without paid APIs.
SideClip turns a campaign brief into a 30-idea content plan, helps you refine each hook, and renders vertical videos directly in your browser. Accounts, projects, uploads, and optional local AI stay on infrastructure you control.
Small teams need a consistent stream of social video, but subscriptions, editing timelines, and blank-page anxiety slow down the work. SideClip provides a useful production loop without introducing another monthly bill:
- Describe the product, audience, and goal.
- Generate a month of story, education, and promotion ideas.
- Edit the hook, supporting copy, media, color, and voiceover.
- Export a 9:16 WebM, captions, and a ready-to-post caption pack.
| Capability | Included |
|---|---|
Secure local accounts with salted scrypt hashes |
✅ |
| Persistent private projects and media library | ✅ |
| Automatic device drafts, account autosave, and last-project restore | ✅ |
| Built-in zero-cost content planning engine | ✅ |
| Brand voice profiles and brand-banned word enforcement | ✅ |
| Goal-driven calls to action across the 30-day arc | ✅ |
| Product-specific hook angles and publish-readiness checks | ✅ |
| Six distinct procedural video styles | ✅ |
| Complete hook-aligned social captions | ✅ |
| Plan-wide readiness summary with per-post scores | ✅ |
| Optional private AI through local Ollama | ✅ |
| Uploaded image and video backgrounds | ✅ |
| Recorded/uploaded voiceovers embedded in exports | ✅ |
| Browser-rendered 1080×1920 (9:16) WebM video | ✅ |
| Full-quality content generation even when offline | ✅ |
| Persistent light and dark themes | ✅ |
| SRT captions, posting packs, and device sharing | ✅ |
| Installable PWA and offline core interface | ✅ |
| Docker deployment, rate limiting, and security headers | ✅ |
Requires Node.js 20+. There are no runtime dependencies, so no install step is required.
git clone https://github.com/SubchiBeats/sideclip.git
cd sideclip
npm startOpen http://localhost:4173.
On Windows, you can also double-click run.ps1.
SideClip works without an AI service. For richer ideation, install Ollama, pull a free local model, and provide its name:
ollama pull llama3.2:3b
$env:OLLAMA_MODEL="llama3.2:3b"
npm startPrompts stay between SideClip and your configured Ollama server.
On Windows, after installing Ollama and pulling the model once, you can also
double-click run-local-ai.ps1.
SideClip treats the local model like a copywriter working with an editor:
- Few-shot grounding. Each prompt includes two on-brand example posts drawn from the built-in generator, so the model sees the target specificity and format for that exact business before writing.
- Hybrid captions. The model writes the creative hook, body, call to action, and (for numbered hooks) the list items; SideClip assembles the caption around them so length, numbered-promise delivery, a concrete brief detail, and the closing CTA pass by construction.
- Batched review and retry. Ideas are requested in small schema-constrained batches, scored by the publish-readiness reviewer, and failed drafts are sent back once with the specific feedback quoted in the prompt before any slot falls back to the built-in generator.
- Brand controls. Brand voice, campaign goal, and brand-banned words are part of every prompt, and invented discounts are blocked at review.
- Claims grounding. The brief's description plus the optional "what you actually offer" list are the only facts copy may state. Copy that asserts staff, certifications, guarantees, or freebies outside that ground truth is rejected for AI drafts and flagged "verify before publishing" for human edits. Listing real specifics turns claims that would be flagged as invented into legitimate, usable detail - so grounding the model makes it write more, not less.
- Targeted repair. Before discarding a draft, SideClip salvages the failure modes the model hits most - over-long or duplicate calls to action, over-long supporting lines, and weak product connection - with deterministic fixes grounded in the product, goal, and the model's own words (never fabricated), then re-reviews and keeps the result only if it now clears the bar.
- Top-up rounds. If review still leaves slots empty after the retry, SideClip asks for up to two fresh batches before any slot falls back to templates.
- Labeled output. Model-written posts carry an "AI" chip in the content plan so you know exactly which days deserve a closer read before publishing.
Sampling is tunable with OLLAMA_TEMPERATURE (default 0.8), OLLAMA_TOP_P
(0.9), and OLLAMA_REPEAT_PENALTY (1.2). A full 30-post run on a small CPU
model typically takes one to two minutes; a larger free model such as
qwen2.5:7b or llama3.1:8b writes noticeably stronger copy and still runs
fully local.
To measure the local model's quality before and after a change, run the evaluation harness against varied briefs:
$env:OLLAMA_MODEL="llama3.2:3b"; node tools/ai-eval.jsIt reports, per brief, how many posts the model wrote, the average
publish-readiness score, duplicate hooks, and any invented-offer leaks, plus a
histogram of the top reject reasons so the next refinement targets the actual
failure mode. Runs use a fixed sampling seed (OLLAMA_SEED, default 42 in the
harness) so before/after comparisons measure the change, not sampling noise.
SideClip automatically keeps an unsigned-in draft in the visitor's browser. Signed-in campaigns are also autosaved to the private SideClip server and the last opened campaign is restored on return. Sign-in sessions are stored as hashed tokens and remain valid through normal server restarts for up to 30 days.
Browser / PWA
├─ campaign planner and clip editor
├─ shared generator module (works fully offline)
├─ Canvas + MediaRecorder 1080×1920 video renderer
├─ microphone voiceover capture
└─ captions, posting packs, and Web Share
│
▼
Zero-dependency Node server
├─ HTTP-only sessions and scrypt password hashes
├─ project and media ownership checks
├─ atomic local JSON persistence
├─ constrained private uploads
└─ shared generator module or optional Ollama adapter
generator.js is one shared module: the server uses it for /api/generate and
the browser loads the same file, so offline (PWA) plans match server plans
exactly and publish-readiness scoring can never drift between the two.
SideClip intentionally avoids a framework, external database, and runtime npm dependencies. This keeps self-hosting straightforward and the operating cost at zero on hardware you already own.
docker compose up --build -dThe named sideclip-data volume stores accounts, projects, and uploads.
npm testTests cover frontend contracts, offline generation, salted password verification, authentication, project persistence, private uploads, cross-origin write protection, data export, account deletion, unique post copy, hook relevance, promised-list delivery, and collision-proof video layout.
Run SideClip behind a TLS reverse proxy such as Caddy or nginx. Persist and
back up data/. When HTTPS is active, use:
HOST=0.0.0.0 PORT=4173 COOKIE_SECURE=true npm startSee SECURITY.md before exposing an installation publicly.
The default app is private and free to operate on hardware you already own. Public hosting, domains, backups, and large-model compute can still cost money depending on your deployment.
Direct automated social posting is intentionally not included. Social platforms require user-owned developer credentials, app review, and changing API permissions. SideClip creates videos, captions, posting packs, and uses the device share sheet instead.
Contributions are welcome. See CONTRIBUTING.md for the development workflow and project principles.
MIT — see LICENSE.