{"id":29470721,"url":"https://github.com/shinshin86/oh-my-logo","last_synced_at":"2026-01-17T11:15:07.295Z","repository":{"id":301523596,"uuid":"1008866688","full_name":"shinshin86/oh-my-logo","owner":"shinshin86","description":"Display giant ASCII-art logos with colorful gradients in your terminal — like Claude Code or Gemini CLI.","archived":false,"fork":false,"pushed_at":"2025-10-05T07:02:43.000Z","size":821,"stargazers_count":1267,"open_issues_count":0,"forks_count":52,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-26T09:25:52.765Z","etag":null,"topics":["ascii","ascii-art","cli","logo"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/oh-my-logo","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shinshin86.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-26T08:03:24.000Z","updated_at":"2025-12-24T16:03:14.000Z","dependencies_parsed_at":"2025-06-27T10:24:22.916Z","dependency_job_id":"06aeed3b-dce6-412e-aa58-f73f8ba1ae6a","html_url":"https://github.com/shinshin86/oh-my-logo","commit_stats":null,"previous_names":["shinshin86/oh-my-logo"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/shinshin86/oh-my-logo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinshin86%2Foh-my-logo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinshin86%2Foh-my-logo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinshin86%2Foh-my-logo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinshin86%2Foh-my-logo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shinshin86","download_url":"https://codeload.github.com/shinshin86/oh-my-logo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinshin86%2Foh-my-logo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28506712,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T10:25:30.148Z","status":"ssl_error","status_checked_at":"2026-01-17T10:25:29.718Z","response_time":85,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ascii","ascii-art","cli","logo"],"created_at":"2025-07-14T13:00:56.474Z","updated_at":"2026-01-17T11:15:07.280Z","avatar_url":"https://github.com/shinshin86.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","Fun","ASCII UI/UX Apps"],"sub_categories":[],"readme":"# oh-my-logo\n\n[![Mentioned in Awesome Gemini CLI](https://awesome.re/mentioned-badge.svg)](https://github.com/Piebald-AI/awesome-gemini-cli)\n\n![Logo](https://raw.githubusercontent.com/shinshin86/oh-my-logo/main/images/logo.png)\n\nCreate stunning ASCII art logos with beautiful gradient colors in your terminal! Perfect for project banners, startup logos, or just making your terminal look awesome.\n\nYou can also create stunning animations like these by using it as a library in your programs!\n\n![GIF Demo](https://raw.githubusercontent.com/shinshin86/oh-my-logo/refs/heads/main/images/demo.gif)\n\n![GIF Demo 2](https://raw.githubusercontent.com/shinshin86/oh-my-logo/main/images/demo2.gif)\n\nThe logos produced by `oh-my-logo` are CC0 (public domain); feel free to use them anywhere.\n\n## ✨ Features\n\n- 🎨 **Two Rendering Modes**: Choose between outlined ASCII art or filled block characters\n- 🌈 **13 Beautiful Palettes**: From sunset gradients to matrix green\n- 📐 **Gradient Directions**: Vertical, horizontal, and diagonal gradients\n- 🔤 **Multi-line Support**: Create logos with multiple lines of text\n- ⚡ **Zero Dependencies**: Run instantly with `npx` - no installation required\n- 🎛️ **Customizable**: Use different fonts and create your own color schemes\n- 🎭 **Shadow Styles**: Customize shadow effects in filled mode with different block fonts\n- 🔄 **Letter Spacing**: For `--filled` mode: character spacing for different visual densities\n- 🔄 **Reverse Gradients**: Flip color palettes for unique effects\n\n## 🚀 Quick Start\n\nNo installation needed! Try it right now:\n\n```bash\nnpx oh-my-logo \"HELLO WORLD\"\n```\n\nWant filled characters? Add the `--filled` flag:\n\n```bash\nnpx oh-my-logo \"YOUR LOGO\" sunset --filled\n```\n\n### 🆕 New in v0.3.0\n\n**Customize shadow styles in filled mode:**\n```bash\n# Box-drawing shadows (default)\nnpx oh-my-logo \"STYLE\" fire --filled --block-font block\n\n# Minimal sleek shadows\nnpx oh-my-logo \"STYLE\" fire --filled --block-font chrome\n\n# Dotted/shaded shadows\nnpx oh-my-logo \"STYLE\" fire --filled --block-font shade\n```\n\n**Control letter spacing for block fonts:**\n```bash\n# Wide spacing (5 spaces between letters)\nnpx oh-my-logo \"WIDE\" ocean --filled --letter-spacing 5\n\n# Tight spacing (no spaces)\nnpx oh-my-logo \"TIGHT\" ocean --filled --letter-spacing 0\n```\n\n**Reverse gradients for unique effects:**\n```bash\n# Reverse any color palette\nnpx oh-my-logo \"REVERSE\" sunset --reverse-gradient\n\n# Works with filled mode too\nnpx oh-my-logo \"REVERSE\" sunset --filled --reverse-gradient\n```\n\n## 📦 Installation\n\n### Global Installation (CLI)\n```bash\nnpm install -g oh-my-logo\n```\n\n### Or Use Directly with npx\n```bash\nnpx oh-my-logo \"Your Text\"\n```\n\n### As a Library\n```bash\nnpm install oh-my-logo\n```\n\n## 🎯 Usage\n\n### CLI Usage\n\n```bash\noh-my-logo \u003ctext\u003e [palette] [options]\n```\n\n#### Custom Color Palettes (CLI)\n\nProvide custom gradients via `--palette-colors \u003ccolors\u003e`.\n\n```bash\n# JSON array (double quotes recommended)\nnpx oh-my-logo \"MY LOGO\" --palette-colors '[\"#00ff00\",\"#ffa500\",\"#ff0000\"]'\n\n# Simple comma-separated notation (wrap each color in quotes)\nnpx oh-my-logo \"MY LOGO\" --palette-colors \"'#00ff00', '#ffa500', '#ff0000'\"\n```\n\n- The comma-separated form is convenient for quick manual CLI usage and one-liners.\n- The JSON array form works well when you want to store the palette in shell scripts or CI variables, pass the result of `JSON.stringify` from Node.js, or keep the array in configuration files.\n- Extra whitespace is trimmed automatically.\n- Color strings can be hex codes or any CSS color supported by `gradient-string`.\n- You can combine custom palettes with other options like `--reverse-gradient` or `--filled`.\n- The positional `[palette]` argument continues to accept built-in palette names only.\n\n### Library Usage\n\n```javascript\nimport { render, renderFilled, PALETTES, getPaletteNames } from 'oh-my-logo';\n\n// Basic ASCII art rendering\nconst logo = await render('HELLO WORLD', {\n  palette: 'sunset',\n  direction: 'horizontal'\n});\nconsole.log(logo);\n\n// Using custom colors\nconst customLogo = await render('MY BRAND', {\n  palette: ['#ff0000', '#00ff00', '#0000ff'],\n  font: 'Big',\n  direction: 'diagonal'\n});\nconsole.log(customLogo);\n\n// Filled block characters\nawait renderFilled('AWESOME', {\n  palette: 'fire'\n});\n\n// Filled with custom shadow style\nawait renderFilled('SHADOW', {\n  palette: 'sunset',\n  font: 'shade'  // Use dotted shadow effect\n});\n\n// Filled with wide letter spacing\nawait renderFilled('WIDE', {\n  palette: 'fire',\n  letterSpacing: 3\n});\n\n// TypeScript usage\nimport { render, RenderOptions, PaletteName } from 'oh-my-logo';\n\nconst options: RenderOptions = {\n  palette: 'ocean' as PaletteName,\n  direction: 'vertical',\n  font: 'Standard'\n};\n\nconst typedLogo = await render('TYPESCRIPT', options);\nconsole.log(typedLogo);\n\n// Access palette information\nconsole.log('Available palettes:', getPaletteNames());\nconsole.log('Sunset colors:', PALETTES.sunset);\n```\n\n### Arguments\n\n- **`\u003ctext\u003e`**: Text to display\n  - Use `\"\\n\"` for newlines: `\"LINE1\\nLINE2\"`\n  - Use `\"-\"` to read from stdin\n- **`[palette]`**: Color palette name (default: `grad-blue`)\n\n### Options\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `-f, --font \u003cname\u003e` | Figlet font name | `Standard` |\n| `-d, --direction \u003cdir\u003e` | Gradient direction (`vertical`, `horizontal`, `diagonal`) | `vertical` |\n| `--filled` | Use filled block characters instead of outlined ASCII | `false` |\n| `--block-font \u003cfont\u003e` | Font for filled mode (`3d`, `block`, `chrome`, `grid`, `huge`, `pallet`, `shade`, `simple`, `simple3d`, `simpleBlock`, `slick`, `tiny`)\n| `--letter-spacing \u003cn\u003e` | Letter spacing for filled mode (integer spaces between characters, 0+) | `1` |\n| `--reverse-gradient` | Reverse gradient colors | `false` |\n| `--palette-colors \u003ccolors\u003e` | Custom colors (JSON array or comma-separated list) | - |\n| `-l, --list-palettes` | Show all available color palettes | - |\n| `--gallery` | Render text in all available palettes | - |\n| `--color` | Force color output (useful for pipes) | - |\n| `--no-color` | Disable color output | - |\n| `-v, --version` | Show version number | - |\n| `-h, --help` | Show help information | - |\n\n## 🎨 Available Palettes (13 Total)\n\nView all palettes with preview colors:\n\n```bash\nnpx oh-my-logo \"\" --list-palettes\n```\n\n| Palette | Colors | Description |\n|---------|--------|-------------|\n| `grad-blue` | `#4ea8ff → #7f88ff` | Blue gradient (default) |\n| `sunset` | `#ff9966 → #ff5e62 → #ffa34e` | Warm sunset colors |\n| `dawn` | `#00c6ff → #0072ff` | Cool morning blues |\n| `nebula` | `#654ea3 → #eaafc8` | Purple space nebula |\n| `ocean` | `#667eea → #764ba2` | Deep ocean blues |\n| `fire` | `#ff0844 → #ffb199` | Intense fire colors |\n| `forest` | `#134e5e → #71b280` | Natural green tones |\n| `gold` | `#f7971e → #ffd200` | Luxurious gold gradient |\n| `purple` | `#667db6 → #0082c8 → #0078ff` | Royal purple to blue |\n| `mint` | `#00d2ff → #3a7bd5` | Fresh mint colors |\n| `coral` | `#ff9a9e → #fecfef` | Soft coral pink |\n| `matrix` | `#00ff41 → #008f11` | Classic matrix green |\n| `mono` | `#f07178 → #f07178` | Single coral color |\n\n## 💡 Examples\n\n### Basic Usage\n\n```bash\n# Simple logo with default blue gradient\nnpx oh-my-logo \"STARTUP\"\n\n# Multi-line company logo\nnpx oh-my-logo \"MY\\nCOMPANY\" sunset\n\n# Matrix-style hacker text\nnpx oh-my-logo \"HACK THE PLANET\" matrix --filled\n```\n\n### Different Rendering Modes\n\n```bash\n# Outlined ASCII art (default)\nnpx oh-my-logo \"CODE\" fire\n\n# Filled block characters\nnpx oh-my-logo \"CODE\" fire --filled\n\n# Filled with different shadow styles\nnpx oh-my-logo \"CODE\" fire --filled --block-font chrome   # Minimal box shadows\nnpx oh-my-logo \"CODE\" fire --filled --block-font shade    # Dotted shadow effect\nnpx oh-my-logo \"CODE\" fire --filled --block-font simpleBlock # Simple ASCII shadows\n```\n\n### Shadow Styles (--filled mode only)\n\nCustomize the shadow characters in filled mode with `--block-font`:\n\n#### Visual Comparison of Shadow Styles\n\n**`block` (default)** - Box-drawing shadows:\n```\n ██╗  ██╗ ██╗\n ██║  ██║ ██║\n ███████║ ██║\n ██╔══██║ ██║\n ██║  ██║ ██║\n ╚═╝  ╚═╝ ╚═╝\n```\n\n**`chrome`** - Minimal sleek shadows:\n```\n ╦ ╦ ╦\n ╠═╣ ║\n ╩ ╩ ╩\n```\n\n**`shade`** - Dotted shadow effect:\n```\n░░░░░░░░░\n░█░░█░███\n░█░░█░ █\n░████░░█\n░█  █░░█\n░█░░█░███\n░ ░░ ░\n░░░░░░░░░\n```\n\n**`simpleBlock`** - Basic ASCII shadows:\n```\n  _|    _|  _|_|_|\n  _|    _|    _|\n  _|_|_|_|    _|\n  _|    _|    _|\n  _|    _|  _|_|_|\n```\n\n```bash\n# Try different shadow styles\nnpx oh-my-logo \"SHADOW\" sunset --filled --block-font block\nnpx oh-my-logo \"SHADOW\" sunset --filled --block-font chrome\nnpx oh-my-logo \"SHADOW\" sunset --filled --block-font shade\nnpx oh-my-logo \"SHADOW\" sunset --filled --block-font simpleBlock\n```\n\n### Letter Spacing Control\n\nAdjust the spacing between characters for different visual densities:\n\n```bash\n# Default spacing (1 space)\nnpx oh-my-logo \"HI\" --filled\n# Output:  ██╗  ██╗\n\n# Wide spacing (3 spaces)\nnpx oh-my-logo \"HI\" --filled --letter-spacing 3\n# Output:  ██╗   ██╗\n\n# No spacing (touching)\nnpx oh-my-logo \"HI\" --filled --letter-spacing 0  \n# Output: ██╗██╗\n\n# Note: Decimals are truncated (3.7 becomes 3)\nnpx oh-my-logo \"HI\" --filled --letter-spacing 3.7  # Uses 3 spaces\n```\n\n### Reverse Gradient Effect\n\nFlip any color palette for unique visual effects:\n\n```bash\n# Normal sunset gradient (red → orange)\nnpx oh-my-logo \"GRADIENT\" sunset\n\n# Reversed sunset gradient (orange → red)\nnpx oh-my-logo \"GRADIENT\" sunset --reverse-gradient\n\n# Works with filled mode too\nnpx oh-my-logo \"GRADIENT\" sunset --filled --reverse-gradient\n```\n\n### Gradient Directions\n\n```bash\n# Vertical gradient (default)\nnpx oh-my-logo \"LOGO\" ocean\n\n# Horizontal gradient\nnpx oh-my-logo \"LOGO\" ocean -d horizontal\n\n# Diagonal gradient\nnpx oh-my-logo \"LOGO\" ocean -d diagonal\n```\n\n### Custom Fonts\n\n```bash\n# List available fonts (depends on your figlet installation)\nfiglet -f\n\n# Use a different font\nnpx oh-my-logo \"RETRO\" purple -f \"Big\"\n```\n\n### Pipeline and Scripting\n\n```bash\n# Read from stdin\necho \"DYNAMIC LOGO\" | npx oh-my-logo - gold --filled\n\n# Force colors in scripts\nnpx oh-my-logo \"DEPLOY SUCCESS\" forest --color\n\n# Plain text output\nnpx oh-my-logo \"LOG ENTRY\" --no-color\n```\n\n### Gallery Mode\n\n```bash\n# Display text in all available palettes\nnpx oh-my-logo \"PREVIEW\" --gallery\n\n# Gallery with filled characters\nnpx oh-my-logo \"COLORS\" --gallery --filled\n\n# Compare multi-line text across all palettes\nnpx oh-my-logo \"MY\\nLOGO\" --gallery\n\n# Gallery with custom font\nnpx oh-my-logo \"STYLES\" --gallery -f Big\n```\n\n## 🎭 Use Cases\n\n- **Project Banners**: Add eye-catching headers to your README files\n- **Terminal Startup**: Display your company logo when opening terminals  \n- **CI/CD Pipelines**: Make deployment logs more visually appealing\n- **Development Tools**: Brand your CLI applications\n- **Presentations**: Create stunning terminal demos\n- **Personal Branding**: Add flair to your shell prompt or scripts\n\n## ⚙️ Environment Variables\n\n| Variable | Description | Example |\n|----------|-------------|---------|\n| `OHMYLOGO_FONT` | Default figlet font | `export OHMYLOGO_FONT=\"Big\"` |\n\n## 📚 Library API\n\n### Core Functions\n\n#### `render(text, options?)`\nRenders ASCII art with gradient colors.\n\n```typescript\nasync function render(text: string, options?: RenderOptions): Promise\u003cstring\u003e\n```\n\n- **text** (string): Text to display\n- **options.palette** (PaletteName | string[]): Color palette name or custom colors\n- **options.font** (string): Figlet font name (default: 'Standard')\n- **options.direction** ('vertical' | 'horizontal' | 'diagonal'): Gradient direction\n\nReturns: `Promise\u003cstring\u003e` - The colored ASCII art\n\n#### `renderFilled(text, options?)`\nRenders filled block characters with gradient.\n\n```typescript\nasync function renderFilled(text: string, options?: RenderInkOptions): Promise\u003cvoid\u003e\n```\n\n- **text** (string): Text to display\n- **options.palette** (PaletteName | string[]): Color palette name or custom colors\n- **options.font** (BlockFont): Shadow style ('block' | 'chrome' | 'shade' | 'simpleBlock' | '3d')\n- **options.letterSpacing** (number): Integer number of spaces between characters (0 or greater, default: 1)\n\nReturns: `Promise\u003cvoid\u003e` - Renders directly to stdout\n\n### Palette Functions\n\n- **`PALETTES`**: Object containing all built-in color palettes\n- **`resolvePalette(name)`**: Get palette colors by name\n- **`getPaletteNames()`**: Get array of all palette names\n- **`getDefaultPalette()`**: Get the default palette colors\n- **`getPalettePreview(name)`**: Get a preview string of palette colors\n\n### Type Definitions\n\n```typescript\ntype PaletteName = 'grad-blue' | 'sunset' | 'dawn' | 'nebula' | 'ocean' | \n                   'fire' | 'forest' | 'gold' | 'purple' | 'mint' | \n                   'coral' | 'matrix' | 'mono';\n\ninterface RenderOptions {\n  palette?: PaletteName | string[];\n  font?: string;\n  direction?: 'vertical' | 'horizontal' | 'diagonal';\n}\n\ntype BlockFont = '3d' | 'block' | 'chrome' | 'console' | 'grid' | \n                 'huge' | 'pallet' | 'shade' | 'simple' | 'simple3d' | \n                 'simpleBlock' | 'slick' | 'tiny';\n\ninterface RenderInkOptions {\n  palette?: PaletteName | string[];\n  font?: BlockFont;\n  letterSpacing?: number;\n}\n```\n\n## 🛠️ Development\n\nWant to contribute or customize?\n\n```bash\ngit clone https://github.com/yourusername/oh-my-logo.git\ncd oh-my-logo\nnpm install\n\n# Development mode\nnpm run dev -- \"TEST\" sunset --filled\n\n# Build\nnpm run build\n\n# Test the built version\nnode dist/index.js \"HELLO\" matrix --filled\n```\n\n### 🧪 Testing\n\nRun the test suite with Vitest:\n\n```bash\n# Run all tests in watch mode\nnpm run test\n\n# Run tests once (CI mode)\nnpm run test:coverage\n\n# Run tests with UI\nnpm run test:ui\n\n# Run specific test file\nnpm test -- src/__tests__/cli.test.ts\n```\n\nThe test suite includes:\n- Unit tests for all library functions\n- CLI integration tests\n- Color palette validation\n- Error handling scenarios\n- TTY/color detection logic\n\nTests are located in `src/__tests__/` with the following structure:\n- `cli.test.ts` - CLI command line behavior\n- `lib.test.ts` - Library API functions\n- `palettes.test.ts` - Color palette system\n- `renderer.test.ts` - ASCII art rendering\n- `utils/` - Utility function tests\n\n### Testing Terminal Stability\n\nA test script is provided to verify that the `--filled` mode properly cleans up terminal state:\n\n```bash\n# Run terminal stability stress test\n./scripts/test-filled-mode.sh\n```\n\nThis script:\n- Runs 55 consecutive renders (5 iterations × 11 fonts)\n- Tests all available fonts with random color palettes\n- Verifies terminal display remains intact after extensive use\n- Helps detect any terminal corruption issues\n\nThis is particularly useful for:\n- Testing after making changes to the Ink renderer\n- Verifying terminal compatibility with different environments\n- Stress testing the `--filled` mode implementation\n\n### Adding New Palettes\n\nEdit `src/palettes.ts` to add your own color combinations:\n\n```typescript\nexport const PALETTES = {\n  // ... existing palettes\n  'my-palette': ['#ff0000', '#00ff00', '#0000ff'],\n} as const;\n```\n\n## 🤝 Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request. Whether it's:\n\n- 🎨 New color palettes\n- 🔧 Bug fixes\n- ✨ New features\n- 📖 Documentation improvements\n\n## 📄 License\n\nMIT AND CC0-1.0\n\n---\n\n**Made with ❤️ for the terminal lovers**\n\n*Transform your boring text into stunning visual logos!*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshinshin86%2Foh-my-logo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshinshin86%2Foh-my-logo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshinshin86%2Foh-my-logo/lists"}