goshot

module
v0.4.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 22, 2024 License: MIT

README ยถ

Goshot

Go Reference Go Report Card License

Goshot is a powerful Go library and CLI tool for creating beautiful code screenshots with customizable window chrome, syntax highlighting, and backgrounds. Similar to Carbon and Silicon, Goshot allows you to create stunning visual representations of your code snippets for documentation, presentations, or social media sharing.

โœจ Features

  • ๐ŸŽจ Beautiful syntax highlighting with multiple themes
  • ๐Ÿ–ผ Customizable window chrome (macOS, Windows, Linux styles)
  • ๐ŸŒˆ Various background options (solid colors, gradients, images)
  • ๐Ÿ”ค Custom font support
  • ๐Ÿ“ Adjustable padding and margins
  • ๐Ÿ’พ Multiple export formats (PNG, JPEG)
  • ๐Ÿ›  Both CLI and library interfaces

Quick Start

Installation

[!NOTE]
The CLI is a work in progress, but should be more or less functional.

# Install the CLI tool
go install github.com/watzon/goshot/cmd/goshot@latest

# Install the library
go get github.com/watzon/goshot
Basic Usage
package main

import (
    "image/color"
    "log"

    "github.com/watzon/goshot/pkg/background"
    "github.com/watzon/goshot/pkg/chrome"
    "github.com/watzon/goshot/pkg/render"
)

func main() {
    // Create a new canvas with macOS chrome and gradient background
    canvas := render.NewCanvas().
        SetChrome(chrome.NewMacChrome(chrome.WithTitle("Hello World"))).
        SetBackground(
            background.NewGradientBackground(
                background.LinearGradient,
                background.GradientStop{Color: color.RGBA{R: 26, G: 27, B: 38, A: 255}, Position: 0},
                background.GradientStop{Color: color.RGBA{R: 40, G: 42, B: 54, A: 255}, Position: 1},
            ).
                SetAngle(45).
                SetPadding(40).
                SetCornerRadius(8).
                SetShadow(
                    background.NewShadow().
                        SetOffset(0, 3).
                        SetBlur(20).
                        SetSpread(8).
                        SetColor(color.RGBA{R: 0, G: 0, B: 0, A: 200}),
                ),
        ).
        SetCodeStyle(&render.CodeStyle{
            Language:        "go",
            Theme:           "dracula",
            TabWidth:        4,
            ShowLineNumbers: true,
        })

    // Render code to file
    code := `func main() {
        fmt.Println("Hello, World!")
    }`
    
    img, err := canvas.RenderToImage(code)
    if err != nil {
        log.Fatal(err)
    }
    
    if err := render.SaveAsPNG(img, "code.png"); err != nil {
        log.Fatal(err)
    }
}

Documentation

For detailed documentation, examples, and guides, please visit our Wiki:

License

This project is licensed under the MIT License - see the LICENSE file for details.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL