A simple tool which lets you scrape twitter accounts and crosspost them to bluesky accounts! Comes with a CLI and a webapp for managing profiles! Works with images/videos/link embeds/threads.
···23> **Note**: This project is built on top of [**bird**](https://github.com/steipete/bird) by [@steipete](https://github.com/steipete), which provides the core Twitter interaction capabilities.
45-A powerful tool to crosspost your Tweets to Bluesky automatically. Now supports **multiple accounts**, **custom PDS (hosting) locations**, and a **user-friendly CLI** for easy management.
67## ✨ Features
89-- **Multi-Account Support**: Sync Twitter A -> Bluesky A, Twitter B -> Bluesky B, or multiple Twitters to one Bluesky.
10-- **Interactive CLI**: Manage all your account mappings and credentials without touching code.
11-- **Custom PDS Support**: Works with `bsky.social` or any independent Bluesky hosting provider.
12-- **Thread Support**: Maintains your Twitter threads perfectly on Bluesky.
13-- **Media Support**: Automatically migrates high-quality images and videos.
14-- **Smart Logic**: Automatically detects languages and expands short links.
15-- **Safety First**: Includes a `--dry-run` mode to test before you post.
1617---
1819-## 🚀 Quick Start (For Everyone)
2021### 1. Prerequisites
22-- **Node.js** installed on your computer.
23-- A Twitter account (preferably an alt/burner for the web cookies).
24-- A Bluesky account and an **App Password** (Settings -> Privacy & Security -> App Passwords).
2526### 2. Installation
27-Open your terminal and run:
28```bash
29git clone https://github.com/j4ckxyz/tweets-2-bsky.git
30cd tweets-2-bsky
31npm install
032```
3334-### 3. Setup (Using the CLI)
35-Instead of editing files, use our simple setup command:
36```bash
37-# 1. Set your Twitter cookies (one set of cookies works for all mappings)
38-./crosspost setup-twitter
39-40-# 2. Add your first account mapping
41-./crosspost add-mapping
42```
43-*Note: You can find your Twitter `auth_token` and `ct0` in your browser's developer tools under Application -> Cookies.*
4445-### 4. Run the Sync
46-```bash
47-# Build the project
48-npm run build
49-50-# Start the automatic syncing daemon
51-npm start
52-```
5354---
5556## 🛠 Advanced Usage
5758-### Backfilling Old Tweets
59-If you want to import your historical tweets for a specific account:
60```bash
61-# Get the command from the CLI help
62-./crosspost import-history
63-64-# Example: Import the last 10 tweets for a specific user
65-npm run import -- --username YOUR_TWITTER_HANDLE --limit 10
66```
6768-### Testing with Dry Run
69-See what would be posted without actually posting anything:
70```bash
71-npm start -- --dry-run
0000000072```
7374-### Management Commands
75```bash
76-./crosspost list # Show all active mappings
77-./crosspost remove # Remove an account mapping
78-./crosspost set-interval # Change how often to check for new tweets
79```
8081---
8283-## 📝 Configuration Details
84-85-- **Check Interval**: Default is 5 minutes.
86-- **Database**: Processed tweets are tracked per-account in the `processed/` folder so you never get duplicates.
87-- **Service URL**: If you use a custom Bluesky host (like `bsky.network`), you can set it during the `add-mapping` process.
8889## ⚖️ License
90MIT
91-92----
93-*Created with ❤️ for the decentralized web.*
···23> **Note**: This project is built on top of [**bird**](https://github.com/steipete/bird) by [@steipete](https://github.com/steipete), which provides the core Twitter interaction capabilities.
45+A powerful tool to crosspost your Tweets to Bluesky automatically. Now features a **Web Dashboard** for easy management, **Multi-account support** for different owners, and **Custom PDS** hosting support.
67## ✨ Features
89+- **Web Dashboard**: Modern interface to manage all your sync tasks.
10+- **Multi-User Mapping**: Let others add their accounts (e.g., Dan, Josh) with their own owners.
11+- **Multi-Account Support**: Sync Twitter A -> Bluesky A, Twitter B -> Bluesky B, etc.
12+- **Tailscale Ready**: Accessible over your local network or VPN.
13+- **Interactive CLI**: Manage everything from the terminal with `./crosspost`.
14+- **High Quality**: Supports threads, high-quality images, and videos.
01516---
1718+## 🚀 Quick Start
1920### 1. Prerequisites
21+- **Node.js** installed.
22+- A Twitter account (burner recommended) for global cookies.
23+- Bluesky account(s) with **App Passwords**.
2425### 2. Installation
026```bash
27git clone https://github.com/j4ckxyz/tweets-2-bsky.git
28cd tweets-2-bsky
29npm install
30+npm run build
31```
3233+### 3. Start Syncing & Web UI
034```bash
35+# This starts both the sync daemon AND the web dashboard
36+npm start
00037```
38+By default, the web interface runs at **http://localhost:3000**. If you are using Tailscale, it's accessible at `http://your-tailscale-ip:3000`.
3940+### 4. Setup (Web Dashboard)
41+1. Open the dashboard in your browser.
42+2. **Register** a new account (email/password).
43+3. Log in and go to **Global Twitter Config** to enter your cookies.
44+4. Use **Add New Mapping** to connect a Twitter handle to a Bluesky account.
0004546---
4748## 🛠 Advanced Usage
4950+### Disable Web Interface
51+If you only want to run the sync daemon without the web UI:
52```bash
53+npm start -- --no-web
000054```
5556+### Command Line Interface (CLI)
57+You can still manage everything via the terminal:
58```bash
59+# Set Twitter cookies
60+./crosspost setup-twitter
61+62+# Add a mapping
63+./crosspost add-mapping
64+65+# List/Remove
66+./crosspost list
67+./crosspost remove
68```
6970+### Backfilling Old Tweets
71```bash
72+# Example: Import the last 20 tweets for a user
73+npm run import -- --username YOUR_TWITTER_HANDLE --limit 20
074```
7576---
7778+## ⚙️ How to get Twitter Cookies
79+1. Log in to Twitter in your browser.
80+2. Open **Developer Tools** (F12) -> **Application** tab -> **Cookies**.
81+3. Copy `auth_token` and `ct0` values.
08283## ⚖️ License
84MIT
000