awesome-emoji-cli
v0.2.0
Published
CLI tool for automatic emoji pack generation
Maintainers
Readme
Selling emoji and sticker packs on KakaoTalk, LINE, Telegram, and OGQ is a real business — creators earn thousands monthly from packs that resonate. But the pipeline from idea to store-ready ZIP is brutal: character design, 45+ sticker variations, background removal, platform-specific resizing, localized metadata, and separate bundles for every marketplace. awesome-emoji collapses that entire workflow into a single CLI command powered by Gemini AI.
:sparkles: Features
:brain: AI Expert Panel
Three specialized AI personas — Market Analyst, Art Director, and Cultural Expert — independently evaluate your concept before a Chief Creative Director synthesizes their insights into a unified creative strategy. This isn't a single prompt — it's a structured debate.
:art: 5 Visual Styles
Choose from Chibi/Meme, Clean Cartoon, Pixel/Retro, Expressive Anime, or Original/Balanced — or let the AI pick the best fit for your concept and target market.
:package: 6 Platform Targets
Export submission-ready packs for KakaoTalk, LINE, Telegram, and OGQ with correct dimensions, formats, thumbnails, and tab images — all from one command.
:scissors: ML-Free Background Removal
Custom Sobel edge detection + flood-fill algorithm removes backgrounds cleanly with zero ML dependencies. Includes automatic defringing to eliminate color halos around edges.
:globe_with_meridians: AI Metadata with SEO
Auto-generates 3 metadata variants per pack with localized titles, descriptions, and 20 SEO tags in Korean, Japanese, and Traditional Chinese — each self-scored so you can pick the strongest option.
:robot: Machine-Readable Output
Pass --json for structured NDJSON on stdout — every pipeline stage, progress event, and result streamed as machine-readable records. Built for AI agent integration and CI/CD workflows.
:gear: Auto Decision Engine
Intelligent defaults resolve optimal platforms, language, and visual style from your target market. Specify --market kakaotalk and it handles the rest.
:test_tube: Battle-Tested
2,184 lines of tests covering 145+ edge cases including integration tests, service validation, and full pipeline reliability checks.
:computer: Demo
$ awesome-emoji generate -c "a cheerful capybara wearing a tiny hat"
awesome-emoji-cli v0.1.0
Concept: a cheerful capybara wearing a tiny hat
Style: auto (AI will decide)
Platforms: auto (market analysis)
[1/8] Analyzing concept...
├─ Market Analyst: High demand for animal characters in KR/JP markets
├─ Art Director: Recommending "Clean Cartoon" style for broad appeal
└─ Cultural Expert: Capybara trending across all target regions ✓
[2/8] Generating character sheet... done (4.2s)
[3/8] Selecting visual style... Clean Cartoon
[4/8] Ideating emote expressions... done (3.1s)
└─ 24 expressions generated (happy, sad, angry, love, sleeping...)
[5/8] Generating sticker images... done (28.6s)
└─ 24/24 stickers rendered
[6/8] Post-processing images... done (6.3s)
├─ Background removal (Sobel + flood-fill)
├─ Resized for 6 platform targets
└─ Quality check passed
[7/8] Generating metadata... done (5.1s)
├─ 3 title variants per locale (ko, ja, zh-TW)
├─ SEO tags generated
└─ Best variant auto-selected (score: 0.94)
[8/8] Exporting platform bundles... done (1.8s)
✔ Complete! Generated 6 submission-ready packs:
output/
├── ogq-sticker-740x640/ 24 images + metadata.json
├── line-sticker-370x320/ 24 images + metadata.json
├── line-emoji-180x180/ 24 images + metadata.json
├── kakaotalk-emoticon-360x360/ 24 images + metadata.json
├── kakaotalk-mini-180x180/ 24 images + metadata.json
└── telegram-static-512x512/ 24 images + metadata.json
Total: 144 images | 6 ZIPs | 3 locales | 49.3s elapsed:rocket: Quick Start
1. Install
npm install -g awesome-emoji-cli2. Set your Gemini API key
awesome-emoji config set-key YOUR_GEMINI_API_KEY
# Persists to ~/.awesome-emoji/config.json — you only do this once3. Generate your first emoji pack
awesome-emoji generate -c "a cheerful orange cat who loves coffee"4. Find your output
ls ./output/
# main_character.png stickers/ processed/ metadata.json session.json
# Plus submission-ready ZIPs for every target platform:bulb: Usage
Basic — just describe your concept:
awesome-emoji generate -c "a sleepy panda studying for exams"Target a specific market and language:
awesome-emoji generate \
-c "cute bread character with expressive reactions" \
--market kakaotalk \
--language ko \
--platforms kakaotalk_emoticon,kakaotalk_miniAdvanced — reference image, custom outline, JSON output:
awesome-emoji generate \
-c "my existing mascot as a sticker pack" \
--reference-image ./mascot.png \
--outline black \
--outline-thickness 5 \
--outline-opacity 80 \
--json \
-o ./release/v2Post-process existing images:
awesome-emoji postprocess -s ./my-stickers/ --market kakaotalkDry run (no API key needed):
awesome-emoji generate -c "test concept" --dry-run:earth_asia: Platforms
| Platform | Target | Dimensions | Format | Sticker Count |
|:---:|:---:|:---:|:---:|:---:|
| OGQ | Sticker | 740 x 640 | PNG | 16–40 |
| LINE | Sticker | 370 x 320 | PNG | 8–40 |
| LINE | Emoji | 180 x 180 | PNG | 40 |
| KakaoTalk | Emoticon | 360 x 360 | PNG | 16–40 |
| KakaoTalk | Mini Emoticon | 180 x 180 | PNG | 16–40 |
| Telegram | Static Sticker | 512 x 512 | PNG/WEBP | up to 120 |
- OGQ Sticker — 740x640px, transparent PNG, metadata in Korean
- LINE Sticker — 370x320px (with surrounding margin), transparent PNG
- LINE Emoji — 180x180px, transparent PNG, strict sizing requirements
- KakaoTalk Emoticon — 360x360px, transparent PNG, Korean metadata required
- KakaoTalk Mini — 180x180px, same as above but smaller format
- Telegram Static — 512x512px, PNG or WEBP, one side must be exactly 512px
All exports include correctly structured metadata files ready for direct submission to each platform's creator portal.
:building_construction: Architecture
Your text concept enters the Expert Panel, where three Gemini-powered AI personas — a Market Analyst, Art Director, and Cultural Expert — independently evaluate your idea against target market dynamics, then a Chief Creative Director synthesizes their recommendations into a unified strategy with a chosen visual style. That strategy drives the Generation Pipeline: character creation, 45+ emote variations rendered in one of five visual styles (Chibi/Meme, Clean Cartoon, Pixel/Retro, Expressive Anime, or Original/Balanced), each processed through Sharp-based background removal (Sobel edge detection + flood-fill, no ML) and configurable outline generation. The pipeline then generates three self-scored metadata variants with localized titles, descriptions, and SEO tags. Finally, the Export Bundler resizes every sticker to each platform's exact spec, packages thumbnails and tab images, and writes submission-ready ZIPs — one per platform format.
flowchart LR
A["fa:fa-keyboard Text Concept"] --> B["1. Concept\nAnalysis"]
B --> C["2. Character\nGeneration"]
C --> D["3. Style\nSelection"]
D --> E["4. Emote\nIdeation"]
E --> F["5. Sticker\nGeneration"]
F --> G["6. Post-Processing"]
G --> H["7. Metadata\nGeneration"]
H --> I["8. Platform\nExport"]
I --> J["fa:fa-file-zipper OGQ\n740x640"]
I --> K["fa:fa-file-zipper LINE Sticker\n370x320"]
I --> L["fa:fa-file-zipper LINE Emoji\n180x180"]
I --> M["fa:fa-file-zipper KakaoTalk\n360x360"]
I --> N["fa:fa-file-zipper KakaoTalk Mini\n180x180"]
I --> O["fa:fa-file-zipper Telegram\n512x512"]
subgraph ai ["Gemini AI"]
B
C
D
E
F
H
end
subgraph processing ["Sharp Pipeline"]
G
end
style ai fill:#E8D5F5,stroke:#8E75B2,stroke-width:2px
style processing fill:#E8F5E9,stroke:#4CAF50,stroke-width:2px
style A fill:#FFF3E0,stroke:#FF9800,stroke-width:2px
style I fill:#E3F2FD,stroke:#2196F3,stroke-width:2px:wrench: Configuration
awesome-emoji resolves your Gemini API key from three sources, checked in order:
- CLI flag —
--api-key YOUR_KEY(highest priority, useful for CI) - Environment variable —
GEMINI_API_KEY - Config file —
~/.awesome-emoji/config.json(set once withawesome-emoji config set-key)
# Save your key persistently
awesome-emoji config set-key YOUR_KEY
# Check which key is active (masked output)
awesome-emoji config get-key
# Remove a stored key
awesome-emoji config delete-keyModel Fallback: The CLI targets gemini-3.1-pro-preview for text reasoning and gemini-2.5-flash-image for image generation. If a primary model is unavailable or rate-limited, the fallback chain automatically retries with gemini-2.5-flash — no configuration needed.
:test_tube: Testing
npm testThe test suite includes 145+ test cases across three categories:
- CLI tests — End-to-end subprocess tests validating command parsing and output
- Core tests — Direct module tests for market resolver, auto-decision engine, and constants
- Edge case tests — Comprehensive service validation covering boundary conditions and error paths
:handshake: Contributing
Contributions are welcome and appreciated. Whether it's a bug fix, a new platform format, or a better background removal algorithm — open an issue or submit a pull request. All skill levels belong here.
:scroll: License
Released under the MIT License. Use it, modify it, ship it.
