Idea to Short

Kalki is an open-source studio where five AI agents write, illustrate, voice, animate and cut a vertical video from one line of text. Self-hosted, with your own keys.

DirectorScreenwriterArtistAnimator
Producer

A finished 9:16 video, labelled as AI-generated, with title, description and tags ready for review.

One studio, a Hinglish channel

A channel carries its audience, language, hooks and a recurring cast with written soul documents. These three ship as seed data. Pick one.

Money, life hacks and relatable Gen Z moments

Audience
Indian Gen Z, 18 to 25
Language
Hindi and Hinglish
Default length
45 seconds
  • Did you know...
  • POV:
  • This is why you're broke

Aryan, 22

Moved from Jaipur to Delhi for college, surviving on a tight monthly allowance while trying to look like he belongs to a richer crowd.

  • financially anxious but outwardly chill
  • self-deprecating
  • aspirational

Priya, 21

Grew up in a middle-class Mumbai family who wanted an engineer, and quietly built a 40K Instagram following while pretending to study.

  • sarcastic but loveable
  • bold and direct
  • hyper-aware of aesthetics

Five agents, one hand-off

A LangGraph director passes one state object down the line. Each bar is sized by what that stage makes.

Director1 research pass

First, the Director reads the prompt, researches the topic and picks the channel, cast and world.

ScreenwriterScript and metadata

Then the Screenwriter (Gemini) writes the hook, scenes and voiceover, plus title, description and tags.

Artist1 image per scene

Next, the Artist draws every scene with Stability AI, plus a thumbnail.

Animator1 video job

The Animator sends scenes to Seedance or Kling with up to 12 character references.

Producer3 FFmpeg passes

Last, the Producer merges video and ElevenLabs voice, labels the file and cuts a thumbnail.

Inside the studio

Real screens from a local install, seeded with the three demo channels. Point at a row to see it.

  1. Kalki Overview screen
  2. Kalki Generate screen
  3. Kalki Agent monitor screen
  4. Kalki Channels screen
  5. Kalki Characters screen
  6. Kalki Worlds screen
  7. Kalki Library screen
  8. Kalki Settings screen

Built to run unattended

Agent monitor listing pipeline runs
Live agent logEvery step goes to Postgres and streams over SSE.
Seedance
→ Kling
Video fallbackIf one video provider fails, the other takes the job.
OWNER EDITOR VIEWER
Roles and approvalsNew sign-ups wait for an owner.
Character cards with soul documents
Soul documentsLooks, voice and quirks that keep a cast consistent.
<=>
pgvector cosine searchFind similar characters and worlds.
WhatsApp
Optional chat controlStart a reel by message.

One file, every feed

Each reel is a 9:16 MP4 that every short-video platform takes as is. The Library writes a caption sized for each one and tells you where its AI label lives.

How creators earn Publishing guide

  • YouTube Shorts100-character title, 5,000-character caption, 3 hashtags
  • TikTok2,200-character caption, 5 hashtags
  • Instagram Reels2,200-character caption, 5 hashtags
  • Facebook Reels2,200-character caption, 5 hashtags
  • Snapchat Spotlight160-character caption, 3 hashtags
  • Pinterest100-character title, 500-character caption, 5 hashtags
  • X280-character caption, 2 hashtags
  • LinkedIn3,000-character caption, 3 hashtags

Labelled, never laundered

Kalki makes synthetic media and says so. These are design rules, and the test suite checks them.

Every file is tagged

The Producer writes an AI-generated note into the video container. Kalki never strips provenance signals and never fakes camera or device metadata.

Your keys, their terms

Kalki only calls providers with keys you supply. It does not create accounts, solve CAPTCHAs or rotate proxies.

You disclose, you publish

Uploading stays manual. Turn on your platform's altered or synthetic content setting, such as YouTube's, when you post.

No shell over chat

The WhatsApp webhook fails closed, checks a secret in constant time and can only start reels or read status.

$ ffprobe -show_entries format_tags reel_final.mp4
[FORMAT]
TAG:comment=AI-generated content (created with Kalki)
TAG:encoder=Kalki
[/FORMAT]

Built on open parts

MIT licensed. Read it, fork it, swap any provider.
Next.js 16App Router, server routes, SSE
LangGraph.jsThe five-node agent graph
Prisma 7Typed schema and migrations
PostgreSQL + pgvectorData and similarity search
NextAuth v5Sign-in, roles, approvals
FFmpegMerge, label, thumbnail
Gemini 2.5 ProResearch, scripts, embeddings
BunInstall, run, test

Run it on your machine

You need Bun, Docker, FFmpeg and a Gemini key. Image, voice and video keys are per provider.

Read the setup guide

git clone https://github.com/harshitwandhare/kalki && cd kalki
cp .env.example .env.local      # add AUTH_SECRET and your API keys
bun install
export POSTGRES_PASSWORD=change-me
bun run db:up
bunx prisma migrate deploy
SEED_OWNER_EMAIL=you@example.com SEED_OWNER_PASSWORD='a-long-password' bun run db:seed
bun run dev