No description
- TypeScript 59.3%
- Svelte 29.5%
- Shell 10.6%
- HTML 0.6%
| .svelte-kit | ||
| scripts | ||
| src | ||
| .env.example | ||
| .gitignore | ||
| CHANGES.md | ||
| config.ts | ||
| FEATURES.md | ||
| package.json | ||
| pnpm-lock.yaml | ||
| QUICKSTART.md | ||
| README.md | ||
| tsconfig.json | ||
| types.ts | ||
| vite.config.ts | ||
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.jsonexists - 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_DIRdirectory (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_DIRexists and contains emoji files - Verify
emoji_list.jsonis 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.