Skip to content

bzhang-git/wrap2025

 
 

Repository files navigation

Wrapped 2025

Your texting habits, exposed. A Spotify Wrapped-style visualization of your iMessage and WhatsApp history.

-> wrap2025.com

Features

  • Total messages + words – sent, received, per day
  • Inner circle – top person + top 10 contacts (expandable)
  • Group chats – overview + expandable top 10 groups on one slide
  • Personality – diagnosis with starter %, reply time, sent/recv ratio, peak day/hour
  • Who texts first – conversation initiator %
  • Response time – how fast you reply
  • 3AM bestie – late night conversations (midnight–5am)
  • Busiest day – your wildest day with top 10 people from that day (expandable)
  • Grind + marathon – longest streak of daily texting and biggest single-day 1:1 marathon
  • Vibe check – who’s heating up (H2 > H1) vs ghosted (dropped after June)
  • Biggest fan / Down bad – who texts you most vs who you text most
  • Peak hours – most active day/hour
  • Contribution graph – GitHub-style activity heatmap
  • Top emojis – your most-used emoji lineup

Installation

iMessage Wrapped

1. Download the script

curl -O https://raw.githubusercontent.com/kothari-nikunj/wrap2025/main/imessage_wrapped.py

2. Grant Terminal access

The script needs to read your Messages database:

System Settings -> Privacy & Security -> Full Disk Access -> Add Terminal

(Or iTerm/Warp if you use those)

3. Run it

python3 imessage_wrapped.py

WhatsApp Wrapped

1. Download the script

curl -O https://raw.githubusercontent.com/kothari-nikunj/wrap2025/main/whatsapp_wrapped.py

2. Grant Terminal access

The script needs to read your WhatsApp database:

System Settings -> Privacy & Security -> Full Disk Access -> Add Terminal

(Or iTerm/Warp if you use those)

3. Run it

python3 whatsapp_wrapped.py

Combined Wrapped (iMessage + WhatsApp)

Merges stats from both platforms into a single unified report.

1. Download the script

curl -O https://raw.githubusercontent.com/kothari-nikunj/wrap2025/main/combined_wrapped.py

2. Grant Terminal access

The script needs to read both message databases:

System Settings -> Privacy & Security -> Full Disk Access -> Add Terminal

(Or iTerm/Warp if you use those)

3. Run it

python3 combined_wrapped.py

The combined script will:

  • Analyze both iMessage and WhatsApp data
  • Use your AddressBook to reconcile contacts across platforms
  • Merge top contacts, group chats, and all other stats
  • Show a platform breakdown slide
  • Work even if you only have one platform installed

Your wrapped will open in your browser automatically.

Options

# Use 2024 data instead of 2025
python3 imessage_wrapped.py --use-2024
python3 whatsapp_wrapped.py --use-2024
python3 combined_wrapped.py --use-2024

# Custom output filename
python3 imessage_wrapped.py -o my_wrapped.html
python3 whatsapp_wrapped.py -o my_wrapped.html
python3 combined_wrapped.py -o my_wrapped.html

If you don't have enough 2025 messages yet, the script will automatically fall back to 2024.

Privacy

100% Local - Your data never leaves your computer

  • No servers, no uploads, no tracking
  • No external dependencies (Python stdlib only)
  • All analysis happens locally
  • Output is a single HTML file

You can read the entire source code yourself.

Requirements

  • macOS (uses local message databases)
  • Python 3 (pre-installed on macOS)
  • Full Disk Access for Terminal
  • For WhatsApp: WhatsApp desktop app installed with chat history

How it works

iMessage

The script reads your local chat.db (iMessage database) and AddressBook (Contacts) using SQLite queries.

WhatsApp

The script reads your local ChatStorage.sqlite (WhatsApp database) using SQLite queries. WhatsApp stores contact names directly in the database.

Combined

The combined script reads both databases and merges the data:

  • Uses AddressBook contacts to reconcile names across platforms
  • Combines message counts, response times, and other stats
  • Merges top contacts (deduplicating by name when possible)
  • Shows platform breakdown with message counts per platform
  • Works even if only one platform is available

All scripts analyze your message patterns, resolve identifiers to contact names, and generate a self-contained HTML file with an interactive gallery.

FAQ

Q: Is this safe? A: Yes. The scripts only read local databases, write one HTML file, and make zero network requests. No data is sent anywhere.

Q: Why do I need Full Disk Access? A: Apple protects message databases. Terminal needs permission to read them.

Q: Can I run this on iOS? A: No, iOS doesn't allow access to message databases. macOS only.

Q: The names are showing as phone numbers A: The script tries to match identifiers to contact names. Some may not resolve if the formatting differs.

Q: Where is the WhatsApp database? A: WhatsApp stores its database at:

  • ~/Library/Group Containers/group.net.whatsapp.WhatsApp.shared/ChatStorage.sqlite (current version)
  • ~/Library/Containers/com.whatsapp/Data/Library/Application Support/WhatsApp/ChatStorage.sqlite (older versions)

People Wrapped (AI-Powered)

Get AI-generated summaries of your top 25 messaging relationships. Uses Claude Code to analyze your full message history and write personalized insights for each contact.

Quick Start

  1. Download the script:
curl -O https://raw.githubusercontent.com/kothari-nikunj/wrap2025/main/people_wrapped.py
  1. Start Claude Code with permissions disabled (needed for file writes):
claude --dangerously-skip-permissions
  1. In Claude Code, say:
Run python3 people_wrapped.py
  1. Wait ~10 minutes for extraction + AI summaries

  2. Open people_wrapped_2025.html in your browser

How It Works

The "trick" is that Claude Code itself generates the summaries - no API key needed:

  1. Script extracts your top 25 contacts from iMessage/WhatsApp
  2. Script prints instructions for Claude Code
  3. Claude Code reads the message files and writes personalized summaries
  4. Script builds a swipeable HTML report

What You Get

  • Personalized 3-4 paragraph summaries for each contact
  • Direct quotes from your conversations
  • Themes, inside jokes, memorable moments
  • How the relationship evolved through the year
  • Tone matched to relationship type (family, partner, friend, colleague)

Credits

Made by @nikunj

Not affiliated with Apple, Meta, Spotify, or WhatsApp.

License

MIT

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 75.1%
  • HTML 24.9%