Skip to content

Instantly share code, notes, and snippets.

@andyfeller
Last active February 1, 2025 18:43
Show Gist options
  • Save andyfeller/3104a42bc367831e2d5f3910bde6cf2e to your computer and use it in GitHub Desktop.
Save andyfeller/3104a42bc367831e2d5f3910bde6cf2e to your computer and use it in GitHub Desktop.
Tips and tricks excerpts from charmbracelet/vhs tapes

Source: path:**/*.tape

  • Using Up and Left to rewrite previous commands (source)

    Type "grex -c 'regexes are awesome' 'regexes are awful'"
    Sleep 3s
    Enter
    Sleep 10s
    
    Up
    Left 42
    Type " --verbose"
    Sleep 3s
    Enter
    Sleep 15s
    Type "clear"
    Enter

    Animated gif of grex tape

  • Using Type and Ctrl+C for conversational comments (source)

    Sleep 1s
    Type "# You can pipe one or multiple directory paths to cd" Sleep 1s Ctrl+C
    Type "ghq list --full-path | cd" Sleep 1s Enter
    Sleep 1s

    Animated gif of enhancd

  • Using Screenshot to capture static demo screenshots (source)

    Down
    Type "i" Sleep 0.5s
    Screenshot default.png Sleep 0.5s
    Escape Sleep 0.5s
    Screenshot rendered.png Sleep 0.5s

    Animated gif from render-markdown.nvim

  • Using Tab for auto-completion (source)

    # Accept auto-complete
    Tab Sleep 1s Enter Sleep 4s
  • Capture simplfied vhs commands in comments (source)

    # VHS documentation
    #
    # Output:
    #   Output <path>.gif               Create a GIF output at the given <path>
    #   Output <path>.mp4               Create an MP4 output at the given <path>
    #   Output <path>.webm              Create a WebM output at the given <path>
    #
    # Require:
    #   Require <string>                Ensure a program is on the $PATH to proceed
    #
    # Settings:
    #   Set FontSize <number>           Set the font size of the terminal
    #   Set FontFamily <string>         Set the font family of the terminal
    #   Set Height <number>             Set the height of the terminal
    #   Set Width <number>              Set the width of the terminal
    #   Set LetterSpacing <float>       Set the font letter spacing (tracking)
    #   Set LineHeight <float>          Set the font line height
    #   Set LoopOffset <float>%         Set the starting frame offset for the GIF loop
    #   Set Theme <json|string>         Set the theme of the terminal
    #   Set Padding <number>            Set the padding of the terminal
    #   Set Framerate <number>          Set the framerate of the recording
    #   Set PlaybackSpeed <float>       Set the playback speed of the recording
    #
    # Sleep:
    #   Sleep <time>                    Sleep for a set amount of <time> in seconds
    #
    # Type:
    #   Type[@<time>] "<characters>"    Type <characters> into the terminal with a
    #                                   <time> delay between each character
    #
    # Keys:
    #   Backspace[@<time>] [number]     Press the Backspace key
    #   Down[@<time>] [number]          Press the Down key
    #   Enter[@<time>] [number]         Press the Enter key
    #   Space[@<time>] [number]         Press the Space key
    #   Tab[@<time>] [number]           Press the Tab key
    #   Left[@<time>] [number]          Press the Left Arrow key
    #   Right[@<time>] [number]         Press the Right Arrow key
    #   Up[@<time>] [number]            Press the Up Arrow key
    #   Down[@<time>] [number]          Press the Down Arrow key
    #   Ctrl+<key>                      Press the Control key + <key> (e.g. Ctrl+C)
    #
    # Display:
    #   Hide                            Hide the subsequent commands from the output
    #   Show                            Show the subsequent commands in the output
    
    # https://github.com/charmbracelet/vhs
  • Using Set to customize animated gif rendering (source)

    Set Shell "bash"
    Set FontSize 16
    Set Padding 2
    Set Margin 2
    Set Width 1280
    Set Height 1024
    Set Framerate 60
    Set TypingSpeed 150ms
    Set PlaybackSpeed 0.5
    Set CursorBlink false

    Animated gif of rHttp

  • Defaulting PS1 with Hide and Show to clear shell prompt formatting before recording (source)

    Hide
    Type "export PS1=''" Enter
    Ctrl+L
    Type 'clear' Enter
    Show

    Animated gif of Reeltwo

  • Creating alias with Hide and Show to simulate release behavior (source)

    Hide
    Type 'alias doist="./run_doist_fixtures.sh"'
    Enter
    Type clear
    Enter
    Show
    
    Type "doist add 'do the laundry' -d tomorrow"
    Sleep 500ms
    Enter 1
    Sleep 2s

    Animated gif from doist

  • Using Shell "bash" and Type "# ..." for conversational comments (source)

    Editor's note: when I tried this using zsh, it said # was an unknown function which is why I'm making a note of setting the shell to bash

    Set Shell "bash"
    Set FontSize 16
    Set Width  960
    Set Height 600
    Set Padding 5
    
    Sleep 1s
    Type "# Welcome to rpn!" Enter
    Type "# A simple and useful CLI RPN calculator." Enter
    Type "# You can use rpn interactively (the default) or use rpn 'expr'" Enter
    Type "# To evaluate an expression directly." Enter

    Animated gift from rpn

  • Setting Height sufficiently large to show whole output (source)

    Set Shell "fish"
    Set FontSize 16
    Set Width 920
    Set Height 1000

    Animated gif from bootleg

  • View various vhs themes at dennym/vhs-theme-preview

@andyfeller
Copy link
Author

Apparently Type escaping works a little differently here

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment