Add complete Rust implementation with: - 20+ motion effects (fade, slide, scale, typewriter, wave, bounce, etc.) - 18+ easing functions (linear, quad, cubic, elastic, back, bounce) - Color support (CSS4 colors, hex codes, gradients) - Figlet integration with custom fonts and options - Cross-platform support (Linux, macOS, Windows) - Comprehensive CI/CD workflows - Full test suite with integration tests - Documentation (README.md, CLAUDE.md) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
291 lines
8.4 KiB
Markdown
291 lines
8.4 KiB
Markdown
# 🐷 Piglet
|
|
|
|
<div align="center">
|
|
|
|
**Animated and colorful figlet wrapper with motion effects**
|
|
|
|
[](https://github.com/valknarthing/piglet/actions/workflows/ci.yml)
|
|
[](https://github.com/valknarthing/piglet/actions/workflows/security.yml)
|
|
[](https://github.com/valknarthing/piglet/actions/workflows/coverage.yml)
|
|
[](https://opensource.org/licenses/MIT)
|
|
[](https://www.rust-lang.org)
|
|
[](https://crates.io/crates/piglet)
|
|
|
|
</div>
|
|
|
|
---
|
|
|
|
## ✨ Features
|
|
|
|
- 🎨 **Rich Color Support**: CSS4 colors, hex codes, and smooth gradients
|
|
- 🎬 **20+ Motion Effects**: Fade, slide, scale, typewriter, wave, bounce, and more
|
|
- ⚡ **18+ Easing Functions**: Linear, quad, cubic, elastic, back, bounce variations
|
|
- 🖼️ **Figlet Integration**: Full support for figlet fonts and options
|
|
- 🔄 **Looping Animations**: Infinite or single-run modes
|
|
- 🎯 **High Performance**: Async rendering with configurable FPS
|
|
- 🌈 **Gradient Engine**: Parse and apply CSS-style gradients
|
|
- 📦 **Cross-Platform**: Linux, macOS, and Windows support
|
|
|
|
## 📦 Installation
|
|
|
|
### From Source
|
|
|
|
```bash
|
|
git clone https://github.com/valknarthing/piglet.git
|
|
cd piglet
|
|
cargo build --release
|
|
```
|
|
|
|
The binary will be available at `target/release/piglet`.
|
|
|
|
### Prerequisites
|
|
|
|
Piglet requires `figlet` to be installed on your system:
|
|
|
|
```bash
|
|
# Ubuntu/Debian
|
|
sudo apt-get install figlet
|
|
|
|
# macOS
|
|
brew install figlet
|
|
|
|
# Windows
|
|
choco install figlet -y
|
|
```
|
|
|
|
## 🚀 Quick Start
|
|
|
|
```bash
|
|
# Simple color palette animation
|
|
piglet "Hello World" -p "#FF5733,#33FF57,#3357FF"
|
|
|
|
# Gradient with fade-in effect
|
|
piglet "Rainbow" -g "linear-gradient(90deg, red, orange, yellow, green, blue, purple)" -e fade-in
|
|
|
|
# Typewriter effect with custom timing
|
|
piglet "Type It Out" -e typewriter -d 3s -i ease-out
|
|
|
|
# Bouncing text with loop
|
|
piglet "Bounce!" -e bounce-in -l
|
|
```
|
|
|
|
## 📖 Usage
|
|
|
|
```
|
|
piglet [TEXT] [OPTIONS]
|
|
|
|
Arguments:
|
|
<TEXT> Text to render with figlet
|
|
|
|
Options:
|
|
-d, --duration <DURATION> Duration of animation [default: 3s]
|
|
Formats: 3000ms, 0.3s, 5m, 0.5h
|
|
|
|
-p, --color-palette <COLORS> Color palette (comma-separated)
|
|
Example: "#FF5733,#33FF57,blue,red"
|
|
|
|
-g, --color-gradient <GRADIENT> CSS gradient definition
|
|
Example: "linear-gradient(90deg, red, blue)"
|
|
|
|
-e, --motion-effect <EFFECT> Motion effect to apply [default: fade-in]
|
|
|
|
-i, --motion-ease <EASING> Easing function [default: ease-in-out]
|
|
|
|
-f, --font <FONT> Figlet font to use
|
|
|
|
-l, --loop Loop animation infinitely
|
|
|
|
--fps <FPS> Frame rate [default: 30]
|
|
|
|
--list-effects List all available effects
|
|
--list-easing List all available easing functions
|
|
--list-colors List all CSS4 color names
|
|
|
|
-- <FIGLET_ARGS>... Additional figlet options
|
|
Example: -- -w 200 -c
|
|
|
|
-h, --help Print help
|
|
-V, --version Print version
|
|
```
|
|
|
|
## 🎬 Motion Effects
|
|
|
|
| Effect | Description | Effect | Description |
|
|
|--------|-------------|--------|-------------|
|
|
| `fade-in` | Fade from transparent | `fade-out` | Fade to transparent |
|
|
| `fade-in-out` | Fade in then out | `slide-in-top` | Slide from top |
|
|
| `slide-in-bottom` | Slide from bottom | `slide-in-left` | Slide from left |
|
|
| `slide-in-right` | Slide from right | `scale-up` | Scale from small |
|
|
| `scale-down` | Scale from large | `pulse` | Pulsing effect |
|
|
| `bounce-in` | Bounce into view | `bounce-out` | Bounce out of view |
|
|
| `typewriter` | Type character by character | `typewriter-reverse` | Untype backwards |
|
|
| `wave` | Wave motion | `jello` | Jello wobble |
|
|
| `color-cycle` | Cycle through colors | `rainbow` | Rainbow effect |
|
|
| `gradient-flow` | Flowing gradient | `rotate-in` | Rotate into view |
|
|
| `rotate-out` | Rotate out of view | | |
|
|
|
|
## ⚡ Easing Functions
|
|
|
|
| Category | Functions |
|
|
|----------|-----------|
|
|
| **Linear** | `linear` |
|
|
| **Basic** | `ease-in`, `ease-out`, `ease-in-out` |
|
|
| **Quadratic** | `ease-in-quad`, `ease-out-quad`, `ease-in-out-quad` |
|
|
| **Cubic** | `ease-in-cubic`, `ease-out-cubic`, `ease-in-out-cubic` |
|
|
| **Back** | `ease-in-back`, `ease-out-back`, `ease-in-out-back` |
|
|
| **Elastic** | `ease-in-elastic`, `ease-out-elastic`, `ease-in-out-elastic` |
|
|
| **Bounce** | `ease-in-bounce`, `ease-out-bounce`, `ease-in-out-bounce` |
|
|
|
|
## 🎨 Color Options
|
|
|
|
### Palette Mode
|
|
Provide a comma-separated list of colors:
|
|
```bash
|
|
piglet "Text" -p "red,blue,green"
|
|
piglet "Text" -p "#FF5733,#33FF57,#3357FF"
|
|
piglet "Text" -p "crimson,gold,navy"
|
|
```
|
|
|
|
### Gradient Mode
|
|
Use CSS gradient syntax:
|
|
```bash
|
|
piglet "Text" -g "linear-gradient(90deg, red, blue)"
|
|
piglet "Text" -g "linear-gradient(to right, #FF5733 0%, #33FF57 50%, #3357FF 100%)"
|
|
```
|
|
|
|
Supports:
|
|
- Hex colors (`#FF5733`)
|
|
- CSS4 color names (`red`, `blue`, `crimson`, etc.)
|
|
- Position percentages (`0%`, `50%`, `100%`)
|
|
- Angle notation (`90deg`, `180deg`, `to right`, `to bottom`)
|
|
|
|
## 💡 Examples
|
|
|
|
### Basic Animation
|
|
```bash
|
|
piglet "Welcome" -e fade-in -d 2s
|
|
```
|
|
|
|
### Rainbow Gradient with Typewriter
|
|
```bash
|
|
piglet "Rainbow Text" \
|
|
-g "linear-gradient(90deg, red, orange, yellow, green, blue, indigo, violet)" \
|
|
-e typewriter \
|
|
-d 4s \
|
|
-i ease-in-out
|
|
```
|
|
|
|
### Bouncing Logo with Custom Font
|
|
```bash
|
|
piglet "LOGO" \
|
|
-f slant \
|
|
-e bounce-in \
|
|
-p "#FF6B6B,#4ECDC4,#45B7D1" \
|
|
-i ease-out-bounce \
|
|
-l
|
|
```
|
|
|
|
### Infinite Wave with Gradient Flow
|
|
```bash
|
|
piglet "Ocean Waves" \
|
|
-g "linear-gradient(180deg, #0077be, #00c9ff, #0077be)" \
|
|
-e wave \
|
|
-l
|
|
```
|
|
|
|
### Custom Figlet Options
|
|
```bash
|
|
# Center text with width 200
|
|
piglet "Centered" -- -w 200 -c
|
|
|
|
# Use specific font with kerning
|
|
piglet "Custom" -f banner -- -k
|
|
```
|
|
|
|
## 🏗️ Architecture
|
|
|
|
```
|
|
CLI Input → Figlet Wrapper → Parser (duration/colors/gradients)
|
|
↓
|
|
Color Engine (palette/gradient interpolation)
|
|
↓
|
|
Animation Engine (effects + easing)
|
|
↓
|
|
Terminal Manager → Render Loop → Output
|
|
```
|
|
|
|
### Key Components
|
|
- **FigletWrapper**: Executes figlet and captures ASCII output
|
|
- **Parser**: Converts CLI strings to structured data (duration, colors, gradients)
|
|
- **ColorEngine**: Manages color palettes and gradient interpolation
|
|
- **AnimationEngine**: Applies motion effects with easing functions
|
|
- **TerminalManager**: Handles terminal setup/cleanup and frame rendering
|
|
|
|
## 🔧 Development
|
|
|
|
### Build
|
|
```bash
|
|
cargo build
|
|
```
|
|
|
|
### Test
|
|
```bash
|
|
cargo test --all-features
|
|
```
|
|
|
|
### Lint
|
|
```bash
|
|
cargo fmt --all -- --check
|
|
cargo clippy --all-targets --all-features -- -D warnings
|
|
```
|
|
|
|
### Documentation
|
|
```bash
|
|
cargo doc --no-deps --all-features
|
|
```
|
|
|
|
## 🎯 Cross-Platform Support
|
|
|
|
Piglet builds on:
|
|
- **Linux**: `x86_64-unknown-linux-gnu`, `x86_64-unknown-linux-musl`
|
|
- **macOS**: `x86_64-apple-darwin`, `aarch64-apple-darwin`
|
|
- **Windows**: `x86_64-pc-windows-msvc`
|
|
|
|
```bash
|
|
# Build for specific target
|
|
cargo build --release --target x86_64-unknown-linux-musl
|
|
```
|
|
|
|
## 🤝 Contributing
|
|
|
|
Contributions are welcome! Please feel free to submit issues or pull requests.
|
|
|
|
1. Fork the repository
|
|
2. Create your feature branch (`git checkout -b feature/amazing-effect`)
|
|
3. Commit your changes (`git commit -m 'Add amazing effect'`)
|
|
4. Push to the branch (`git push origin feature/amazing-effect`)
|
|
5. Open a Pull Request
|
|
|
|
## 📝 License
|
|
|
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
|
|
## 🙏 Acknowledgments
|
|
|
|
- [figlet](http://www.figlet.org/) - The original ASCII art generator
|
|
- [crossterm](https://github.com/crossterm-rs/crossterm) - Terminal manipulation
|
|
- [palette](https://github.com/Ogeon/palette) - Color space conversions
|
|
- [scirs2-interpolate](https://github.com/scirs/scirs2-interpolate) - Easing functions
|
|
|
|
## 📊 Project Stats
|
|
|
|

|
|

|
|

|
|
|
|
---
|
|
|
|
<div align="center">
|
|
Made with ❤️ and Rust
|
|
</div>
|