No description
  • TypeScript 59.3%
  • Svelte 29.5%
  • Shell 10.6%
  • HTML 0.6%
Find a file
2025-09-18 15:18:25 -04:00
.svelte-kit vibe coded a frontend to view these emojis 2025-09-18 15:18:25 -04:00
scripts vibe coded a frontend to view these emojis 2025-09-18 15:18:25 -04:00
src vibe coded a frontend to view these emojis 2025-09-18 15:18:25 -04:00
.env.example vibe coded a frontend to view these emojis 2025-09-18 15:18:25 -04:00
.gitignore vibe coded a frontend to view these emojis 2025-09-18 15:18:25 -04:00
CHANGES.md vibe coded a frontend to view these emojis 2025-09-18 15:18:25 -04:00
config.ts vibe coded a frontend to view these emojis 2025-09-18 15:18:25 -04:00
FEATURES.md vibe coded a frontend to view these emojis 2025-09-18 15:18:25 -04:00
package.json vibe coded a frontend to view these emojis 2025-09-18 15:18:25 -04:00
pnpm-lock.yaml vibe coded a frontend to view these emojis 2025-09-18 15:18:25 -04:00
QUICKSTART.md vibe coded a frontend to view these emojis 2025-09-18 15:18:25 -04:00
README.md vibe coded a frontend to view these emojis 2025-09-18 15:18:25 -04:00
tsconfig.json vibe coded a frontend to view these emojis 2025-09-18 15:18:25 -04:00
types.ts starting cleanup 2025-09-12 09:29:53 -04:00
vite.config.ts vibe coded a frontend to view these emojis 2025-09-18 15:18:25 -04:00

Slackmoji Manager

A TypeScript/Svelte application for downloading and managing custom emojis from Slack workspaces. Features both a command-line downloader and a modern web interface for browsing and managing your emoji collection.

🚀 Features

Web Interface

  • 🎭 Modern Svelte frontend - Browse your emoji collection with a responsive interface
  • 🔍 Search functionality - Find emojis by name with simple pattern matching
  • 📄 Pagination - View 100 emojis per page with smooth navigation
  • 🏷️ Smart labeling - Distinguish between local files and downloaded emojis
  • 📥 Missing emoji detection - Automatically identify and download missing emojis
  • 🎨 Visual emoji grid - Clean card-based layout with emoji previews
  • 📊 Statistics - View counts of local, downloaded, and missing emojis

Command Line Downloader

  • 🎯 No API tokens required - Works through Slack's web interface
  • Real-time downloads - Processes and downloads each page immediately
  • 🔄 Resume capability - Automatically continues from last processed page
  • 📊 Smart diff detection - Uses XOR comparison to find new emojis
  • 🚀 Rate-limited batches - Downloads in configurable batches with delays
  • 📁 Alias handling - Intelligently processes emoji aliases

🛠️ Installation

git clone <repository-url>
cd slackmoji-downloader
pnpm install
cp .env.example .env

⚙️ Configuration

Edit .env with your configuration:

# Required: Your Slack workspace emoji page URL
SLACK_WORKSPACE_URL=https://your-workspace.slack.com/customize/emoji

# Directory where emojis are downloaded by the script
DESTINATION_DIR=./downloaded-emojis

# Optional: Directory for the web interface to serve emojis from
# Defaults to DESTINATION_DIR if not specified
SERVER_DIR=./downloaded-emojis

# Downloader settings
SCROLL_DELAY=1500
DOWNLOAD_BATCH_SIZE=5
DOWNLOAD_DELAY=2000

Environment Variables

Variable Description Default
SLACK_WORKSPACE_URL Your Slack emoji page URL Required
DESTINATION_DIR Download directory for scripts ./downloaded-emojis
SERVER_DIR Directory for web interface to serve from Same as DESTINATION_DIR
SCROLL_DELAY Delay between scroll actions (ms) 1500
DOWNLOAD_BATCH_SIZE Emojis per download batch 5
DOWNLOAD_DELAY Delay between batches (ms) 2000

🚀 Usage

Web Interface

Start the development server:

pnpm dev

Visit http://localhost:5173 to:

  • Browse all emojis with search and filtering
  • View local vs downloaded emoji status
  • Download missing emojis from your emoji list
  • Navigate through paginated results

Command Line Downloader

1. Launch Chrome with debugging

pnpm launch-chrome

2. Authenticate in Chrome

  • Log into your Slack workspace
  • Navigate to the emoji customization page

3. Run the downloader

pnpm download

The downloader will:

  • Connect to Chrome debugging session
  • Scroll through emoji pages automatically
  • Download each page immediately as data is captured
  • Resume from the last page if emoji_list.json exists
  • Save an updated emoji list with all findings

📁 Project Structure

slackmoji-downloader/
├── src/                    # Svelte frontend source
│   ├── lib/               # Shared utilities and types
│   ├── routes/            # SvelteKit pages and API routes
│   └── app.html           # Main HTML template
├── scripts/               # Command-line tools
│   ├── download-emojis.ts # Main downloader script
│   └── launch-chrome-mac.sh # Chrome launcher
├── static/                # Static assets
├── downloaded-emojis/     # Default emoji storage (created automatically)
└── config.ts              # Shared configuration

📊 Output Files

Downloaded Images

  • Location: SERVER_DIR directory (configurable)
  • Naming: Sanitized original names with proper extensions
  • Quality: Full resolution images

emoji_list.json

The downloader creates a comprehensive JSON file with metadata:

{
  "emojis": {
    "emoji_name": {
      "url": "https://emoji.slack-edge.com/...",
      "alias_names": ["alias1", "alias2"]
    }
  },
  "data": {
    "total": 150,
    "total_unique": 125,
    "total_aliases": 25,
    "total_errors": 0,
    "last_processed_page": 12,
    "total_pages": 15,
    "errors": []
  }
}

🎨 Web Interface Features

Search and Filtering

  • Text search: Find emojis by name or alias
  • Type filters: Toggle between local files and downloaded emojis
  • Real-time results: Updates as you type

Emoji Display

  • Grid layout: Responsive card-based design
  • Image previews: 48px emoji thumbnails
  • Status badges: Visual indicators for local vs downloaded
  • Alias information: Shows emoji aliases when available

Pagination

  • 100 emojis per page: Optimized for performance
  • Smart navigation: Shows relevant page numbers
  • Jump to page: Direct navigation to any page
  • Statistics: Total counts and current page info

Missing Emoji Management

  • Detection: Automatically identifies emojis in the list but missing locally
  • Bulk download: Download all missing emojis with one click
  • Progress tracking: Visual feedback during downloads
  • Error handling: Displays any download failures

🔧 Available Scripts

# Development
pnpm dev           # Start development server
pnpm build         # Build for production
pnpm preview       # Preview production build

# Tools
pnpm download      # Run emoji downloader
pnpm launch-chrome # Launch Chrome with debugging
pnpm setup         # Copy .env.example to .env

# Maintenance
pnpm typecheck     # Run TypeScript checks
pnpm check         # Run Svelte checks
pnpm clean         # Clean output directories

🐛 Troubleshooting

Chrome Connection Issues

  • Ensure Chrome launched with pnpm launch-chrome
  • Check port 9222 is available
  • Verify no other debugging sessions are active

Web Interface Issues

  • Check that SERVER_DIR exists and contains emoji files
  • Verify emoji_list.json is valid JSON if present
  • Ensure file permissions allow reading emoji images

Download Issues

  • Verify you're logged into Slack in the Chrome session
  • Check you're on the emoji customization page
  • Ensure workspace has custom emojis to download
  • Re-run the script to retry failed downloads

Performance

  • Large emoji collections (1000+) may take time to load initially
  • Consider organizing emojis into subdirectories if needed
  • Browser caching helps with subsequent page loads

🔒 Security & Privacy

  • Uses your existing Slack session cookies
  • All processing happens locally on your machine
  • No API keys or tokens required or stored
  • Temporary Chrome profile used for isolation
  • Emoji files stored locally under your control

📝 License

This tool is for personal and educational use. Ensure you have permission to download emojis from your Slack workspace and comply with your organization's data policies.


Built with TypeScript, Svelte, and SvelteKit. Responsibly uses Slack's web interface for emoji management.