Skip to content

i&roof.top

Talk to the people you miss.

Export a Telegram or WhatsApp chat. An LLM continues it in the style of one person, with their bubbles, stickers, GIFs, reactions and voice. On your computer, with any model, offline if you like.

A chat continues in the style of a real person, then a friend opens the shared link on a phone

Start in a minute ​

sh
brew install --cask irooftop/tap/irooftop   # macOS
# Windows and Linux: direct downloads under "Download the app" above
# Open the app, then Settings → model and key → Test
sh
brew install irooftop/tap/rooftop
export OPENAI_API_KEY=…    # OpenRouter by default, any OpenAI-compatible API works
rooftop                    # http://127.0.0.1:8080, then drop an export onto the page
sh
docker run -d -p 8080:8080 -e OPENAI_API_KEY=… \
  -v rooftop-data:/data ghcr.io/irooftop/rooftop
sh
cargo install rooftop      # Rust ≥ 1.88
OPENAI_API_KEY=… rooftop
sh
ollama pull qwen3          # any local model with tool calling
OPENAI_BASE_URL=http://localhost:11434/v1 OPENAI_MODEL=qwen3 rooftop --offline

Then three steps: export a chat from Telegram Desktop or WhatsApp, drop the folder, .zip or .txt onto the page, and press New chat to pick who the AI plays: the other person, or yourself. No chat of your own at hand? Try the fictional ones: rooftop --import ./examples/telegram.

How it works ​

A Telegram or WhatsApp export goes into iRoof.top, an LLM writes the answers, and the chat goes on

The export is read once, on your computer. Each reply sends the model a system prompt with the style profile, your notes and the media descriptions, then the most recent part of the chat that fits the history budget. Older parts are folded into a short memory, and the persona can still search them. The model answers with tool calls (send_message, send_sticker, react…), which become bubbles, stickers and reactions. More →

Where your chat goes ​

Network
Importing, the style profile, search, storagenone: it all happens on your computer
A reply, a memory summarythe model endpoint you choose, and nothing else
Describing media, transcribing voicethe media model, only when you press Describe
Share links over the internet, Telegramonly if you turn them on; Offline mode turns them off

Questions ​

Which model should I use?

Any chat model with tool calling behind an OpenAI-compatible /chat/completions endpoint. Bigger models imitate a style better. For Describe in the media library, the media model must also accept images (and audio for voice messages). Test in Settings tells you in plain words what is wrong, e.g. a rejected key or an unknown model.

What does it cost?

Nothing with a local model. With a cloud model you pay your provider per token: a reply costs about one history budget of input (120,000 characters ≈ 34k tokens by default; the prompt is built to stay cacheable, so providers with prompt caching bill most of it at the cached rate) plus a few short tool calls. Lower the budget in Settings to pay less per reply.

Does my export have to be small?

No. Exports of 120,000+ messages and 13 GB of media import fine, from the browser or with rooftop --import <folder>. The search and the history budget keep each reply's prompt the same size, however long the chat is.

Can a friend talk to the persona?

Yes, with a share link: on your Wi‑Fi, or over the internet at name.iroof.top, with a PIN and message limits. Visitors see the chat only: no settings, notes, prompts or other chats.

A note on care

This is meant for staying close to people who are far away. The persona stays in character but answers honestly if you sincerely ask whether you are talking to an AI, and responds with care if you seem to be in distress.

Released under the MIT License.