{"id":13903192,"url":"https://github.com/volks73/germ","last_synced_at":"2025-05-05T19:52:53.348Z","repository":{"id":64991468,"uuid":"348549891","full_name":"volks73/germ","owner":"volks73","description":"An application to generate terminal session recordings without rehearsing or recording","archived":false,"fork":false,"pushed_at":"2024-12-31T15:53:24.000Z","size":142,"stargazers_count":7,"open_issues_count":8,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-02T21:02:27.285Z","etag":null,"topics":["ascii","asciicast","asciinema","command-line","command-line-app","command-line-tool","rust"],"latest_commit_sha":null,"homepage":"","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/volks73.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2021-03-17T02:00:50.000Z","updated_at":"2024-12-31T15:53:27.000Z","dependencies_parsed_at":"2024-07-27T14:15:06.909Z","dependency_job_id":"9b0acc80-6161-47f2-97e7-017dae64d556","html_url":"https://github.com/volks73/germ","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volks73%2Fgerm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volks73%2Fgerm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volks73%2Fgerm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volks73%2Fgerm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/volks73","download_url":"https://codeload.github.com/volks73/germ/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252566661,"owners_count":21769083,"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":["ascii","asciicast","asciinema","command-line","command-line-app","command-line-tool","rust"],"created_at":"2024-08-06T22:01:48.858Z","updated_at":"2025-05-05T19:52:53.319Z","avatar_url":"https://github.com/volks73.png","language":"Rust","funding_links":[],"categories":["rust"],"sub_categories":[],"readme":"# \u003cem\u003eG\u003c/em\u003eenerate t\u003cem\u003eERM\u003c/em\u003einal: An application to generate terminal session recordings without rehearsing or recording\n\nThis is a command line application for generating terminal session recording files, such as [asciinema]'s [asciicast files], from a payload of inputs and outputs instead of recording a terminal session. The name comes from the progression of \"generate terminal\" to \"genterm\" to \"gterm\" to \"germ\". This is heavily inspired by the [TermSheets] web application, which creates animated terminal presentations from a simple JSON schema. According to the TermSheets's creator:\n\n\u003e...Other solutions usually involve recording a live screen. I wanted a way to simply provide a payload of instructions so I didn't have to rehearse my typing and wait for network output...\n\nWhile asciinema and its ecosystem is great, it is one of these \"Other solutions\". Similiarly, I wanted to generate terminal animations without rehearsing, and really appreciated the payload-based implementation. However, I still wanted to create the recordings from within the terminal and be able to easily share asciicasts through the [asciinema.org] website. The TermSheets web application required generating JSON within the website and/or copying-n-pasting from a text editor. Additional inspiration is taken from the [Termynal] project, which was put to excellent use by the [Typer] team for their documentation, but the output for Termynal is not embeddable in GitHub README files.\n\nThis is all possible because of the excellent documentation, support, and openness of all of the mentioned projects. Thank you!\n\n[![Build Status](https://github.com/volks73/germ/workflows/CI/badge.svg)](https://github.com/volks73/germ/actions)\n\n[asciinema]: https://asciinema.org/\n[asciicast files]: https://github.com/asciinema/asciinema/blob/develop/doc/asciicast-v2.md\n[TermSheets]: https://neatsoftware.github.io/term-sheets/\n[asciinema.org]: https://asciinema.org\n[Termynal]: https://github.com/ines/termynal\n[Typer]: https://typer.tiangolo.com/\n\n## Quick Start\n\nStart a terminal and then execute the following commands:\n\n[![asciicast](https://asciinema.org/a/JvgdZbR7YSpA44y1PgPL9PB0w.svg)](https://asciinema.org/a/JvgdZbR7YSpA44y1PgPL9PB0w?autoplay=1\u0026loop=1)\n\n## Installation\n\n### Source\n\n``` sh\n~$ git clone https://github.com/volks73/germ.git\n~$ cd germ\n~/germ$ cargo install --path .\n```\n\n## Usage\n\n``` sh\n~$ germ \"echo 'Hello World'\" \"Hello World\"\n{\"version\":2,\"width\":80,\"height\":24,\"env\":{\"SHELL\":\"/bin/sh\",\"TERM\":\"xterm-256color\"}}\n[0.0,\"o\",\"$ \"]\n[0.75,\"o\",\"e\"]\n[0.785,\"o\",\"c\"]\n[0.82,\"o\",\"h\"]\n[0.855,\"o\",\"o\"]\n[0.89,\"o\",\" \"]\n[0.925,\"o\",\"'\"]\n[0.96,\"o\",\"H\"]\n[0.995,\"o\",\"e\"]\n[1.03,\"o\",\"l\"]\n[1.065,\"o\",\"l\"]\n[1.1,\"o\",\"o\"]\n[1.135,\"o\",\" \"]\n[1.17,\"o\",\"W\"]\n[1.205,\"o\",\"o\"]\n[1.24,\"o\",\"r\"]\n[1.275,\"o\",\"l\"]\n[1.31,\"o\",\"d\"]\n[1.345,\"o\",\"'\"]\n[2.23,\"o\",\"\\r\\n\"]\n[2.23,\"o\",\"Hello World\\r\\n\"]\n```\n\n``` sh\n~$ germ -G \"echo 'Hello World'\" \"Hello World\" | germ -G \"echo 'Hello World Again'\" \"Hello World Again\" | germ\n{\"version\":2,\"width\":80,\"height\":24,\"env\":{\"SHELL\":\"/bin/sh\",\"TERM\":\"xterm-256color\"}}\n[0.0,\"o\",\"$ \"]\n[0.75,\"o\",\"e\"]\n[0.785,\"o\",\"c\"]\n[0.82,\"o\",\"h\"]\n[0.855,\"o\",\"o\"]\n[0.89,\"o\",\" \"]\n[0.925,\"o\",\"'\"]\n[0.96,\"o\",\"H\"]\n[0.995,\"o\",\"e\"]\n[1.03,\"o\",\"l\"]\n[1.065,\"o\",\"l\"]\n[1.1,\"o\",\"o\"]\n[1.135,\"o\",\" \"]\n[1.17,\"o\",\"W\"]\n[1.205,\"o\",\"o\"]\n[1.24,\"o\",\"r\"]\n[1.275,\"o\",\"l\"]\n[1.31,\"o\",\"d\"]\n[1.345,\"o\",\"'\"]\n[2.23,\"o\",\"\\r\\n\"]\n[2.23,\"o\",\"Hello World\\r\\n\"]\n[2.23,\"o\",\"$ \"]\n[2.98,\"o\",\"e\"]\n[3.015,\"o\",\"c\"]\n[3.05,\"o\",\"h\"]\n[3.085,\"o\",\"o\"]\n[3.12,\"o\",\" \"]\n[3.1550000000000002,\"o\",\"'\"]\n[3.19,\"o\",\"H\"]\n[3.225,\"o\",\"e\"]\n[3.26,\"o\",\"l\"]\n[3.295,\"o\",\"l\"]\n[3.33,\"o\",\"o\"]\n[3.365,\"o\",\" \"]\n[3.4,\"o\",\"W\"]\n[3.435,\"o\",\"o\"]\n[3.4699999999999998,\"o\",\"r\"]\n[3.505,\"o\",\"l\"]\n[3.54,\"o\",\"d\"]\n[3.575,\"o\",\" \"]\n[3.61,\"o\",\"A\"]\n[3.645,\"o\",\"g\"]\n[3.6799999999999997,\"o\",\"a\"]\n[3.715,\"o\",\"i\"]\n[3.75,\"o\",\"n\"]\n[3.785,\"o\",\"'\"]\n[4.67,\"o\",\"\\r\\n\"]\n[4.67,\"o\",\"Hello World Again\\r\\n\"]\n```\n\n``` sh\n~$ germ -G \"echo 'Hello World'\" \"Hello World\"\n{\n    \"version\": 1,\n    \"commands\": [\n        {\n            \"input\": \"echo 'Hello World'\",\n            \"outputs\": [\"Hello World\"],\n        },\n    ]\n}\n~$ germ -G \"echo 'Hello World'\" \"Hello World\" \u003e commands.json\n~$ germ \u003c commands.json\n{\"version\":2,\"width\":80,\"height\":24,\"env\":{\"SHELL\":\"/bin/sh\",\"TERM\":\"xterm-256color\"}}\n[0.0,\"o\",\"$ \"]\n[0.75,\"o\",\"e\"]\n[0.785,\"o\",\"c\"]\n[0.82,\"o\",\"h\"]\n[0.855,\"o\",\"o\"]\n[0.89,\"o\",\" \"]\n[0.925,\"o\",\"'\"]\n[0.96,\"o\",\"H\"]\n[0.995,\"o\",\"e\"]\n[1.03,\"o\",\"l\"]\n[1.065,\"o\",\"l\"]\n[1.1,\"o\",\"o\"]\n[1.135,\"o\",\" \"]\n[1.17,\"o\",\"W\"]\n[1.205,\"o\",\"o\"]\n[1.24,\"o\",\"r\"]\n[1.275,\"o\",\"l\"]\n[1.31,\"o\",\"d\"]\n[1.345,\"o\",\"'\"]\n[2.23,\"o\",\"\\r\\n\"]\n[2.23,\"o\",\"Hello World\\r\\n\"]\n~$ cat commands.json | germ\n{\"version\":2,\"width\":80,\"height\":24,\"env\":{\"SHELL\":\"/bin/sh\",\"TERM\":\"xterm-256color\"}}\n[0.0,\"o\",\"$ \"]\n[0.75,\"o\",\"e\"]\n[0.785,\"o\",\"c\"]\n[0.82,\"o\",\"h\"]\n[0.855,\"o\",\"o\"]\n[0.89,\"o\",\" \"]\n[0.925,\"o\",\"'\"]\n[0.96,\"o\",\"H\"]\n[0.995,\"o\",\"e\"]\n[1.03,\"o\",\"l\"]\n[1.065,\"o\",\"l\"]\n[1.1,\"o\",\"o\"]\n[1.135,\"o\",\" \"]\n[1.17,\"o\",\"W\"]\n[1.205,\"o\",\"o\"]\n[1.24,\"o\",\"r\"]\n[1.275,\"o\",\"l\"]\n[1.31,\"o\",\"d\"]\n[1.345,\"o\",\"'\"]\n[2.23,\"o\",\"\\r\\n\"]\n[2.23,\"o\",\"Hello World\\r\\n\"]\n~$ germ -i commands.json\n{\"version\":2,\"width\":80,\"height\":24,\"env\":{\"SHELL\":\"/bin/sh\",\"TERM\":\"xterm-256color\"}}\n[0.0,\"o\",\"$ \"]\n[0.75,\"o\",\"e\"]\n[0.785,\"o\",\"c\"]\n[0.82,\"o\",\"h\"]\n[0.855,\"o\",\"o\"]\n[0.89,\"o\",\" \"]\n[0.925,\"o\",\"'\"]\n[0.96,\"o\",\"H\"]\n[0.995,\"o\",\"e\"]\n[1.03,\"o\",\"l\"]\n[1.065,\"o\",\"l\"]\n[1.1,\"o\",\"o\"]\n[1.135,\"o\",\" \"]\n[1.17,\"o\",\"W\"]\n[1.205,\"o\",\"o\"]\n[1.24,\"o\",\"r\"]\n[1.275,\"o\",\"l\"]\n[1.31,\"o\",\"d\"]\n[1.345,\"o\",\"'\"]\n[2.23,\"o\",\"\\r\\n\"]\n[2.23,\"o\",\"Hello World\\r\\n\"]\n```\n\n``` sh\ngerm -p \"`printf '\\u001b[32m$\\u001b[39m '`\" \"echo 'Hello World'\" \"Hello World\"\n{\"version\":2,\"width\":80,\"height\":24,\"env\":{\"SHELL\":\"/bin/sh\",\"TERM\":\"xterm-256color\"}}\n[0.0,\"o\",\"\\u001b[32m$ \\u001b[39m\"]\n[0.75,\"o\",\"e\"]\n[0.785,\"o\",\"c\"]\n[0.82,\"o\",\"h\"]\n[0.855,\"o\",\"o\"]\n[0.89,\"o\",\" \"]\n[0.925,\"o\",\"'\"]\n[0.96,\"o\",\"H\"]\n[0.995,\"o\",\"e\"]\n[1.03,\"o\",\"l\"]\n[1.065,\"o\",\"l\"]\n[1.1,\"o\",\"o\"]\n[1.135,\"o\",\" \"]\n[1.17,\"o\",\"W\"]\n[1.205,\"o\",\"o\"]\n[1.24,\"o\",\"r\"]\n[1.275,\"o\",\"l\"]\n[1.31,\"o\",\"d\"]\n[1.345,\"o\",\"'\"]\n[2.23,\"o\",\"\\r\\n\"]\n[2.23,\"o\",\"Hello World\\r\\n\"]\n[4.23,\"o\",\"\"]\n```\n\n``` sh\n~$ germ\nCopyright (C) 2021  Christopher R. Field\nThis program comes with ABSOLUTELY NO WARRANTY; for details use the `--warranty`\nflag. This is free software, and you are welcome to redistirbute it under\ncertain conditions; use the `--license` flag for details.\n\nYou have entered interactive mode. The prompt has similar arguments, options,\nflags, and functionality to the command line interface. Use the --help flag to\nprint the help text.\n\nType CTRL+D (^D) to exit and generate output or CTRL+C (^C) to abort.\n\n\u003e\u003e\u003e \"echo Hello World\"\nWorld Hello\n\u003e\u003e\u003e \"echo Hello World Again\"\nHello World Again\n\u003e\u003e\u003e --print\n{\"version\":2,\"width\":80,\"height\":24,\"env\":{\"SHELL\":\"/bin/sh\",\"TERM\":\"xterm-256color\"}}\n[0.0,\"o\",\"$ \"]\n[0.75,\"o\",\"e\"]\n[0.785,\"o\",\"c\"]\n[0.82,\"o\",\"h\"]\n[0.855,\"o\",\"o\"]\n[0.89,\"o\",\" \"]\n[0.925,\"o\",\"\\\"\"]\n[0.96,\"o\",\"H\"]\n[0.995,\"o\",\"e\"]\n[1.03,\"o\",\"l\"]\n[1.065,\"o\",\"l\"]\n[1.1,\"o\",\"o\"]\n[1.135,\"o\",\" \"]\n[1.17,\"o\",\"W\"]\n[1.205,\"o\",\"o\"]\n[1.24,\"o\",\"r\"]\n[1.275,\"o\",\"l\"]\n[1.31,\"o\",\"d\"]\n[1.345,\"o\",\"\\\"\"]\n[2.23,\"o\",\"\\r\\n\"]\n[2.23,\"o\",\"Hello World\\r\\n\"]\n[2.23,\"o\",\"$ \"]\n[2.98,\"o\",\"e\"]\n[3.015,\"o\",\"c\"]\n[3.05,\"o\",\"h\"]\n[3.085,\"o\",\"o\"]\n[3.12,\"o\",\" \"]\n[3.155,\"o\",\"\\\"\"]\n[3.19,\"o\",\"H\"]\n[3.225,\"o\",\"e\"]\n[3.26,\"o\",\"l\"]\n[3.295,\"o\",\"l\"]\n[3.33,\"o\",\"o\"]\n[3.365,\"o\",\" \"]\n[3.4,\"o\",\"W\"]\n[3.435,\"o\",\"o\"]\n[3.469,\"o\",\"r\"]\n[3.505,\"o\",\"l\"]\n[3.54,\"o\",\"d\"]\n[3.575,\"o\",\"\\\"\"]\n[3.61,\"o\",\"\\n\"]\n[3.645,\"o\",\"e\"]\n[3.679,\"o\",\"c\"]\n[3.715,\"o\",\"h\"]\n[3.75,\"o\",\"o\"]\n[3.785,\"o\",\" \"]\n[3.82,\"o\",\"\\\"\"]\n[3.855,\"o\",\"H\"]\n[3.889,\"o\",\"e\"]\n[3.925,\"o\",\"l\"]\n[3.96,\"o\",\"l\"]\n[3.995,\"o\",\"o\"]\n[4.03,\"o\",\" \"]\n[4.064,\"o\",\"W\"]\n[4.1,\"o\",\"o\"]\n[4.135,\"o\",\"r\"]\n[4.17,\"o\",\"l\"]\n[4.205,\"o\",\"d\"]\n[4.24,\"o\",\" \"]\n[4.275,\"o\",\"A\"]\n[4.31,\"o\",\"g\"]\n[4.345,\"o\",\"a\"]\n[4.38,\"o\",\"i\"]\n[4.415,\"o\",\"n\"]\n[4.45,\"o\",\"\\\"\"]\n[5.335,\"o\",\"\\r\\n\"]\n[5.335,\"o\",\"Hello World Again\\r\\n\"]\n[7.335,\"o\",\"\"]\n```\n\n## License\n\nThe `germ` project is licensed under either the [GPL-3.0]. See the [LICENSE] file for more information about licensing and copyright.\n\n[GPL-3.0]: https://opensource.org/licenses/GPL-3.0\n[LICENSE]: https://github.com/volks73/germ/blob/main/LICENSE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvolks73%2Fgerm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvolks73%2Fgerm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvolks73%2Fgerm/lists"}