Convert trading charts to images using Node.js Canvas, lightweight-charts, and CCXT. A powerful Node.js library for generating high-quality trading chart images from market data.
| Candlestick | Line | Area |
|---|---|---|
![]() |
![]() |
![]() |
| Heikin-Ashi | Renko |
|---|---|
![]() |
![]() |
- ๐ Real Market Data: Fetch live data from multiple exchanges via CCXT
- ๐จ High-Quality Charts: Generate professional charts using lightweight-charts
- ๐ผ๏ธ Multiple Formats: Export to PNG and JPEG formats using Node.js Canvas
- โก Fast & Lightweight: Optimized for performance and minimal dependencies
- ๐ง Flexible API: Both programmatic API and CLI interface
- ๐ฆ Easy Integration: Simple npm install and import
- ๐จ Custom Bar Colors: Customize bullish/bearish candle colors
- ๐ Horizontal Levels: Add support/resistance levels with labels
- ๐ Advanced Chart Types: Candlestick, Line, Area, Heikin-Ashi, Renko, Line Break
- ๐ฏ Custom Themes: Light/Dark themes with custom colors
- ๐๏ธ Hide Elements: Hide title, time axis, and grid
- ๐จ Color Customization: Hex, RGB, named colors, and gradients
- ๐ Scaling Options: Auto-scaling and manual scale factors
- ๐ Multiple Exchanges: Binance, Kraken, Coinbase, and more
- ๐ Chart Comparison: Side-by-side and grid layouts for multiple symbols
- โฐ Timeframe Comparison: Same symbol across different timeframes
- ๐จ Comparison Customization: Custom colors and themes for comparisons
- ๐ Technical Indicators: VWAP, EMA, SMA, and Bollinger Bands with custom colors
- Node.js Canvas: High-performance 2D graphics rendering
- lightweight-charts: Professional trading chart library
- CCXT: Unified cryptocurrency exchange API
- TypeScript: Type-safe development
- ESLint: Code quality and consistency
npm install @neabyte/chart-to-image
# Basic chart generation npx @neabyte/chart-to-image --symbol BTC/USDT --output chart.png # Custom timeframe and dimensions npx @neabyte/chart-to-image -s ETH/USDT -t 4h -o eth-chart.png -w 1200 -h 800 # With custom theme and colors npx @neabyte/chart-to-image -s BTC/USDT -o chart.png --theme dark --background-color "#1a1a2e" --text-color "#00d4ff" # Advanced chart types npx @neabyte/chart-to-image -s ETH/USDT -o heikin-ashi.png --chart-type heikin-ashi npx @neabyte/chart-to-image -s BTC/USDT -o renko.png --chart-type renko npx @neabyte/chart-to-image -s BTC/USDT -o line-break.png --chart-type line-break # Technical indicators npx @neabyte/chart-to-image -s BTC/USDT -o vwap-chart.png --vwap npx @neabyte/chart-to-image -s ETH/USDT -o ema-chart.png --ema npx @neabyte/chart-to-image -s BTC/USDT -o sma-chart.png --sma npx @neabyte/chart-to-image -s BTC/USDT -o indicators.png --vwap --ema --sma # Bollinger Bands with custom colors npx @neabyte/chart-to-image -s BTC/USDT -o bb-chart.png --bb npx @neabyte/chart-to-image -s ETH/USDT -o bb-custom.png --bb --bb-upper-color "#ff6b9d" --bb-middle-color "#4ecdc4" --bb-lower-color "#ff6b9d" --bb-background-color "#ff6b9d" --bb-background-opacity 0.2 npx @neabyte/chart-to-image -s BTC/USDT -o bb-line.png --bb --chart-type line --bb-upper-color "#9b59b6" --bb-middle-color "#f39c12" --bb-lower-color "#9b59b6" --bb-background-color "#9b59b6" --bb-background-opacity 0.25 # All indicators together npx @neabyte/chart-to-image -s BTC/USDT -o all-indicators.png --vwap --ema --sma --bb # Chart comparison (side-by-side) npx @neabyte/chart-to-image --compare "BTC/USDT,ETH/USDT" --output comparison.png # Timeframe comparison (same symbol, different timeframes) npx @neabyte/chart-to-image --compare "BTC/USDT,BTC/USDT" --timeframes "1h,4h" --output timeframe-comparison.png # Grid comparison with custom colors npx @neabyte/chart-to-image --compare "BTC/USDT,ETH/USDT" --layout grid --custom-colors "bullish=#00ff88,bearish=#ff4444" --output grid-comparison.png # Comparison with indicators npx @neabyte/chart-to-image --compare "BTC/USDT,ETH/USDT" --vwap --ema --output comparison-indicators.png # Comparison with Bollinger Bands npx @neabyte/chart-to-image --compare "BTC/USDT,ETH/USDT" --bb --output comparison-bb.png npx @neabyte/chart-to-image --compare "BTC/USDT,ETH/USDT" --bb --bb-upper-color "#ff6b9d" --bb-middle-color "#4ecdc4" --bb-lower-color "#ff6b9d" --bb-background-color "#ff6b9d" --bb-background-opacity 0.2 --output comparison-bb-custom.png # Hide elements for clean charts npx @neabyte/chart-to-image -s ADA/USDT -o clean.png --hide-title --hide-time-axis --hide-grid
import { quickChart, generateChartImage, fetchMarketData, ComparisonService } from '@neabyte/chart-to-image' // Quick chart generation const result = await quickChart('BTC/USDT', 'chart.png', { timeframe: '1h', width: 1200, height: 800, theme: 'dark' }) // Advanced configuration const config = { symbol: 'ETH/USDT', timeframe: '4h', exchange: 'binance', outputPath: 'eth-chart.png', width: 1000, height: 600, theme: 'light', chartType: 'heikin-ashi', backgroundColor: '#1a1a2e', textColor: '#00d4ff', customBarColors: { bullish: '#00ff88', bearish: '#ff4444', wick: '#ffffff', border: '#333333' }, showTitle: false, showTimeAxis: false, showGrid: false } const result = await generateChartImage(config) // Chart comparison const comparisonResult = await ComparisonService.sideBySide( ['BTC/USDT', 'ETH/USDT'], 'comparison.png' ) // Timeframe comparison const timeframeResult = await ComparisonService.timeframeComparison( 'BTC/USDT', ['1h', '4h', '1d'], 'timeframe-comparison.png' ) // Grid comparison with custom colors const gridResult = await ComparisonService.grid( ['BTC/USDT', 'ETH/USDT'], 2, 'grid-comparison.png', { customBarColors: { bullish: '#00ff88', bearish: '#ff4444' } } ) // Chart with technical indicators const indicatorResult = await generateChartImage({ symbol: 'BTC/USDT', timeframe: '1h', outputPath: 'indicators.png', showVWAP: true, showEMA: true, emaPeriod: 20, showSMA: true, smaPeriod: 20 }) // Chart with Bollinger Bands const bbResult = await generateChartImage({ symbol: 'BTC/USDT', timeframe: '1h', outputPath: 'bb-chart.png', showBollingerBands: true, bbPeriod: 20, bbStandardDeviations: 2, bbColors: { upper: '#ff6b9d', middle: '#4ecdc4', lower: '#ff6b9d', background: '#ff6b9d', backgroundOpacity: 0.2 } }) // All indicators together const allIndicatorsResult = await generateChartImage({ symbol: 'BTC/USDT', timeframe: '1h', outputPath: 'all-indicators.png', showVWAP: true, showEMA: true, emaPeriod: 20, showSMA: true, smaPeriod: 20, showBollingerBands: true, bbPeriod: 20, bbStandardDeviations: 2, bbColors: { upper: '#ff6b9d', middle: '#4ecdc4', lower: '#ff6b9d', background: '#ff6b9d', backgroundOpacity: 0.2 } }) // Comparison with indicators const comparisonWithIndicators = await ComparisonService.sideBySide( ['BTC/USDT', 'ETH/USDT'], 'comparison-indicators.png', { showVWAP: true, showEMA: true, emaPeriod: 20, showSMA: true, smaPeriod: 20 } ) // Comparison with Bollinger Bands const comparisonWithBB = await ComparisonService.sideBySide( ['BTC/USDT', 'ETH/USDT'], 'comparison-bb.png', { showBollingerBands: true, bbPeriod: 20, bbStandardDeviations: 2, bbColors: { upper: '#ff6b9d', middle: '#4ecdc4', lower: '#ff6b9d', background: '#ff6b9d', backgroundOpacity: 0.2 } } )
- Candlestick: Traditional OHLC candles
- Line: Simple line chart
- Area: Filled area chart
- Heikin-Ashi: Trend-smoothed candles
- Renko: Price-based block chart
- Line Break: Break high/low trend patterns
- VWAP: Volume Weighted Average Price (institutional standard)
- EMA: Exponential Moving Average (configurable periods)
- SMA: Simple Moving Average (configurable periods)
- Combined Analysis: Use all indicators together for comprehensive analysis
# Hex colors --background-color "#1a1a2e" --text-color "#00d4ff" # RGB colors --background-color "rgb(25, 25, 112)" --text-color "rgb(255, 215, 0)" # Named colors --background-color "midnightblue" --text-color "gold" # Gradients --background-color "linear-gradient(135deg, #667eea 0%, #764ba2 100%)"
# Hide title --hide-title # Hide time axis --hide-time-axis # Hide grid --hide-grid # Hide all elements --hide-title --hide-time-axis --hide-grid
# Auto-scaling --auto-scale # Manual scaling --scale-x 1.2 --scale-y 1.1 # Price limits --min-scale 45000 --max-scale 50000
- Binance
- Coinbase
- Kraken
- KuCoin
- OKX
- 1m (1 minute)
- 5m (5 minutes)
- 15m (15 minutes)
- 30m (30 minutes)
- 1h (1 hour)
- 4h (4 hours)
- 1d (1 day)
- 1w (1 week)
- PNG: High-quality raster format
- JPEG: Compressed raster format
For complete usage guide with detailed examples, see USAGE.md ๐
git clone https://github.com/NeaByteLab/Chart-To-Image.git
cd Chart-To-Image
npm installnpm run build
npm run dev
npm testnpm run lint npm run lint:fix
src/
โโโ core/
โ โโโ config.ts # Chart configuration
โ โโโ renderer.ts # Chart rendering engine
โโโ renderer/
โ โโโ charts.ts # Chart type renderers
โ โโโ elements.ts # Chart elements (axes, grid, etc.)
โ โโโ index.ts # Main renderer orchestrator
โ โโโ types.ts # Renderer types
โ โโโ utils.ts # Renderer utilities
โโโ types/
โ โโโ types.ts # TypeScript type definitions
โโโ utils/
โ โโโ cli.ts # CLI argument parsing
โ โโโ exporter.ts # Image export utilities
โ โโโ provider.ts # Market data fetching
โ โโโ utils.ts # Chart data utilities
โโโ index.ts # Main API exports
โโโ cli.ts # Command line interface
- ๐ด Fork the repository
- ๐ฟ Create a feature branch
- โ๏ธ Make your changes
- ๐งช Add tests if applicable
- ๐ค Submit a pull request
MIT License - see LICENSE file for details.







