{"id":18289972,"url":"https://github.com/utensils/envisaged","last_synced_at":"2025-04-04T22:05:15.763Z","repository":{"id":79101237,"uuid":"127937838","full_name":"utensils/Envisaged","owner":"utensils","description":"Envisaged - Effortless Gource Visualizations with Docker","archived":false,"fork":false,"pushed_at":"2025-02-01T07:59:26.000Z","size":67,"stargazers_count":151,"open_issues_count":7,"forks_count":22,"subscribers_count":13,"default_branch":"main","last_synced_at":"2025-03-28T21:06:58.579Z","etag":null,"topics":["docker","ffmpeg","gource","gource-visualization","opengl","video","visualization"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/utensils.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":"2018-04-03T16:36:34.000Z","updated_at":"2025-03-20T03:30:41.000Z","dependencies_parsed_at":"2024-12-26T19:07:21.663Z","dependency_job_id":null,"html_url":"https://github.com/utensils/Envisaged","commit_stats":{"total_commits":41,"total_committers":4,"mean_commits":10.25,"dds":"0.19512195121951215","last_synced_commit":"3d3c50f333504215e7f097896ebee7c0f06963c1"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utensils%2FEnvisaged","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utensils%2FEnvisaged/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utensils%2FEnvisaged/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utensils%2FEnvisaged/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/utensils","download_url":"https://codeload.github.com/utensils/Envisaged/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247256110,"owners_count":20909240,"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":["docker","ffmpeg","gource","gource-visualization","opengl","video","visualization"],"created_at":"2024-11-05T14:08:59.727Z","updated_at":"2025-04-04T22:05:15.748Z","avatar_url":"https://github.com/utensils.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Envisaged - Dockerized Gource Visualizations\n\n[![CircleCI](https://circleci.com/gh/utensils/Envisaged.svg?style=svg)](https://circleci.com/gh/utensils/Envisaged) [![Docker Automated build](https://img.shields.io/docker/automated/utensils/envisaged.svg)](https://hub.docker.com/r/utensils/envisaged/) [![Docker Pulls](https://img.shields.io/docker/pulls/utensils/envisaged.svg)](https://hub.docker.com/r/utensils/envisaged/) [![Docker Stars](https://img.shields.io/docker/stars/utensils/envisaged.svg)](https://hub.docker.com/r/utensils/envisaged/) [![](https://images.microbadger.com/badges/image/utensils/envisaged.svg)](https://microbadger.com/images/utensils/envisaged \"Get your own image badge on microbadger.com\") [![](https://images.microbadger.com/badges/version/utensils/envisaged.svg)](https://microbadger.com/images/utensils/envisaged \"Get your own version badge on microbadger.com\")\n\nBuilt on top of [`utensils/opengl:stable`][utensils/opengl] (Alpine 3.12). **No GPU is required**, this will run on any machine, such as a standard EC2 instance or any other VPS.  \n\n## About\n\nPainless data visualizations from git history showing a repositories development progression over time.  \nThis container combines the awesome [Gource][gource] program with the power of [FFmpeg][ffmpeg_home] and the h.264 codec to bring you high resolution (up to 4k at 60fps) video visualizations.\n\nThis container is 100% headless, it does this by leveraging [Xvfb][xvfb] combined with the [Mesa 3d Gallium llvmpipe Driver][mesa]. Unlike other docker containers with Gource, this container does not eat up 100's of gigabtyes of disk space, nor does it require an actual GPU to run. The process runs the Gource simulation concurrently with the FFmpeg encoding process using a set of named pipes. There is a slight trade off in performance, but this makes it very easy to run in any environment such as AWS without the need to provision large amounts of storage, or run any cleanup.  \n\nEnvisaged uses \"template\" scripts to generate specific looks, such as the one included in this container which is simply called **border** which places a frame around the Gource visualization and isolates the date and key on the outside of this border. If you would like to run the container with normal Gource output, simply pass `-e TEMPLATE=none` and it will use the `no_template.sh` script.\n\n\n\nThis container is configurable through environment variables listed below. The generated video is delivered via HTTP.\n\n## Example videos\n\n\n| GitHub Repo                    | YouTube Video                                                                                                                                                                                                                     |\n| ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [Elixir School][elixir-school] | \u003ca href=\"http://www.youtube.com/watch?feature=player_embedded\u0026v=twpR-opLrZU\" target=\"_blank\"\u003e\u003cimg src=\"http://img.youtube.com/vi/twpR-opLrZU/0.jpg\" alt=\"Elixir School Visualization\" width=\"240\" height=\"180\" border=\"10\" /\u003e\u003c/a\u003e |\n| [Kubernetes][kubernetes]       | \u003ca href=\"http://www.youtube.com/watch?feature=player_embedded\u0026v=UTwxiwF7Zac\" target=\"_blank\"\u003e\u003cimg src=\"http://img.youtube.com/vi/UTwxiwF7Zac/0.jpg\" alt=\"Kubernetes Visualization\" width=\"240\" height=\"180\" border=\"10\" /\u003e\u003c/a\u003e    |\n| [Elixir Lang][elixir]          | \u003ca href=\"http://www.youtube.com/watch?feature=player_embedded\u0026v=wl5uuvDK3ao\" target=\"_blank\"\u003e\u003cimg src=\"http://img.youtube.com/vi/wl5uuvDK3ao/0.jpg\" alt=\"Elixir Lang Visualization\" width=\"240\" height=\"180\" border=\"10\" /\u003e\u003c/a\u003e   |\n\n\n\n\n## Usage Examples\n\nRun with the default settings which will create a visualization of the Docker GitHub repository.  \nNotice we are **exposing port 80**, the final video will be served at \u003chttp://localhost:8080/\u003e  \n\nThe following example will run a visualization on the Kubernetes GitHub repository and include the Kubernetes logo\nin the video.\n\n```shell\ndocker run --rm -p 8080:80 --name envisaged \\\n       -e GIT_URL=https://github.com/kubernetes/kubernetes.git \\\n       -e LOGO_URL=https://raw.githubusercontent.com/kubernetes/kubernetes/master/logo/logo.png \\\n       -e GOURCE_TITLE=\"Kubernetes Development\" \\\n       utensils/envisaged\n```\n\nRunning a visualization against a local git repo.  \n\n```\ndocker run --rm -p 8080:80 --name envisaged \\\n       -v /path/to/your/repo:/visualization/git_repo:ro \\\n       -e GOURCE_TITLE=\"Your Project Development\" \\\n       utensils/envisaged\n```\n\nYou can also combine multiple repositories into a single rendering by mounting a directory of repository\ndirectories onto `/visualization/git_repos` (the plural of `visualization/git_repo`).\n\n```\ndocker run --rm -p 8080:80 --name envisaged \\\n       -v /path/to/your/repos:/visualization/git_repos:ro \\\n       -e GOURCE_TITLE=\"Your Project Development\" \\\n       utensils/envisaged\n```\n\nOptionally, you can have gource render avatars of the authors by mounting a volume with images of the authors.\n\n```\ndocker run --rm -p 8080:80 --name envisaged \\\n       -v /path/to/your/repo:/visualization/git_repo:ro \\\n       -v /path/to/your/avatars:/visualization/avatars:ro \\\n       -e GOURCE_TITLE=\"Your Project Development\" \\\n       utensils/envisaged\n```\n\nThe avatars in that directory must have filenames that match the author id, e.g. `utensils.gif`, etc.\n\nNow open your browser to \u003chttp://localhost:8080/\u003e and once the video is completed you will see the link with the video size.\n\n## Environment Variables\n\n| Variable                   | Default Value                    | Description                                                                                                 |\n| -------------------------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------- |\n| `GIT_URL`                  | `\u003cdocker repo on GH\u003e`            | URL of git repository to be cloned and analyzed for visualization.                                          |\n| `LOGO_URL`                 | `\u003cdocker logo\u003e`                  | URL of logo to be overlayed in lower right hand corner of video.                                            |\n| `H264_PRESET`              | `medium`                         | h.264 encoding preset. refer to [FFmpeg's wiki][ffmpeg].                                                    |\n| `H264_CRF`                 | `23`                             | The Constant Rate Factor (CRF) is the default quality for h.264 encoding. refer to [FFmpeg's wiki][ffmpeg]. |\n| `H264_LEVEL`               | `5.1`                            | h.264 encoding level. Refer to [FFmpeg's wiki][ffmpeg].                                                     |\n| `VIDEO_RESOLUTION`         | `1080p`                          | Output video resolution, options are **2160p, 1440p, 1080p, 720p**                                          |\n| `GOURCE_FPS`         | `60`                          | Output video frame rate                                          |\n| `TEMPLATE`                 | `border`                         | This is the template script that will be run. Options are **border**, and **none**.                         |\n| `GOURCE_TITLE`             | `Software Development`           | Title to be displayed in the lower left hand corner of video.                                               |\n| `OVERLAY_FONT_COLOR`       | `0f5ca8`                         | Font color to be used on the overlay (Date only).                                                           |\n| `GOURCE_CAMERA_MODE`       | `overview`                       | Camera mode (overview, track).                                                                              |\n| `GOURCE_SECONDS_PER_DAY`   | `0.1`                            | Speed of simulation in seconds per day.                                                                     |\n| `GOURCE_TIME_SCALE`        | `1.5`                            | Change simulation time scale.                                                                               |\n| `GOURCE_USER_SCALE`        | `1.5`                            | Change scale of user avatars.                                                                               |\n| `GOURCE_AUTO_SKIP_SECONDS` | `0.5`                            | Skip to next entry if nothing happens for a number of seconds.                                              |\n| `GOURCE_BACKGROUND_COLOR`  | `000000`                         | Background color in hex.                                                                                    |\n| `GOURCE_TEXT_COLOR`        | `FFFFFF`                         | **Not Implemented.**                                                                                        |\n| `GOURCE_HIDE_ITEMS`        | `usernames,mouse,date,filenames` | Hide one or more display elements                                                                           |\n| `GOURCE_FONT_SIZE`         | `48`                             | **Not Implemented.**                                                                                        |\n| `GOURCE_DIR_DEPTH`         | `3`                              | Draw names of directories down to a specific depth in the tree.                                             |\n| `GOURCE_FILENAME_TIME`     | `2`                              | Duration to keep filenames on screen (\u003e= 2.0).                                                              |\n| `GOURCE_MAX_USER_SPEED`    | `500`                            | Max speed users can travel per second.                                                                      |\n| `INVERT_COLORS`            | `false`                          | Inverts the colors on the visualization.                                                                    |\n\n[alpine linux image]: https://github.com/gliderlabs/docker-alpine\n\n[gource]: https://github.com/acaudwell/Gource\n\n[ffmpeg_home]: https://www.ffmpeg.org/\n\n[xvfb]: https://www.x.org/archive/X11R7.6/doc/man/man1/Xvfb.1.xhtml\n\n[mesa]: https://www.mesa3d.org/llvmpipe.html\n\n[ffmpeg]: https://trac.ffmpeg.org/wiki/Encode/H.264\n\n[utensils/opengl]: https://github.com/utensils/docker-opengl\n\n[elixir-school]: https://github.com/elixirschool/elixirschool\n\n[kubernetes]: https://github.com/kubernetes/kubernetes\n\n[elixir]: https://elixir-lang.org/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Futensils%2Fenvisaged","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Futensils%2Fenvisaged","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Futensils%2Fenvisaged/lists"}