# Custom Reaction Sets This folder contains custom reaction image sets that users can choose from in the reaction picker. ## Folder Structure ``` assets/reactions/ ├── reaction_config.json # Configuration file for reaction sets ├── emoji/ # Default emoji reactions (built-in) ├── green/ # Green-themed reaction set │ ├── credit.md # Attribution information │ └── *.png # Reaction images ├── blue/ # Blue-themed reaction set │ ├── credit.md # Attribution information │ └── *.png # Reaction images ├── purple/ # Purple-themed reaction set │ ├── credit.md # Attribution information │ └── *.png # Reaction images ├── dotto/ # Dotto pixel art emoji set │ ├── credit.md # Attribution information │ └── *.svg # Reaction images (SVG format) └── [custom]/ # Add your own themed sets here ├── credit.md # Attribution information └── *.png/.svg # Reaction images ``` ## Adding Custom Reaction Sets ### 1. Create a New Folder Create a new folder in `assets/reactions/` with your theme name: ```bash mkdir assets/reactions/your_theme_name ``` ### 2. Add Reaction Images Place your reaction images in the folder. Recommended specifications: - **Format**: PNG with transparency OR SVG for scalable graphics - **Size**: 64x64px (32x32px artwork) for PNG - **Naming**: Use descriptive names (system tries 200+ common names): - `heart.png/svg`, `thumbs_up.png/svg`, `laugh.png/svg` - `smiling_face.png/svg`, `winking_face.png/svg` - `skull.png/svg`, `ghost.png/svg`, `robot.png/svg` - `fire.png/svg`, `party.png/svg`, `clap.png/svg` - And many more! (see comprehensive list in code) ### 3. Add Credit Information (Optional) Create a `credit.md` file in your folder with attribution information: ```markdown # Your Theme Name **Source:** [Link to source if applicable](URL) **Author:** Your Name or Artist **License:** License information **Description:** Brief description of your reaction set **Format:** PNG/SVG ``` ### 4. Update Reaction Picker (Required!) After adding files to folders, run the update script: **Windows:** ```bash tools\add_new_folder.bat ``` **Manual:** ```bash dart tools/add_reaction_folder.dart ``` This script: - **Scans all folders** in `assets/reactions/` - **Checks for content** (PNG/SVG files) - **Updates the code** to include folders with content - **Ignores empty folders** automatically **Example Output:** ``` 🔍 Scanning for new reaction folders... 📁 Found folders: blue, dotto, green, purple ✅ dotto: Has content ⚠️ blue: Empty (will be ignored) 📝 Updated reaction_picker.dart with folders: dotto 🎉 Done! Restart your app to see the new reaction tabs ``` ### 5. Restart App Restart your Flutter app to see the new reaction tabs! ## Configuration Options ### Generated Configuration Format The `generate_reaction_config.dart` script automatically creates a configuration like this: ```json { "reaction_sets": { "emoji": { "type": "emoji", "reactions": ["❤️", "👍", "😂", ...] }, "your_theme": { "type": "folder", "folder": "your_theme", "file_types": ["png", "svg"], "files": ["heart.png", "thumbs_up.png", ...] } }, "generated_at": "2026-02-01T15:16:02.195009", "total_sets": 2 } ``` ### Configuration Fields - **type**: `"emoji"` or `"folder"` - **folder**: Folder name (for folder type) - **file_types**: Array of supported file extensions found - **files**: Explicit list of all files found in the folder - **generated_at**: When the config was last updated - **total_sets**: Number of reaction sets ### Build-Time vs Runtime **Important**: Flutter assets are bundled at build time, so: - **File Discovery**: Happens when you run the generator script - **Runtime Loading**: Uses the explicit file list from config - **No Directory Scanning**: Cannot scan folders at runtime - **Manual Updates**: Run script when adding/removing files ## Current Reaction Sets ### Emoji (Default) Standard Unicode emoji reactions that work on all devices. ### Green Green-themed custom reaction set with PNG images. ### Blue Blue-themed custom reaction set with PNG images. ### Purple Purple-themed custom reaction set with PNG images. ### Dotto 16x16 pixel art emoji set with SVG graphics from the Dotto Emoji project. ## Image Guidelines ### Recommended Dimensions - **PNG**: 64x64px canvas, 32-48px artwork (centered) - **SVG**: Any size (scalable) - **Format**: PNG with transparency OR SVG - **Background**: Transparent ### Design Tips - **Consistent Style**: All reactions in a set should have the same visual style - **Clear Recognition**: Icons should be easily recognizable at small sizes - **Good Contrast**: Work well on both light and dark backgrounds - **Rounded Design**: Match the app's rounded aesthetic ### File Naming Convention Use lowercase with underscores: - `heart.png` (not `Heart.png`) - `thumbs_up.png` (not `thumbsUp.png`) - `thinking_face.png` (not `thinkingFace.png`) ## Credit System Each reaction folder can include a `credit.md` file that: - Displays at the bottom of the reaction tab - Supports basic markdown formatting - Provides attribution to content creators - Shows automatically when users view the reaction set ### Markdown Support - Headers: `# Title` - Bold: `**text**` - Italic: `*text*` - Lists: `- item` ## Testing The system includes robust error handling: - If an image file is missing, it shows a placeholder icon - If credit.md is missing, it shows default credit text - If configuration is invalid, it falls back to emoji-only - The reaction picker continues to function normally ## Asset Configuration The `pubspec.yaml` only needs the parent folder: ```yaml flutter: uses-material-design: true assets: - assets/reactions/ ``` This automatically includes all subfolders and files.