Skip to content

risunCode/FRAMO

Repository files navigation

Framo

Disposable emails, instant OTPs, automated account creation. No wait, no hassle.

A fast, single-binary toolkit for temporary emails, OTP capture, and account automation — available as both a TUI dashboard and a REST API server. Built in Rust.

Screenshots

image

Features

  • Instant email creation — generate disposable emails on 12 supported domains
  • Real-time OTP detection — auto-extracts verification codes from incoming mail
  • TUI Dashboard — interactive terminal UI with grid table, scrolling, color-coded status
  • REST API server — headless mode for bot/Telegram/webhook integration
  • ChatGPT signup automation — with TLS fingerprint spoofing (Chrome 131)
  • Devin signup automation — automated account creation
  • Session export — saves session JSON after signup, compatible with SesWi and Cookie Editor
  • Batch signup — create up to 50 accounts concurrently (5 workers)
  • Per-addon blacklist — separate blacklists for ChatGPT & Devin, auto-managed
  • Configurable — JSON config at ~/.framo/.config
  • Update checker — auto-checks GitHub for new releases
  • Clipboard integration — copy OTP or email with a single keystroke
  • Cross-platform — Windows, Linux, macOS, Docker

Supported Domains

apple.edu.pl mailo.edu.pl nik.edu.pl itmo.edu.pl mailer.edu.pl imail.edu.vn gddp2018.edu.vn jakarta.io.vn newdelhi.io.vn mailer.io.vn newyork.io.vn dulieu.io.vn


Installation

Pre-built binaries

Download from Releases — available for Windows, Linux (x86_64, aarch64), and macOS (x86_64, aarch64).

Build from source

Requirements

Platform Requirements
All Rust 1.85+ / Cargo 1.85+
Windows Visual Studio Build Tools (MSVC), CMake, NASM, LLVM
Linux build-essential, cmake, nasm, libclang-dev, pkg-config
macOS Xcode Command Line Tools, cmake, nasm (via Homebrew)

CMake, NASM, and LLVM are required for BoringSSL (used by wreq for TLS fingerprint emulation).

Windows

# Install build dependencies
winget install Kitware.CMake
winget install NASM.NASM
winget install LLVM.LLVM

# Build
cargo build --release
# Binary: target\release\framo.exe

Linux (Debian/Ubuntu)

sudo apt update
sudo apt install -y build-essential cmake nasm libclang-dev pkg-config

cargo build --release
# Binary: target/release/framo

macOS

brew install cmake nasm

cargo build --release
# Binary: target/release/framo

Docker

docker build -t framo .

# TUI mode
docker run --rm -it framo

# API mode
docker run --rm -p 3700:3700 framo --api

Usage

CLI

framo              # Launch TUI dashboard (default)
framo --api        # Start REST API server on port 3700
framo --api --port 8080  # Custom port
framo --version    # Print version
framo --help       # Print usage

TUI Dashboard

Key Action
a Add email (apple.edu.pl)
n Add custom email (prompted)
g Generate random emails (prompted count)
h Devin signup automation
j ChatGPT signup automation
x Delete selected row
r Refresh selected email
> View inbox messages
< Back to email list
c Copy OTP to clipboard
e Copy email to clipboard
d Download all emails
↑↓ Navigate
q Quit

REST API

Start the server:

framo --api

Endpoints

Method Endpoint Description
GET /api/health Health check + version
GET /api/update Check for updates on GitHub
GET /api/config View current config
POST /api/email Create temp email
GET /api/email/:email/inbox Fetch inbox messages
GET /api/email/:email/otp Extract OTP (add ?wait=true to poll)
POST /api/signup/chatgpt Create ChatGPT account
POST /api/signup/devin Create Devin account
POST /api/signup/chatgpt/batch Batch ChatGPT signup (max 50)
POST /api/signup/devin/batch Batch Devin signup (max 50)
GET /api/blacklist View blacklisted domains
POST /api/blacklist Add domain to blacklist
DELETE /api/blacklist/:domain Remove from blacklist

Examples

# Create a random email
curl -X POST http://localhost:3700/api/email \
  -H "Content-Type: application/json" \
  -d '{}'

# Create email with specific domain
curl -X POST http://localhost:3700/api/email \
  -H "Content-Type: application/json" \
  -d '{"domain": "mailer.io.vn"}'

# Get inbox
curl http://localhost:3700/api/email/user@mailer.io.vn/inbox

# Get OTP (instant)
curl http://localhost:3700/api/email/user@mailer.io.vn/otp

# Get OTP (poll up to 6 attempts)
curl "http://localhost:3700/api/email/user@mailer.io.vn/otp?wait=true&attempts=6"

# ChatGPT signup
curl -X POST http://localhost:3700/api/signup/chatgpt \
  -H "Content-Type: application/json" \
  -d '{"password": "MyPassword123!"}'

# ChatGPT signup with specific email
curl -X POST http://localhost:3700/api/signup/chatgpt \
  -H "Content-Type: application/json" \
  -d '{"email": "user@mailer.io.vn", "password": "MyPassword123!"}'

# Batch ChatGPT signup (5 accounts)
curl -X POST http://localhost:3700/api/signup/chatgpt/batch \
  -H "Content-Type: application/json" \
  -d '{"count": 5, "password": "MyPassword123!"}'

# Batch Devin signup (3 accounts)
curl -X POST http://localhost:3700/api/signup/devin/batch \
  -H "Content-Type: application/json" \
  -d '{"count": 3}'

# Check for updates
curl http://localhost:3700/api/update

Configuration

Config file: ~/.framo/.config (JSON, auto-created on first run)

{
  "default_domain": "apple.edu.pl",
  "poll_interval_secs": 3,
  "otp_max_attempts": 6,
  "default_password": "",
  "domains": ["imail.edu.vn", "..."],
  "chatgpt_blacklisted_domains": [],
  "devin_blacklisted_domains": [],
  "output_dir": "~/Downloads/framo",
  "github_repo": "risuncode/framo"
}
Key Description Default
default_domain Domain for quick-add (a key) apple.edu.pl
poll_interval_secs Seconds between OTP poll attempts 3
otp_max_attempts Max OTP poll retries 6
default_password Pre-fill password for ChatGPT signup ""
domains Available email domains 12 domains
chatgpt_blacklisted_domains Auto-managed ChatGPT blacklist known domains
devin_blacklisted_domains Auto-managed Devin blacklist []
output_dir Where to save output files ~/Downloads/framo
github_repo GitHub repo for update checker risuncode/framo

Files

~/.framo/
├── .config       # persistent JSON config
└── logs.log      # structured log (append mode)

~/Downloads/framo/ (or configured output_dir)
├── tempmail/                    # downloaded email files
├── chatgpt/
│   ├── gpt-accounts.txt         # combined credentials (email|password)
│   └── Accountz-session/
│       └── chatgpt-*.json       # per-account session JSON
└── devin/
    ├── devin-accounts.txt       # combined accounts (email|name)
    └── Accountz-session/
        └── devin-*.json         # per-account session JSON

Session Export & SesWi Integration

After every successful ChatGPT signup, FRAMO automatically saves a session JSON file alongside the credentials.

This session file is fully compatible with:

  • SesWi Session Manager — import/export browser sessions, backup & restore accounts
  • Cookie Editor — browser extension for cookie import/export

How it works

  1. FRAMO creates a ChatGPT account (email + password)
  2. Cookies from chatgpt.com are captured and exported as JSON
  3. Two outputs are saved:
    • chatgpt/gpt-accounts.txt — combined credentials (email|password)
    • chatgpt/Accountz-session/chatgpt-{namemail}.json — per-account session JSON

Use cases

  • Easy migration — move accounts between browsers/machines by importing session JSON
  • Backup & restore — save sessions for later use without re-login
  • Bulk account management — create 50 accounts, import all sessions via SesWi

Domain Blacklist

FRAMO maintains separate blacklists per addon (ChatGPT and Devin).

Domains are automatically blacklisted when:

  • registration_disallowed — service rejects the domain
  • OTP timeout — 6 poll attempts with no OTP received

Blacklisted domains are:

  • Saved per-addon to ~/.framo/.config (chatgpt_blacklisted_domains, devin_blacklisted_domains)
  • Skipped in random_domain_for() selection
  • Fast-fail checked inside each worker after semaphore acquire (always fresh)

To un-blacklist, edit ~/.framo/.config manually or use the API:

curl -X DELETE http://localhost:3700/api/blacklist/apple.edu.pl

Project Structure

src/
  main.rs             # entry point, CLI parsing, mode routing
  config.rs           # AppConfig, blacklist, update checker
  models.rs           # EmailAccount, EmailMessage, InboxResponse
  browser.rs          # HTTP session with cookies
  provider.rs         # imail.edu.vn Livewire API
  utils.rs            # OTP extraction, clipboard, helpers
  api/
    mod.rs            # REST API routes + handlers (axum)
  dashboard/
    mod.rs            # TUI state + event loop
    table.rs          # grid/table renderer
    views.rs          # sidebar helpers
    actions.rs        # action constants
  addon/
    mod.rs            # addon registry
    common.rs         # shared: uuid_v4, poll_otp
    chatgpt/mod.rs    # ChatGPT signup flow (wreq + Chrome TLS)
    devin/mod.rs      # Devin signup flow

Tech Stack

Crate Purpose
tokio Async runtime
axum REST API framework
clap CLI argument parsing
wreq + wreq-util HTTP client with TLS fingerprint emulation (BoringSSL)
ratatui + crossterm TUI rendering
serde + serde_json Serialization
tower-http CORS middleware
tracing Structured logging
regex OTP extraction
arboard Clipboard
dirs Cross-platform directory detection

Acknowledgements

App icon: Arrow by Icons8

License

This project is licensed under the GNU General Public License v3.0.

About

Generate temporary .edu emails, watch inboxes in realtime, and auto-extract OTP codes — CLI, TUI dashboard & REST API

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors