██████████
█▓ ░██
█▒ ██
█████████████░ █████████████████ ████████████ ████████████ ████████████
██ ███░ ███▓▒▒▒▒▒▒▒▒▒▒▒██ █▒▒▒▒▒▒▒▒▓████ █████████▓ ▒█
██ ███ ███▒▒▒▒▒▒▒▒▒▒▒▒▓██████████████▓ ███▓▒ ▒▓░ ▒█
██ ███ ░██▓▒▒▒▒▒▒▒▒▒▒▒▒▒▓██▓▒▒▒▒▒▒▒▒█▓ ███░ ░██░ ▒█
██ ███ ▒██▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▓▒▒▒▒▒▒▒▓▒ ██ ▓ ██░ ▓█
██ ██▓ ███▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▓▒▒▒▒▒▒▒▓▒ ██ █ ██░ ▓
██ ██▒ ██▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▒▒▒▒▒▒▒▓▒ ██ █ ▓█████████
██ ██▒▒▒▒▒▒▒▒█▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▒ ▒███████ █░ ░▓ █
██ ░░ ██▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓█ ▓ ░█ ▓ ░▒ ░█
██ ██░ ░█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓█ █░ ▒ █ ░█
██ ██ ▓█▒▒▒▒▒▒▒▒▒██▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓█ █░ ▒ █░ ▒█
██████████ ███████████▓██▓▓█▓█ █▓▒▒▒▒▒▒▒▒▒▓██▓██ █▓▓▓▓▓▓▓█ █▓▓▓▓▓▓▓▓▓▓▓▓▓▓██
.:/====================█▓██▓██=========████▓█▓█ ███======> [ P R E S E N T S ] ====\:.
/\ ██▓██ █▓▓▓██ ██
_ __ / \__________________█▓█_____________██▓██______________________________ _ _ _
_ __ \/ /\____________________██_____________ ███________ _________ __ _______ _
\ / T H E P I N A C L E O F H A K C I N G Q U A L I T Y
\/
Name : haKC.ai - haKCer module for 1337 banners
Release date: Nov 2024 (but the vibe is from 1994)
GROUP NEWS: haKC.ai is Still Looking For haKC Coders & ASCII Art Wizards,
Drop corykennedy A Message on Any Fine BBS in the USA
Or On The Internet at cory@haKC.ai.
_ __ ___________________________________________________________ /\ ___ ___ _ _
__ __ __ ______________________________________________________ \/ /\__________ ___
| Notes from the author: \ / |
| \/ |
| This library brings back the golden age of terminal art. Drop it |
| into any Python CLI tool and watch boring print() statements |
| transform into animated synthwave glory. 29 effects, 9 themes, |
| zero config. While the script kiddies use Comic Sans, we keep |
| ASCII art alive. Your tools deserve better than plain text. |
| Greetz to the real ones. -cory |
|*~'`^`'~*-,._.,-*~'`^`'~*-,._.,-*~'`^`'~*-,._.,-*~'`^`'~*-,._.,-*~'`^`'~*~'`^ |
┌──────────────────────── [ R E L E A S E I N F O ] ──────────────────────────┐
│ │
│ NAME.........................................haKCer Terminal Banner Library │
│ TYPE..................................................Python CLI Enhancement │
│ VERSION........................................................v1.1.3-FINAL │
│ PLATFORM............................................Python 3.8+ / Cross-OS │
│ RELEASE DATE.................................................November 2024 │
│ RIPPED BY.............................................haKC.ai / /dev/CØR.23 │
│ CATEGORY..................................................Developer Tooling │
│ EFFECTS PACK...........................................................29x │
│ THEME COLLECTION........................................................9x │
│ SIZE...................................................Lightweight (~50KB) │
│ │
│ [*] ZERO-CONFIG animated ASCII banners for Python CLI tools │
│ [*] Drop-in replacement for boring print() statements │
│ [*] 29 terminal effects from subtle fades to FULL SYNTHGRID │
│ [*] 9 color themes: Tokyo Night, Cyberpunk, Matrix, Synthwave++ │
│ [*] Custom ASCII art support - BYOB (Bring Your Own Banner) │
│ [*] Production-ready with smart terminal detection │
│ [*] No dependencies on legacy ncurses or termcap crap │
│ │
└───────────────────────────────────────────────────────────────────────────────┘
════════════════════════════════════════════════════════════════════════════════
[*] If you're still using print() for your CLI banners, this file is for you
[*] If your terminal looks like notepad.exe, bounce now
[*] Real hackers use Nano and animated ASCII art, not Comic Sans
════════════════════════════════════════════════════════════════════════════════
haKCAssets - The art locker. Pre-built ASCII banners, generators, and 101+ MOTD messages in proper BBS/warez style. Grab any banner from banners/ and feed it to hakcer's custom_file param - instant animated glory without crafting your own art.
- Ready-to-drop ASCII banners with template vars (
{motd},{greets},{signatures}) - Banner/menu/hackerart generators for when you need fresh stuff
- haKC Studio orchestrator - menu-driven asset creation with hakcer effects baked in
Back in the 90s, we used to spend HOURS crafting sick ASCII art for our tool releases.
BBS splash screens, NFO files, cracktro animations. That art is DEAD because every script
kiddie today just slaps print("My Tool v1.0") and calls it a day.
haKCer brings that culture back. Drop this library into ANY Python CLI tool and instantly get animated ASCII banners with 29 different terminal effects and 9 color themes.
Think of it like this: Your boring CLI tool is a Honda Civic. haKCer is the body kit, underglow LEDs, and sound system that makes people actually WANT to use your shit.
WATCH IT RUN - Animated ASCII banners with 29 terminal effects and 9 color themes
┌─────────────────────────────────────────────────────────────────────────────┐
│ WHAT YOU GET: │
│ │
│ [✓] 29 terminal effects (decrypt, matrix, synthgrid, fireworks++) │
│ [✓] 9 color themes (synthwave, cyberpunk, tokyo_night, matrix++) │
│ [✓] Zero config - works out of the box with sane defaults │
│ [✓] Custom ASCII art support - use your own designs │
│ [✓] Smart terminal detection - no banners in pipes/redirects │
│ [✓] Production ready - fast effects for CI/CD, slow for demos │
│ [✓] Framework agnostic - works with Click, Typer, argparse, whatever │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
graph TB
A[Your CLI Tool] -->|imports| B[haKCer Library]
B --> C{Terminal Detection}
C -->|TTY| D[Banner Engine]
C -->|Non-TTY| E[Skip Banner]
D --> F[Theme Manager]
D --> G[Effect Selector]
F --> H[Color Palette]
G --> I[terminaltexteffects]
H --> I
I --> J[Animated Output]
J --> K[Terminal Display]
style A fill:#00D9FF,stroke:#fff,color:#000
style B fill:#FF10F0,stroke:#fff,color:#000
style D fill:#7928CA,stroke:#fff,color:#fff
style J fill:#00F0FF,stroke:#fff,color:#000
style K fill:#FF0080,stroke:#fff,color:#fff
sequenceDiagram
participant User as CLI Tool
participant haKCer as haKCer Library
participant Theme as Theme Manager
participant Effect as Effect Engine
participant TTE as terminaltexteffects
participant Terminal as Terminal Output
User->>haKCer: show_banner(theme="neon")
haKCer->>haKCer: Check if TTY
haKCer->>Theme: Load theme colors
Theme-->>haKCer: Return palette
haKCer->>Effect: Get effect config
Effect-->>haKCer: Return effect settings
haKCer->>TTE: Apply effect + colors
TTE->>Terminal: Render animation
Terminal-->>User: Display banner
haKCer-->>User: Return control
graph LR
A[hakcer/] --> B[__init__.py]
A --> C[banner.py]
A --> D[themes/]
A --> E[effects/]
A --> F[config/]
D --> G[synthwave.py]
D --> H[cyberpunk.py]
D --> I[tokyo_night.py]
E --> J[fast_effects.py]
E --> K[medium_effects.py]
E --> L[slow_effects.py]
F --> M[settings.py]
F --> N[defaults.py]
style A fill:#00D9FF,stroke:#fff,color:#000
style D fill:#FF10F0,stroke:#fff,color:#000
style E fill:#7928CA,stroke:#fff,color:#fff
style F fill:#00F0FF,stroke:#fff,color:#000
════════════════════════════════════════════════════════════════════════════════
ARCHITECTURAL NOTES FROM THE TRENCHES:
[*] No god objects or 5000-line files here
[*] Each effect is self-contained and swappable
[*] Themes are JSON configs, not hardcoded garbage
[*] terminaltexteffects does the heavy lifting (don't reinvent the wheel)
[*] Rich library handles the color output (because ANSI codes are for masochists)
════════════════════════════════════════════════════════════════════════════════
pip install hakcer# Create a venv like you're supposed to
python3 -m venv myproject_venv
source myproject_venv/bin/activate # Windows: myproject_venv\Scripts\activate
# Upgrade pip (because distros ship ancient versions)
pip install --upgrade pip
# Install haKCer
pip install hakcer
# Verify it worked
python -c "from hakcer import show_banner; show_banner()"git clone https://github.com/haKC-ai/hakcer.git
cd hakcer
pip install -e .Python 3.8 or higher (if you're still on 2.7, we can't help you)
terminaltexteffects >= 0.11.0 (the animation engine)
rich >= 13.0.0 (because life's too short for manual ANSI codes)
════════════════════════════════════════════════════════════════════════════════
INSTALLATION NOTES:
[*] Works on Linux, macOS, Windows (even Windows Terminal, surprisingly)
[*] No compilation required - pure Python
[*] Installs in under 10 seconds on a potato connection
[*] Zero system dependencies (no ncurses, no termcap, none of that)
════════════════════════════════════════════════════════════════════════════════
from hakcer import show_banner
# That's it. This works.
show_banner()
# Your actual CLI tool code goes here
print("Welcome to my tool...")Output: Random fast effect with neon theme. Good enough for 99% of use cases.
from hakcer import show_banner, set_theme
# Tokyo Night aesthetic (for the refined hacker)
set_theme("tokyo_night")
show_banner()
# Cyberpunk 2077 vibes (yellow/pink high contrast)
set_theme("cyberpunk")
show_banner()
# Full synthwave mode (cyan/magenta/purple retro)
set_theme("synthwave")
show_banner(effect_name="synthgrid")
# Classic green Matrix (because we're old school)
set_theme("matrix")
show_banner(effect_name="matrix")from hakcer import show_banner
# Load from file (recommended for complex art)
show_banner(
custom_file="assets/my_logo.txt",
theme="cyberpunk",
effect_name="decrypt"
)
# Inline ASCII art (for quick stuff)
my_banner = """
╔═══════════════════════════════╗
║ MY SICK CLI TOOL v2.0 ║
║ Coded by: l33th4x0r ║
╚═══════════════════════════════╝
"""
show_banner(custom_text=my_banner, theme="neon")Pro Tip: Generate ASCII art at http://patorjk.com/software/taag/ (ANSI Shadow font is sick)
════════════════════════════════════════════════════════════════════════════════
QUICK START NOTES:
[*] If you don't specify a theme, you get "neon" (good default)
[*] If you don't specify an effect, you get a random fast one
[*] Fast effects run under 2 seconds (production ready)
[*] Slow effects run 4+ seconds (demo mode, conferences, showing off)
════════════════════════════════════════════════════════════════════════════════
ALL 9 THEMES - See how each color palette transforms your ASCII art
graph TD
A[Need a Theme?] --> B{What's your vibe?}
B -->|Retro 80s| C[synthwave]
B -->|Maximum brightness| D[neon]
B -->|Modern clean| E[tokyo_night]
B -->|Darker modern| F[tokyo_storm]
B -->|High contrast| G[cyberpunk]
B -->|Classic hacker| H[matrix]
B -->|Dark vampire| I[dracula]
B -->|Professional| J[nord]
B -->|Warm cozy| K[gruvbox]
style C fill:#FF10F0
style D fill:#00F0FF
style E fill:#7928CA
style G fill:#FF0080
style H fill:#00FF00
from hakcer import set_theme, show_banner, list_themes
# Set theme globally (affects all subsequent banners)
set_theme("cyberpunk")
show_banner()
# Override theme for a specific banner
show_banner(theme="matrix")
# List all available themes
themes = list_themes()
print(themes) # ['synthwave', 'neon', 'tokyo_night', ...]════════════════════════════════════════════════════════════════════════════════
THEME NOTES:
[*] Themes are JSON configs in themes/ directory
[*] Easy to add your own (PR welcome if it's not garbage)
[*] Neon is the default because it looks sick on most terminals
[*] Matrix theme required by law for any "hacking" tool
════════════════════════════════════════════════════════════════════════════════
29 TERMINAL EFFECTS - From subtle animations to maximum visual impact
decrypt - Matrix-style decryption reveal
expand - Text expands from center
print - Typewriter effect
slide - Slides in from edge
wipe - Screen wipe transition
colorshift - Colors cycle through palette
scattered - Characters scatter then assemble
random_sequence - Random character appearance
pour - Text pours down like liquid
errorcorrect - Glitchy error correction
Use Case: CI/CD pipelines, production tools, frequent runs, impatient users
beams - Light beams scan across
binarypath - Binary code path tracing
burn - Text burns onto screen
crumble - Crumbling reveal effect
overflow - Buffer overflow animation
rain - Digital rain (mini matrix)
spray - Spray paint effect
unstable - Unstable/glitchy appearance
vhstape - VHS tape tracking errors
waves - Wave distortion effect
Use Case: Demos, presentations, tool launches, showing off to colleagues
blackhole - Black hole gravity effect
bouncyballs - Bouncing ball physics
fireworks - Fireworks explosion
matrix - Full Matrix digital rain
orbittingvolley - Orbiting particles
rings - Expanding rings
spotlights - Spotlight scanning
swarm - Particle swarm
synthgrid - Full synthwave grid animation
Use Case: Conference talks, demos, YouTube videos, impressing management
graph TD
A[Choose Effect Speed] --> B{Use Case?}
B -->|Production Tool| C[FAST]
B -->|Demo/Presentation| D[MEDIUM]
B -->|Conference/Video| E[SLOW]
C --> F[decrypt, print, slide]
D --> G[beams, burn, vhstape]
E --> H[synthgrid, matrix, fireworks]
F --> I[<2 sec runtime]
G --> J[2-4 sec runtime]
H --> K[4+ sec runtime]
style C fill:#00D9FF
style D fill:#FF10F0
style E fill:#7928CA
from hakcer import show_banner
# Let haKCer pick a fast effect (default)
show_banner(speed_preference="fast")
# Let haKCer pick a medium effect
show_banner(speed_preference="medium")
# Let haKCer pick a slow effect
show_banner(speed_preference="slow")
# Let haKCer pick ANY effect (random)
show_banner(speed_preference="any")
# Specify exact effect (override everything)
show_banner(effect_name="synthgrid")| Scenario | Speed Setting | Why |
|---|---|---|
| CI/CD Pipeline | fast |
Don't slow down builds |
| Production CLI Tool | fast |
Users run it frequently |
| Demo at Meetup | medium |
Balance of cool + time |
| Conference Talk | slow |
Make it MEMORABLE |
| YouTube Video | slow |
Production value matters |
| Internal Tool | medium |
Colleagues will appreciate it |
════════════════════════════════════════════════════════════════════════════════
EFFECT NOTES:
[*] All effects provided by terminaltexteffects library (credit where due)
[*] Fast effects are <2s because that's the user patience threshold
[*] Slow effects are 4+ seconds of pure eye candy
[*] If you're in a hurry, just use speed_preference="fast"
[*] If you're showing off, use effect_name="synthgrid" (trust us)
════════════════════════════════════════════════════════════════════════════════
#!/usr/bin/env python3
"""
basic_tool.py - Example CLI tool with haKCer banner
"""
import sys
from hakcer import show_banner, set_theme
def main():
# Only show banner if running in a terminal (not piped)
if sys.stdout.isatty():
set_theme("neon")
show_banner(speed_preference="fast", hold_time=0.5)
# Your actual tool logic here
print("Running my tool...")
print("Processing complete!")
if __name__ == "__main__":
main()Why This Pattern:
- Respects pipes and redirects (no banners in logs)
- Fast by default (production friendly)
- Clean separation of concerns
import click
from hakcer import show_banner, set_theme
@click.group()
@click.option('--no-banner', is_flag=True, help='Disable ASCII banner')
@click.option('--theme', default='neon', help='Banner theme')
@click.pass_context
def cli(ctx, no_banner, theme):
"""My Awesome CLI Tool"""
ctx.ensure_object(dict)
ctx.obj['no_banner'] = no_banner
if not no_banner:
set_theme(theme)
show_banner(speed_preference="fast")
@cli.command()
@click.pass_context
def process(ctx):
"""Process some data"""
click.echo("Processing...")
if __name__ == '__main__':
cli()Why This Pattern:
- Users can disable banners with
--no-banner - Theme selection via CLI flag
- Plays nice with Click's context system
#!/usr/bin/env python3
import sys
import os
from hakcer import show_banner, set_theme
# Read config from environment
SHOW_BANNER = os.getenv("SHOW_BANNER", "true").lower() == "true"
BANNER_THEME = os.getenv("BANNER_THEME", "neon")
BANNER_SPEED = os.getenv("BANNER_SPEED", "fast")
def main():
if SHOW_BANNER and sys.stdout.isatty():
set_theme(BANNER_THEME)
show_banner(speed_preference=BANNER_SPEED)
print("Tool running...")
if __name__ == "__main__":
main()Usage:
# Normal run with banner
./tool.py
# Disable banner
SHOW_BANNER=false ./tool.py
# Custom theme
BANNER_THEME=cyberpunk ./tool.py
# Slow banner for demo
BANNER_SPEED=slow BANNER_THEME=synthwave ./tool.pyWhy This Pattern:
- Docker-friendly (env vars are standard)
- CI/CD friendly (can disable in pipelines)
- Power users can customize without code changes
import typer
from typing import Optional
from hakcer import show_banner, set_theme
app = typer.Typer()
def version_callback(value: bool):
if value:
typer.echo("My Tool v1.0.0")
raise typer.Exit()
@app.callback()
def main(
no_banner: bool = typer.Option(False, "--no-banner", help="Skip banner"),
theme: str = typer.Option("neon", "--theme", help="Banner theme"),
version: Optional[bool] = typer.Option(None, "--version", callback=version_callback)
):
"""My Tool - Does cool stuff"""
if not no_banner:
set_theme(theme)
show_banner(speed_preference="fast")
@app.command()
def process():
"""Process data"""
typer.echo("Processing...")
if __name__ == "__main__":
app()#!/usr/bin/env python3
"""
smart_tool.py - Intelligent banner detection
"""
import sys
import os
from hakcer import show_banner, set_theme
def should_show_banner():
"""Determine if we should show a banner"""
# Don't show if output is redirected
if not sys.stdout.isatty():
return False
# Don't show in CI/CD environments
ci_vars = ['CI', 'CONTINUOUS_INTEGRATION', 'GITHUB_ACTIONS', 'GITLAB_CI']
if any(os.getenv(var) for var in ci_vars):
return False
# Check explicit override
if os.getenv('SHOW_BANNER', '').lower() == 'false':
return False
return True
def main():
if should_show_banner():
theme = os.getenv('BANNER_THEME', 'neon')
set_theme(theme)
show_banner(speed_preference='fast', hold_time=0.5)
print("Tool running...")
if __name__ == "__main__":
main()Why This Pattern:
- Automatically disables in CI/CD
- Respects pipes and redirects
- Still allows manual override
- Production ready out of the box
graph TD
A[Choose Integration] --> B{Framework?}
B -->|None/argparse| C[Pattern 1: Basic]
B -->|Click| D[Pattern 2: Click]
B -->|Typer| E[Pattern 4: Typer]
B -->|Other| C
C --> F{Need env control?}
D --> F
E --> F
F -->|Yes| G[Add Pattern 3: Env Vars]
F -->|No| H[Done]
G --> I{Production tool?}
H --> I
I -->|Yes| J[Use Pattern 5: Smart Detection]
I -->|No| K[Done]
style C fill:#00D9FF
style D fill:#FF10F0
style E fill:#7928CA
style J fill:#00F0FF
════════════════════════════════════════════════════════════════════════════════
INTEGRATION NOTES:
[*] Always check sys.stdout.isatty() - don't spam logs with ANSI codes
[*] Provide a --no-banner flag (someone will need it)
[*] Default to fast effects (production users will thank you)
[*] Use environment variables for Docker/CI/CD friendliness
[*] If your tool gets piped to other commands, banners will auto-disable
════════════════════════════════════════════════════════════════════════════════
BRING YOUR OWN DESIGNS - Any ASCII art works with all effects and themes
| Tool | URL | Best For | Badge |
|---|---|---|---|
| TAAG | http://patorjk.com/software/taag/ | Text to ASCII | |
| ASCII Generator | https://ascii-generator.site/ | Images to ASCII | |
| ASCII Art Archive | https://ascii.co.uk/art/ | Pre-made art | |
| Text-Image.com | https://www.text-image.com/convert/ | Photos to ASCII |
Top Picks for Terminal Banners:
- ANSI Shadow (clean, professional, works everywhere)
- Bloody (horror/metal aesthetic)
- Doom (classic, recognizable from the game)
- Graffiti (street art style)
- ANSI Regular (safe default)
- Block (bold and readable)
- Banner3 (old school BBS vibes)
- 3D-ASCII (depth perception)
from hakcer import show_banner, set_theme
# Load custom ASCII art from file
set_theme("cyberpunk")
show_banner(
custom_file="assets/my_logo.txt",
effect_name="decrypt",
hold_time=1.0
)my_logo.txt:
███╗ ███╗██╗ ██╗ ████████╗ ██████╗ ██████╗ ██╗
████╗ ████║╚██╗ ██╔╝ ╚══██╔══╝██╔═══██╗██╔═══██╗██║
██╔████╔██║ ╚████╔╝ ██║ ██║ ██║██║ ██║██║
██║╚██╔╝██║ ╚██╔╝ ██║ ██║ ██║██║ ██║██║
██║ ╚═╝ ██║ ██║ ██║ ╚██████╔╝╚██████╔╝███████╗
╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝
H A C K I N G T H E P L A N E T v2.0
from hakcer import show_banner
banner = """
╔═══════════════════════════════════════╗
║ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ║
║ █ █ █ █ █ ║
║ █▄ ▄█ ▄ █ ▄ █ ▄ █ ║
║ █ █ █ █▄█ █ █ █ █ █ █ █ ║
║ █ █ █ ▄▄▄█ █▄█ █ █▄█ █ ║
║ █ █ █ █ █ █ █ ║
║ █▄▄▄█ █▄▄▄█ █▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█ ║
║ ║
║ The Absolute Penetration Tool ║
║ v3.0 - UNDETECTABLE ║
╚═══════════════════════════════════════╝
"""
show_banner(custom_text=banner, theme="matrix", effect_name="decrypt")graph LR
A[Choose Generator] --> B[Generate ASCII]
B --> C[Save to File]
C --> D[Test with haKCer]
D --> E{Looks good?}
E -->|No| F[Adjust Font/Size]
F --> B
E -->|Yes| G[Ship It]
style A fill:#00D9FF
style D fill:#FF10F0
style G fill:#00FF00
Recommended widths for different terminals:
- 60-70 chars: Safe for most terminals
- 80 chars: Classic terminal width
- 100 chars: Modern wide terminals
- 120+ chars: Ultra-wide monitors only
# Test custom art with multiple themes
from hakcer import show_banner, list_themes
banner_file = "assets/my_logo.txt"
for theme in list_themes():
print(f"\n=== Testing theme: {theme} ===")
show_banner(
custom_file=banner_file,
theme=theme,
speed_preference="fast"
)| Issue | Cause | Fix |
|---|---|---|
| Art gets cut off | Too wide for terminal | Reduce width to <80 chars |
| Weird spacing | Tab characters | Replace tabs with spaces |
| Missing characters | Encoding issues | Save as UTF-8 |
| Looks garbled | Font doesn't support chars | Use ASCII-only characters |
════════════════════════════════════════════════════════════════════════════════
CUSTOM ART NOTES:
[*] Keep your art under 80 chars wide (some terminals still use this)
[*] Use UTF-8 encoding for files (not ASCII or Latin-1)
[*] Test with multiple themes - some chars look better in certain palettes
[*] Box-drawing characters (─ │ ╔ ╗ ╚ ╝) work great
[*] Avoid colors in your art file - let haKCer handle the colors
════════════════════════════════════════════════════════════════════════════════
python showcase.py╔════════════════════════════════════════════════════════════════╗
║ haKCer Interactive Showcase ║
╚════════════════════════════════════════════════════════════════╝
[1] Showcase All Effects - Record-ready demo (261 combos!)
[2] Theme Gallery - Browse all 9 themes
[3] Quick Demo - Single random fast effect
[4] Custom Effect - Pick theme + effect manually
[5] Effect Browser - Interactive effect selector
[6] Speed Test - Compare fast/medium/slow
[7] Info Dump - List all available options
[8] Synthwave Mode - Ultimate synthwave experience
[9] Exit - Quit showcase
Select option [1-9]:
# Install asciinema
pip install asciinema
# Record the full showcase
asciinema rec hakcer_demo.cast --command "python showcase.py"
# Convert to GIF
pip install agg
agg hakcer_demo.cast hakcer_demo.gif
# Or upload to asciinema
asciinema upload hakcer_demo.cast════════════════════════════════════════════════════════════════════════════════
SHOWCASE NOTES:
[*] Showcase.py is included in the repo (not installed via pip)
[*] Perfect for testing before integrating into your tool
[*] Use Mode 1 to record promotional videos
[*] Use Mode 3 for quick "does it work" tests
[*] Use Mode 8 to blow people's minds
════════════════════════════════════════════════════════════════════════════════
Display an animated ASCII banner with the specified theme and effect.
Signature:
def show_banner(
effect_name: str = None,
speed_preference: str = "fast",
hold_time: float = 1.5,
clear_after: bool = False,
theme: str = None,
custom_text: str = None,
custom_file: str = None
) -> NoneParameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
effect_name |
str | None | Specific effect to use (e.g., "decrypt", "matrix") |
speed_preference |
str | "fast" | Speed category: "fast", "medium", "slow", or "any" |
hold_time |
float | 1.5 | Seconds to hold the final frame |
clear_after |
bool | False | Clear terminal after displaying banner |
theme |
str | None | Override global theme for this banner only |
custom_text |
str | None | Custom ASCII art as string |
custom_file |
str | None | Path to file containing custom ASCII art |
Returns: None
Raises:
ValueError: If effect_name is invalidFileNotFoundError: If custom_file doesn't exist
Examples:
# Basic usage (random fast effect, current theme)
show_banner()
# Specific effect
show_banner(effect_name="synthgrid")
# Speed preference
show_banner(speed_preference="slow")
# Custom theme for this banner only
show_banner(theme="cyberpunk", effect_name="decrypt")
# Custom ASCII art from file
show_banner(custom_file="logo.txt", theme="neon")
# Custom ASCII art inline
banner = "My Tool v1.0"
show_banner(custom_text=banner, effect_name="print")
# Hold for longer
show_banner(hold_time=3.0)
# Clear terminal after
show_banner(clear_after=True)Set the global theme for all subsequent banner calls.
Signature:
def set_theme(theme_name: str) -> NoneParameters:
| Parameter | Type | Description |
|---|---|---|
theme_name |
str | Name of the theme to set |
Returns: None
Raises:
ValueError: If theme_name is not a valid theme
Available Themes:
[
"synthwave", # Cyan/Magenta/Purple retro
"neon", # Full neon spectrum (default)
"tokyo_night", # Dark blue Tokyo aesthetic
"tokyo_storm", # Darker Tokyo variant
"cyberpunk", # Yellow/Pink CP2077
"matrix", # Classic green terminals
"dracula", # Popular Dracula palette
"nord", # Arctic bluish tones
"gruvbox" # Retro warm colors
]Examples:
# Set theme globally
set_theme("cyberpunk")
show_banner() # Uses cyberpunk theme
show_banner() # Still uses cyberpunk theme
# Change theme
set_theme("matrix")
show_banner() # Now uses matrix themeGet a list of all available theme names.
Signature:
def list_themes() -> list[str]Returns: List of theme name strings
Examples:
themes = list_themes()
print(themes)
# ['synthwave', 'neon', 'tokyo_night', ...]
# Iterate through all themes
for theme in list_themes():
set_theme(theme)
print(f"\n=== Theme: {theme} ===")
show_banner(speed_preference="fast")Get a list of all available effect names.
Signature:
def list_effects() -> list[str]Returns: List of effect name strings
Examples:
effects = list_effects()
print(effects)
# ['decrypt', 'expand', 'print', 'slide', ...]
# Test all effects with same theme
set_theme("neon")
for effect in list_effects():
print(f"\n=== Effect: {effect} ===")
show_banner(effect_name=effect)Get detailed information about a specific effect.
Signature:
def get_effect_info(effect_name: str) -> dictParameters:
| Parameter | Type | Description |
|---|---|---|
effect_name |
str | Name of the effect |
Returns: Dictionary with effect metadata
Return Structure:
{
"name": str, # Effect name
"speed": str, # "fast", "medium", or "slow"
"duration": float, # Approximate duration in seconds
"description": str # Human-readable description
}Examples:
info = get_effect_info("synthgrid")
print(f"Effect: {info['name']}")
print(f"Speed: {info['speed']}")
print(f"Duration: {info['duration']}s")
print(f"Description: {info['description']}")
# Output:
# Effect: synthgrid
# Speed: slow
# Duration: 6.5s
# Description: Full synthwave grid animation with perspectivefrom hakcer import list_themes, list_effects, set_theme, show_banner
# Get user input
user_theme = input("Enter theme: ")
user_effect = input("Enter effect: ")
# Validate
if user_theme in list_themes():
set_theme(user_theme)
else:
print(f"Invalid theme. Available: {', '.join(list_themes())}")
exit(1)
if user_effect in list_effects():
show_banner(effect_name=user_effect)
else:
print(f"Invalid effect. Available: {', '.join(list_effects())}")
exit(1)import random
from hakcer import list_themes, list_effects, set_theme, show_banner
# Random theme and effect
random_theme = random.choice(list_themes())
random_effect = random.choice(list_effects())
set_theme(random_theme)
show_banner(effect_name=random_effect)from hakcer import list_effects, get_effect_info, show_banner
# Get only fast effects
fast_effects = [
effect for effect in list_effects()
if get_effect_info(effect)["speed"] == "fast"
]
# Use a random fast effect
import random
show_banner(effect_name=random.choice(fast_effects))════════════════════════════════════════════════════════════════════════════════
API NOTES:
[*] All functions are in the hakcer namespace (from hakcer import *)
[*] Type hints provided for all parameters
[*] Functions validate input and raise ValueError for invalid args
[*] No async/await - everything is synchronous
[*] Thread-safe (but why would you multithread ASCII art?)
════════════════════════════════════════════════════════════════════════════════
Python 3.8 or higher
├── terminaltexteffects >= 0.11.0 (animation engine)
└── rich >= 13.0.0 (terminal formatting)
- Purpose: Provides all 29 animation effects
- Why: Writing terminal animations from scratch is pain
- License: MIT
- Repo: https://github.com/ChrisBuilds/terminaltexteffects
- Purpose: Terminal color/formatting, emoji rendering
- Why: Better than raw ANSI codes, cross-platform
- License: MIT
- Repo: https://github.com/Textualize/rich
graph TD
A[Your Tool] --> B[hakcer]
B --> C[terminaltexteffects]
B --> D[rich]
C --> E[Python stdlib]
D --> E
style B fill:#00D9FF
style C fill:#FF10F0
style D fill:#7928CA
| Python Version | haKCer | terminaltexteffects | rich | Status |
|---|---|---|---|---|
| 3.8 | ✓ | ✓ | ✓ | |
| 3.9 | ✓ | ✓ | ✓ | |
| 3.10 | ✓ | ✓ | ✓ | |
| 3.11 | ✓ | ✓ | ✓ | |
| 3.12 | ✓ | ✓ | ✓ | |
| 3.13+ | ✓ | ✓ | ✓ |
CPU: Anything from the last 15 years
RAM: 50MB (seriously, it's tiny)
Disk: <5MB installed size
Terminal: Any terminal that supports ANSI codes
Network: Not required (no telemetry, no phone home)
# For development/testing
pytest >= 7.0.0 # Running tests
pytest-cov >= 4.0.0 # Code coverage
ruff >= 0.1.0 # Linting/formatting
mypy >= 1.0.0 # Type checking
# For recording demos
asciinema >= 2.0.0 # Terminal recording
agg >= 1.0.0 # Converting to GIF#!/usr/bin/env python3
"""verify_install.py - Check if haKCer is working"""
try:
from hakcer import show_banner, list_themes, list_effects
print("[✓] haKCer imported successfully")
except ImportError as e:
print(f"[✗] Failed to import haKCer: {e}")
exit(1)
try:
themes = list_themes()
print(f"[✓] Found {len(themes)} themes")
except Exception as e:
print(f"[✗] Failed to list themes: {e}")
exit(1)
try:
effects = list_effects()
print(f"[✓] Found {len(effects)} effects")
except Exception as e:
print(f"[✗] Failed to list effects: {e}")
exit(1)
try:
print("\n[✓] Testing banner display:")
show_banner(speed_preference="fast")
print("\n[✓] All systems operational!")
except Exception as e:
print(f"[✗] Failed to show banner: {e}")
exit(1)════════════════════════════════════════════════════════════════════════════════
REQUIREMENTS NOTES:
[*] Only 2 dependencies - we don't pull in half of PyPI
[*] All dependencies are MIT licensed (compatible with everything)
[*] No native extensions - pure Python, no compilation
[*] No network dependencies - works completely offline
[*] No system libraries required (ncurses, termcap, etc)
════════════════════════════════════════════════════════════════════════════════
Symptom: ANSI codes appear in log files or when piping output
Solution:
import sys
from hakcer import show_banner
# Only show banner if output is a terminal
if sys.stdout.isatty():
show_banner()Why This Happens: By default, haKCer doesn't check if stdout is redirected.
Symptom: Colors appear as weird characters or don't work at all
Solutions:
- Check terminal support:
# Linux/Mac
echo $TERM
# Should be xterm-256color or similar
export TERM=xterm-256color- Windows users:
# Use Windows Terminal, not CMD.exe
# Or enable ANSI support:
reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1- SSH sessions:
# Add to ~/.bashrc or ~/.zshrc
export TERM=xterm-256colorWhy This Happens: Old terminals don't support full color.
Symptom: ASCII art gets cut off on the right side
Solutions:
- Resize terminal:
# Check current size
tput cols # Should be 80+- Use narrower art:
# Keep custom art under 70 chars wide for safety
show_banner(custom_file="narrow_logo.txt")Why This Happens: Terminal is too narrow for the ASCII art.
Symptom: ImportError: No module named 'hakcer'
Solutions:
- Check installation:
pip list | grep hakcer
# Should show: hakcer 1.1.3- Install in correct environment:
# Make sure you're in the right venv
which python
pip install hakcer- Reinstall:
pip uninstall hakcer
pip install hakcerWhy This Happens: Not installed or wrong Python environment active.
Symptom: Effects run slowly or stutter
Solutions:
- Use faster effects:
# Avoid slow effects in production
show_banner(speed_preference="fast")- Check system load:
top # Make sure CPU isn't pegged- SSH latency:
# On high-latency connections, skip animations
show_banner(effect_name="print") # Fastest effectWhy This Happens: Slow terminal rendering or high system load.
A: Yes. MIT license means do whatever you want. No attribution required (but appreciated).
A: Yes, but you need to allocate a TTY:
# Run with -it flags
docker run -it your-image
# Or in docker-compose:
services:
app:
tty: true
stdin_open: trueA: Yes, multiple ways:
# Method 1: Check for CI environment
import os
if not os.getenv('CI'):
show_banner()
# Method 2: Environment variable
# Set SHOW_BANNER=false in your CI config
# Method 3: CLI flag
# Implement --no-banner flagA: Yes. Install like any PyPI package:
# Poetry
poetry add hakcer
# PDM
pdm add hakcer
# Pipenv
pipenv install hakcer
# pip (obviously)
pip install hakcerA: YES. PRs welcome. Requirements:
- New themes: Add JSON config in
themes/directory - New effects: Wrapper for terminaltexteffects
- Include example/demo
- Update documentation
- Don't break existing stuff
A: Yes, with caveats:
Do use it for:
- CLI tools (perfect use case)
- Developer tooling
- Security tools (give them some STYLE)
- Demo scripts
Don't use it for:
- Critical system logs (use proper logging)
- Automated scripts that parse output
- Anything where terminal output is parsed
A: Because haKC.ai is the collective. The 'K' and 'C' stand for Kansas City (SecKC represent). Also because "hacker" was taken on PyPI by some abandoned package from 2013.
A: Minimal:
- Fast effects: <2 seconds
- Memory: <10MB
- CPU: One core briefly
- Startup time: ~50ms import overhead
Bottom line: If your tool takes 30+ seconds to run, a 1-second banner is <5% overhead.
# Read the full README
less README.md
# Or online
https://github.com/haKC-ai/hakcer#readme# Test if things are working
python showcase.pyhttps://github.com/haKC-ai/hakcer/issues
Before opening an issue:
[✓] Search existing issues
[✓] Include Python version, OS, terminal type
[✓] Provide a minimal reproducible example
[✓] Don't ask for features that violate the core design
We're part of the SecKC (Kansas City Security) community:
- Website: https://seckc.org/
- Monthly meetups
- Beginner friendly
- No corporate bullshit
════════════════════════════════════════════════════════════════════════════════
SUPPORT NOTES:
[*] Check GitHub Issues first - your question might be answered
[*] Include system info in bug reports (OS, Python version, terminal)
[*] "It doesn't work" is not a useful bug report
[*] PRs are more likely to get merged than feature requests
[*] We don't provide email support (use GitHub Issues)
════════════════════════════════════════════════════════════════════════════════
| Resource | URL | Badge |
|---|---|---|
| PyPI Package | https://pypi.org/project/hakcer/ | |
| GitHub Repository | https://github.com/haKC-ai/hakcer | |
| Issue Tracker | https://github.com/haKC-ai/hakcer/issues | |
| Documentation | https://github.com/haKC-ai/hakcer#readme | |
| Changelog | https://github.com/haKC-ai/hakcer/blob/main/CHANGELOG.md |
| Dependency | Repository | License |
|---|---|---|
| terminaltexteffects | https://github.com/ChrisBuilds/terminaltexteffects | |
| rich | https://github.com/Textualize/rich |
| Project | Description | Link |
|---|---|---|
| Awesome Hacker Art | Awesome Hacker Art | https://github.com/haKC-ai |
| haKC.ai | AI tools collective | https://github.com/haKC-ai |
| SecKC | Kansas City Security Community | https://seckc.org/ |
| ASCII Art Archive | Pre-made ASCII art | https://ascii.co.uk/art/ |
| TAAG | Text to ASCII Art Generator | http://patorjk.com/software/taag/ |
Built with:
├── terminaltexteffects - Terminal animation engine by ChrisBuilds
├── rich - Terminal formatting by Textualize
├── Python - Because we're not masochists
└── https://github.com/NoDataFound/awesome-hacker-art
Contact: Use GitHub Issues (no email support)
GROUP NEWS: Be a real one and contribute.
GR33TZ: SecKC, LEGACY CoWTownComputerCongress,ACiD,
iCE, T$A, +o--, badge lords
SHOUTZ:
[*] 14.4k Modem Jammers
[*] l33t soulz still patching proggies &
huntin' sick ANSIs for their AOHELL punter
FU to [LAMERZ] still using WordPad
If your editor auto wraps lines, bounce now.
───── ▓ signed, /dev/CØR.23: ▓ ─────
"nano > vim. come fight us."



