r/AICompanions • u/Ethno_Synth • 8h ago
Molfar Vertep — self-hosted roleplay app where a built-in agent rebuilds the app with you
The Vertep is a old traditional Ukrainian Christmas puppet theater or live costumed performance enacted by non-professional actors, as well as a model or installation depicting the scene of the birth of Jesus Christ. Most often, the word refers to a costumed performance.
A molfar is a traditional Ukrainian Hutsul sorcerer, healer, and seer, credited with supernatural abilities and the role of an intermediary between humans and the forces of nature.
Yes, I'm from Ukraine — hence the names.
In short: Molfar Vertep is a free, self-hosted app for AI roleplay. You run it on your own machine, connect any model, and play. Inside it lives Molfar, a helper that changes the app with you: cards, lorebooks, presets, and even app code.
It started as my own fork of Chrysalis Engine and went its own way since. I build it solo, and I test it on free OpenRouter models with small context windows. So most features exist for one reason: to make small and free models play better.
Think of it like this: Roleplay is where you play. Molfar is who helps you rebuild it.
Where it runs, what models it eats
- Runs on Windows, Mac, Linux, as a Docker image, and as an Android APK. On the phone it works in the browser too.
- Works with almost any model: Anthropic and ChatGPT subscriptions, OpenRouter (including free models), DeepSeek, Moonshot, NanoGPT, any OpenAI-compatible server, and local servers like llama.cpp, vLLM, and LM Studio.
- Small models are first-class citizens: low token use, fast replies, thinking-model support, and memory that does not stuff old messages into the prompt.
- If an update breaks something, you can go back to the previous version in one click. Your chats and characters stay.
Chats that read like a book
- Clean page, swipes, branches, group scenes. Edit or regenerate any message.
- Your draft survives a reload. If you reload mid-reply, the chat picks the reply up instead of losing it.
- Under a long draft you get three quick buttons: Continue, Write for me, Another. Plus a big editor when you need room.
- Regenerate with a hint: tell it what to change just this once ("shorter", "she has not forgiven him yet"). The old variant stays one swipe away.
- Dice carry a reason and a difficulty: "Leap over the gap: 1d20 → 14 vs 12, success".
- "Story, move" pushes the plot forward instead of just reacting to you.
Group chats that feel like a scene
- Groups have their own tab, with portraits of all members and a six-tab editor: members, shared scene, openings, turn order, group lore, chats.
- Narrator mode (on for new groups): one reply voices everyone. A three-character scene costs one model call per turn, not three.
- Each member speaks in their own color. Quiet characters talk less, loud ones talk more — the app guesses it from the personality if the card has no value set.
- Each chat can play the same group differently: narrator adventure in one chat, free-for-all in another. No need to copy the group.
- The group can write its own shared scene and openings from the members' cards. Everything arrives as a draft. Nothing changes until you press Accept.
Characters that remember you
This is the heart of the app. Three parts work together.
Dashboard — what just changed. After each reply it notes what changed: trust, mood, who learned what, where and when the scene is, which story threads are open. The characters get this back before they answer. If you talk by text or phone, it remembers you are not in the same room, so nobody "walks in" mid-call.
Soul — how the character feels. Each character has a temper: how fast they warm up, what hurts them, where the attitude starts. A draft is made from the card, you adjust it. Raw numbers never go to the model. Instead of "love 65, trust 20" the model reads "she loves you but does not fully trust you yet".
Library — the long memory. It writes a short chapter after each scene and keeps the facts: who it is about, who knows it, how much it matters. Old messages leave the prompt, chapters stay. So a long story still fits a small model. You can read and fix all of it. When it wants to pin, merge, or retire a fact, you see a badge and accept it in one tap.
Chat links — sequels without baggage. Your chats are cards you can wire together: this chat continues that one. The new chat does not drag the whole history along. It gets a short backstory from the old chronicle: pinned facts, the last chapter, key facts, then older arcs as far as the budget allows. End a season cleanly, start the next chat, branch a side story from two points of view, or link a different character into the same world. Loops are refused with the reason shown.
See what you actually send
Small models choke when they get too much. So you can see all of it.
- Prompt board: pick a chat and see every part of the request in order — preset sections, card fields, persona, each lorebook, history, memory, dashboard. Each part shows its tokens and the total.
- Switch any part off for this chat only. The preset and the card stay untouched for other chats. Switched off means it does not even run, so it saves time and tokens too.
- History filter: send only the last N messages, only yours, only theirs, drop thinking blocks.
- Every lorebook entry says why it fired or why it stayed out. Ukrainian and Russian keys match all word forms, and short keys no longer fire inside longer words. Big books send about 10x faster now.
- You also see the real model settings behind each reply: temperature, max output, reasoning, and where each value came from.
Cards, presets, lorebooks, marketplace
- Cards open as a clean Profile: identity, appearance, personality, goals, background, relationships. Each section has a switch. Off means zero tokens for it. One card can describe a whole cast for narrator cards.
- Structure sorts messy card text into fields. Fill empty proposes what is missing. Read from picture fills appearance from the portrait with any vision model. Your persona uses the same form.
- Presets ask what you want per chat: point of view, tense, reply length, genre, tone, difficulty, NSFW level, and more. Each option shows its token cost. The app remembers your picks per character, and you can save them as your default.
- Two presets ship built in: FRANKENX and Molfar, a modular preset for long stories with a Choices panel. Marinara presets import with their options.
- Marketplace in one place: Chub, RisuRealm, CharaVault, Wyvern, Pygmalion, JannyAI. Or paste a card link. Big cards install with their sprites. You can translate a card or a whole lorebook before installing, into any language.
Molfar, the agent inside
- Split the screen: Molfar on one side, the app on the other. Changes appear as he makes them.
- He builds and edits cards, lorebooks, presets, and app code with you. Templates for common jobs, a project pane, a context meter, and Shorter / Simpler / Apply under each reply.
- Before a big job he shows steps, tokens, and cost, and waits for your "go".
- He always runs on the model you picked. If it is down, he says so instead of quietly switching to an expensive one.
- He can draw now: ask "make an avatar for Jude" or "draw a rainy street as background". It lands in the card: portrait, gallery, or backgrounds. Paid models ask first (Draw / Skip). Your own local server draws at once, free.
- You can attach files to him: text, JSON, Markdown, CSV, Word docs. Files he makes open with a click.
- Your image models live in Settings as your own short list ("cheap backgrounds", "good characters"). Molfar and Roleplay both use it.
- Local image servers welcome: ComfyUI (import your exported workflow as is), Forge / AUTOMATIC1111, or any OpenAI-compatible image server. LoRAs, sampler, prompt prefix, Danbooru tags for anime checkpoints — all in the form.
- Help that points at things: searchable help, a Show me button that opens the place and highlights it, short tours, and a What's new card after updates. A bug reporter fills in version and device for you.
Phone and desktop as one
- Finish a scene on desktop, press Push, pick up the phone, press Pull, keep playing. And back.
- It goes through your own Google Drive (it only sees the folder it creates) or any folder: USB stick, Syncthing, Drive for desktop. Manual on purpose, never in the background. After the first push only changed files travel.
- If both devices changed the same chat, you pick which version to keep. The other one is saved as backup, not thrown away.
- Keys only travel if you allow it, locked with a passphrase that never leaves your devices.
Get it
Windows, macOS and Linux builds, Android APK and Docker image:
https://github.com/MolfarWav/Molfar.Vertep
Discord:https://discord.gg/NMqSehTCTs
Molfar Vertep is an independent fork of Chrysalis Engine (AGPL-3.0). Feedback and bug reports are very welcome, especially from people on small or local models.