{"id":13520300,"url":"https://github.com/sassman/t-rec-rs","last_synced_at":"2025-05-14T01:09:22.169Z","repository":{"id":36968968,"uuid":"302482658","full_name":"sassman/t-rec-rs","owner":"sassman","description":"Blazingly fast terminal recorder that generates animated gif images for the web written in rust","archived":false,"fork":false,"pushed_at":"2024-10-15T12:58:37.000Z","size":7355,"stargazers_count":985,"open_issues_count":24,"forks_count":32,"subscribers_count":7,"default_branch":"main","last_synced_at":"2024-10-29T15:13:05.986Z","etag":null,"topics":["chrome","command-line-tool","demo","fast","gif-creator","hacktoberfest","hacktoberfest2020","recorder","rust","screen-recorder","screen-recording","screenshot-generator","screenshot-utility","terminal-recording","vscode"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/t-rec","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sassman.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"sassman"}},"created_at":"2020-10-08T23:16:40.000Z","updated_at":"2024-10-29T01:43:42.000Z","dependencies_parsed_at":"2024-01-07T21:22:22.526Z","dependency_job_id":"d61a6a9a-4367-4c01-a195-5a7f61886a57","html_url":"https://github.com/sassman/t-rec-rs","commit_stats":{"total_commits":187,"total_committers":12,"mean_commits":"15.583333333333334","dds":0.2459893048128342,"last_synced_commit":"f93974cfc443aa8105c79b1b7185c7db853cd70c"},"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sassman%2Ft-rec-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sassman%2Ft-rec-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sassman%2Ft-rec-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sassman%2Ft-rec-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sassman","download_url":"https://codeload.github.com/sassman/t-rec-rs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248261928,"owners_count":21074225,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chrome","command-line-tool","demo","fast","gif-creator","hacktoberfest","hacktoberfest2020","recorder","rust","screen-recorder","screen-recording","screenshot-generator","screenshot-utility","terminal-recording","vscode"],"created_at":"2024-08-01T05:02:17.076Z","updated_at":"2025-04-10T17:17:43.378Z","avatar_url":"https://github.com/sassman.png","language":"Rust","funding_links":["https://github.com/sponsors/sassman"],"categories":["Rust","\u003ca name=\"stream-record\"\u003e\u003c/a\u003estream-record","chrome","\u003ca name=\"screen-recorder\"\u003e\u003c/a\u003eScreen recorder","Productivity \u0026 Recording"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n \u003cimg src=\"https://github.com/sassman/t-rec-rs/blob/main/resources/logo.png?raw=true\" width=\"250\" height=\"250\"\u003e\n \u003ch1\u003e\u003cstrong\u003et-rec: Terminal Recorder\u003c/strong\u003e\u003c/h1\u003e\n\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n[![crates.io](https://img.shields.io/crates/v/t-rec.svg)](https://crates.io/crates/t-rec)\n[![dependency status](https://deps.rs/repo/github/sassman/t-rec-rs/status.svg)](https://deps.rs/repo/github/sassman/t-rec-rs)\n[![Build Status](https://github.com/sassman/t-rec-rs/workflows/Build/badge.svg)](https://github.com/sassman/t-rec-rs/actions?query=branch%3Amain+workflow%3ABuild+)\n[![LOC](https://tokei.rs/b1/github/sassman/t-rec-rs?category=code)](https://github.com/Aaronepower/tokei)\n\nBlazingly fast terminal recorder that generates animated gif images for the web written in rust.\n\n\u003c/div\u003e\n\n\n# Demo\n\n![demo](./docs/demo.gif)\n\n## Features\n- Screenshotting your terminal with 4 frames per second (every 250ms)\n- Generates high quality small sized animated gif images or mp4 videos\n- **Build-In idle frames detection and optimization** (for super fluid presentations)\n- Applies (can be disabled) border decor effects like drop shadow\n- Runs on MacOS, Linux and NetBSD\n- Uses native efficient APIs\n- Runs without any cloud service and entirely offline\n- No issues with terminal sizes larger than 80x24\n- No issues with fonts or colors\n- No issues with curses based programs\n- No issues with escape sequences\n- No record and replay - just one simple command to rule them all\n- Can record every arbitrary window you want (e.g. browser, ide)\n- Written in Rust 🦀\n\n## Installation on MacOS\n### with homebrew\n```sh\nbrew install t-rec\n```\n\n### with macports\n```sh\nsudo port selfupdate\nsudo port install t-rec\n```\n\n### with cargo\n**NOTE** `t-rec` depends on `imagemagick`.\n```sh\nbrew install imagemagick\ncargo install -f t-rec \n```\n**NOTE** `-f` just makes sure the latest version is installed\n\n## Installation on Linux\n### as .deb\n\n```sh\nsudo apt-get install imagemagick\nwget https://github.com/sassman/t-rec-rs/releases/download/v0.5.0/t-rec_0.5.0_amd64.deb\nsudo dpkg -i t-rec_0.5.0_amd64.deb\n```\n\n### as snap\n\n[![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-black.svg)](https://snapcraft.io/t-rec)\n\n- installation [for Linux Mint](https://snapcraft.io/install/t-rec/mint)\n- installation [for Arch Linux](https://snapcraft.io/install/t-rec/arch)\n\n*TL;DR:*\n```sh\nsudo snap install t-rec --classic\n/snap/bin/t-rec --version\nt-rec 0.4.3\n```\n\n### from AUR\n\n`t-rec` can be installed from available [AUR packages](https://aur.archlinux.org/packages/?O=0\u0026SeB=nd\u0026K=Blazingly+fast+terminal+recorder\u0026outdated=\u0026SB=n\u0026SO=a\u0026PP=50\u0026do_Search=Go) using an [AUR helper](https://wiki.archlinux.org/index.php/AUR_helpers). For example,\n\n```\nparu -S t-rec\n```\n\nIf you prefer, you can clone the [AUR packages](https://aur.archlinux.org/packages/?O=0\u0026SeB=nd\u0026K=Blazingly+fast+terminal+recorder\u0026outdated=\u0026SB=n\u0026SO=a\u0026PP=50\u0026do_Search=Go) and then compile them with [makepkg](https://wiki.archlinux.org/index.php/Makepkg). For example,\n\n```\ngit clone https://aur.archlinux.org/t-rec.git\ncd t-rec\nmakepkg -si\n```\n\n### Installation on NetBSD\n```\npkgin install t-rec\n```\n\nOr, if you prefer to build from source,\n```\ncd /usr/pkgsrc/multimedia/t-rec\nmake install\n```\n\n### with cargo\n```sh\nsudo apt-get install libx11-dev imagemagick\ncargo install -f t-rec\n```\n\n| tested on those distros |\n|-------------------------|\n| ubuntu 20.10 on GNOME |\n| ![demo-ubuntu](./docs/demo-ubuntu.gif) |\n| ubuntu 20.10 on i3wm | \n| ![demo-ubuntu-i3wm](./docs/demo-ubuntu-i3wm.gif) |\n| linux mint 20 on cinnamon | \n| ![demo-mint](./docs/demo-mint.gif) |\n| ArcoLinux 5.4 on Xfwm4 | \n| ![demo-arco](./docs/demo-arco-xfwm4.gif) |\n\n## Usage\n```sh\nt-rec\n```\n\nor with specifying a different program to launch\n\n```sh\nt-rec /bin/sh\n```\n\n### Full Options\n\n```text\nt-rec 0.7.6\nSven Assmann \u003csven.assmann.it@gmail.com\u003e\nBlazingly fast terminal recorder that generates animated gif images for the web written in rust.\n\nUsage: t-rec [OPTIONS] [shell or program to launch]\n\nArguments:\n  [shell or program to launch]  If you want to start a different program than $SHELL you can\n                                pass it here. For example '/bin/sh'\n\nOptions:\n  -v, --verbose                   Enable verbose insights for the curious\n  -q, --quiet                     Quiet mode, suppresses the banner:\n                                  'Press Ctrl+D to end recording'\n  -m, --video                     Generates additionally to the gif a mp4 video of the recording\n  -M, --video-only                Generates only a mp4 video and not gif\n  -d, --decor \u003cdecor\u003e             Decorates the animation with certain, mostly border effects \n                                  [default: none] [possible values: shadow, none]\n  -b, --bg \u003cbg\u003e                   Background color when decors are used [default: transparent]\n                                  [possible values: white, black, transparent]\n  -n, --natural                   If you want a very natural typing experience and disable the idle\n                                  detection and sampling optimization\n  -l, --ls-win                    If you want to see a list of windows available for recording by\n                                  their id, you can set env var 'WINDOWID' or `--win-id` to record\n                                  this specific window only\n  -w, --win-id \u003cwin-id\u003e           Window Id (see --ls-win) that should be captured, instead of\n                                  the current terminal\n  -e, --end-pause \u003cs | ms | m\u003e    to specify the pause time at the end of the animation, that time\n                                  the gif will show the last frame\n  -s, --start-pause \u003cs | ms | m\u003e  to specify the pause time at the start of the animation, that time\n                                  the gif will show the first frame\n  -o, --output \u003cfile\u003e             to specify the output file (without extension) [default: t-rec]\n  -h, --help                      Print help\n  -V, --version                   Print version\n```\n\n### Disable idle detection \u0026 optimization\n\nIf you are not happy with the idle detection and optimization, you can disable it with the `-n` or `--natural` parameter.\nBy doing so, you would get the very natural timeline of typing and recording as you do it. \nIn this case there will be no optimizations performed.\n\n### Enable shadow border decor\n\nIn order to enable the drop shadow border decor you have to pass `-d shadow` as an argument. If you only want to change \nthe color of the background you can use `-b black` for example to have a black background.\n\n### Record Arbitrary windows\n\nYou can record not only the terminal but also every other window. There 3 ways to do so:\n\n1) use `-w | --win-id` argument to name the Window Id that should be recorded\n```sh\nt-rec --ls-win | grep -i calc\nCalculator | 45007\n\nt-rec -w 45007 \n```\n\n2) use the env var `TERM_PROGRAM` like this:\n- for example lets record a window 'Google Chrome'\n- make sure chrome is running and visible on screen\n```sh\nTERM_PROGRAM=\"google chrome\" t-rec\n\nFrame cache dir: \"/var/folders/m8/084p1v0x4770rpwpkrgl5b6h0000gn/T/trec-74728.rUxBx3ohGiQ2\"\nRecording window: \"Google Chrome 2\"\nPress Ctrl+D to end recording\n\n```\n\nthis is how it looks then:\n![demo-chrome](./docs/demo-chrome.gif)\n\n3) use the env var `WINDOWID` like this:\n- for example let's record a `VSCode` window\n- figure out the window id program, and make it \n- make sure the window is visible on screen\n- set the variable and run `t-rec`\n\n```sh\nt-rec --ls-win | grep -i code\nCode | 27600\n\n# set the WINDOWID variable and run t-rec\nWINDOWID=27600 t-rec\n\nFrame cache dir: \"/var/folders/m8/084p1v0x4770rpwpkrgl5b6h0000gn/T/trec-77862.BMYiHNRWqv9Y\"\nPress Ctrl+D to end recording\n\n```\n\nthis is how it looks then:\n![demo-vscode](./docs/demo-vscode.gif)\n\n## Contribute\n\nTo contribute to t-rec you can either checkout existing issues [labeled with `good first issue`][4] or [open a new issue][5] and describe your problem.\nAlso every PR is welcome. Support for Linux and Windows needs to be done.\n\n## On the web \u0026 social media\n\n- t-rec [on producthunt.com](https://www.producthunt.com/posts/t-rec)\n- t-rec [on hacker news](https://news.ycombinator.com/item?id=24742378)\n- t-rec [on reddit](https://www.reddit.com/r/rust/comments/j8tqs9/trec_a_blazingly_fast_terminal_recorder_that/)\n\n## License\n\n- **[GNU GPL v3 license](https://www.gnu.org/licenses/gpl-3.0)**\n- Copyright 2020 - 2021 © [Sven Assmann][2].\n\n[2]: https://www.d34dl0ck.me\n[4]: https://github.com/sassman/t-rec-rs/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22\n[5]: https://github.com/sassman/t-rec-rs/issues/new/choose\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsassman%2Ft-rec-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsassman%2Ft-rec-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsassman%2Ft-rec-rs/lists"}