Skip to content

EliahKagan/VidDraw

Repository files navigation

VidDraw - record video as you draw

Vid­Draw is a Windows program that records a video of a canvas as you draw on it. Recording starts when you begin drawing and stops when you’re no longer holding down any mouse buttons.

The main goal of Vid­Draw is to demonstrate using Sharp­Avi (which wraps VfW) to record a canvas, toast notifications, and embedded browsing. It began as a prototype for the video-recording feature of a larger program I’ve been working on. It’s also kind of a fun toy.

This is Vid­Draw alpha 5. It still has some usability bugs.

License

Vid­Draw is free software. Its own code is licensed under 0BSD (“Zero-Clause BSD License,” also known as the Free Public License 1.0.0), which is a “public domain equivalent” license. Vid­Draw’s dependencies are also free, but they are offered under other licenses. See Dependencies below for details.

Since some of Vid­Draw’s dependencies are included directly in this repository, some of the files in this repository have other authors and are licensed under terms other than 0BSD. See LICENSE and Notices.

Setup

This alpha version of Vid­Draw doesn’t have binary downloads, so it must be built from source. You’ll need the .NET 6 SDK (or higher). To clone the repository and build Vid­Draw, run:

git clone https://github.com/EliahKagan/VidDraw.git
cd VidDraw
dotnet build

Then, to run the program:

dotnet run

Those commands build and run a “debug” build. If you want a “release” build instead, use dotnet build -c Release and dotnet run -c Release.

Dependencies not included in this repository will be downloaded automatically. Running dotnet run without first running dotnet build also works, though if you do that the first time, it may appear to have frozen for a short while as dependencies are downloaded. (In contrast, dotnet build is more verbose.)

If you prefer to open the solution file VidDraw.sln in Visual Studio 2019 and build Vid­Draw from there, that is also supported.

That’s all you need. If you want to read about codec stuff… read on! Otherwise, you may want to skip to Usage Tips or The Menu, or just try out the program.

Optional: Get x264vfw for H.264 support

If you want Vid­Draw to be able to encode H.264 video, you’ll need x264vfw. You don’t have to install that before Vid­Draw, though. You can even install it while Vid­Draw is already running, and H.264 will be ungrayed in Vid­Draw’s menu.

In the x264vfw configuration, you should check the box for “Zero Latency” to avoid picture freezes while encoding video in real time. Note that the 32-bit and 64-bit x264vfw codecs are configured separately; changing the configuration for one doesn’t affect the other.

x264fw’s installer creates “Configure x264vfw” and “Configure x264vfw64” shortcuts (or just one, if you told it to install the codec for just one architecture or you’re on a 32-bit system). Besides those shortcuts, another way to open the x264vfw configuration dialog is from the menu in Vid­Draw: so long as x264vfw is installed for the same architecture as the running Vid­Draw process, a “Configure x264vfw (x86)” or “Configure x264vfw (x64)” menu item will appear.

A problem with H.264 in VidDraw

Encoding with H.264 produces much smaller files than Motion JPEG, which is Vid­Draw’s default and itself much smaller than encodings without any compression. But I’ve found that these H.264-encoded files—files recorded in real time in the way Vid­Draw records them, not H.264 video in general—are not playable on all players. This may be due to a bug in Vid­Draw, but I’m not sure. The excellent and very popular VLC does not play them. Windows Media Player and the Movies & TV app (and also MPC-HC) do play them.

Other than just using Motion JPEG instead (or waiting until Vid­Draw is out of alpha?), there are a couple workarounds to produce a video that VLC will play:

Configure x264vfw to make every frame a keyframe

At the cost of considerably larger files (but still not as big as Motion JPEG), making every frame a keyframe fixes the problem in VLC. To do that, open the x264vfw configuration dialog and—in the textarea labeled “Extra command line (for advanced users)”—put:

--keyint 1

See x264vfw Compression - WTF am I doing wrong? on the Guru3D.com forums.

Post-process the video with FFmpeg

Given a video from Vid­Draw that VLC cannot open, FFmpeg will repair it:

ffmpeg -err_detect ignore_err -i "VidDraw capture 2021-05-08 16-38-04.avi" -c copy "VidDraw capture 2021-05-08 16-38-04 fixed.avi"

You would run that from the Videos folder (where Vid­Draw saved the file). Change VidDraw capture 2021-05-08 16-38-04.avi to the actual name of the file Vid­Draw created. The second filename names FFmpeg’s output file; put whatever you like for that.

See Gyan’s answer to Fix bad files and streams with ffmpeg so VLC and other players would not crash on Video Production Stack Exchange.

Optional: Regenerate the Documentation

If you’re just building and using Vid­Draw, and not modifying it—or modifying it but not modifying its documentation—you can skip this section.

Vid­Draw comes with doc\index.html. Building Vid­Draw as described above places a copy of that file (and some others) in the build output directory, which the program’s built-in help viewer displays. doc\index.html is itself generated from README.md, and building Vid­Draw does not regenerate it. If you’re hacking on Vid­Draw and you make changes to README.md or to files in the pandoc directory, then you should regenerate it by running the generate.cmd script in the pandoc directory:

pandoc\generate.cmd

(That assumes you are in the repository’s top-level directory.)

If you’re on a Unix-like operating system or otherwise using a Unix-style shell, such as Bash, use the generate shell script instead:

pandoc/generate

Note that while building Vid­Draw’ and generating its documentation are supported on Windows, GNU/Linux, and macOS, running Vid­Draw’ is only supported on Windows systems.

On 64-bit Windows systems, if you don’t have Pandoc, one way to install it is with Scoop:

scoop install pandoc

Modifications to files other than README.md and those in the pandoc directory do not require doc\index.html to be regenerated.

Usage Tips

Vid­Draw’s interface is meant to be clean and simple, but in some ways it is confusing. It may be improved in the future. For now, maybe some of the following information will help.

Drawing and Recording

Draw as you would in any raster graphics editor.

When the mouse cursor is over the canvas and you press the primary mouse button, recording begins. Moving the mouse while the primary mouse button is pressed draws on the canvas. Recording continues until you release the button.

Even pressing the primary mouse button for a very short time records a video. A single short click is sufficient, though the video may consist of only one frame.

You will know Vid­Draw is recording because the border around the canvas turns bright red. As long as it is red, Vid­Draw is recording. When it turns back to light gray, recording has stopped and the video file is fully saved.

Screenshot of a corner of the VidDraw window while recording, showing the red border

To lift the pen while continuing to record, press and hold another mouse button. So long as at least one button is pressed, recording continues. This lets you make a video of drawing a sketch with multiple disconnected strokes.

If you ever want to continue recording while no mouse buttons are pressed, place the mouse cursor on the canvas, press and hold any mouse button, drag the cursor out of the canvas, press any other mouse button, then release both buttons (in either order). This effect, of keeping recording on even though you’re not holding down any mouse button, persists until your next interaction with the canvas. So, to stop recording, click the canvas. (If you don’t want to draw anything, click it with some button other than the primary mouse button.) Or you can resume drawing, and the next time you release all mouse buttons, recording will stop.

When recording has stopped and the border has turned back from red to gray, the file is fully saved and should be playable, whether Vid­Draw is still running or not. Conversely, it is fine to quit while still recording. Vid­Draw stops recording and cleanly saves the file on exit.

The pen color can be changed using the color picker, available in the menu.

The canvas in Vid­Draw is always 800×600.

Save Location and Toast Notifications

Vid­Draw saves files in your Videos folder. The location of this folder is configurable per-user in Windows, but by default it is the folder called Videos and located directly in your home folder.

When a recording ends (while Vid­Draw is still running), Vid­Draw raises a toast notification informing you of the filename as well as the encoding that was used for the video. Clicking this notification opens a file browser (i.e., Explorer) window for the destination folder, with the newly finished video selected.

Vid­Draw names files by the date and time at which it started recording them. The filenames consist of VidDraw capture followed by the date and time, like VidDraw capture 2021-05-09 21-49-12. (The ugly hyphen-delimited time is because Windows filesystems like NTFS don’t support colon characters in filenames.) This file exists immediately once recording has started, though it may not be playable—and is not guaranteed to be openable by other applications—until recording is completed.

Since clicking the notification opens the destination folder and selects the file, you can rename it easily to whatever name you actually want it to have.

Quitting Vid­Draw clears any notifications that have not been clicked or dismissed. Unless you were running multiple instances of Vid­Draw—in that case, they all stick around until the last instance is closed. Unless some instances are running in 64-bit mode while others are running in 32-bit mode—in that case, quitting the last 64-bit instance clears any remaining notifications from 64-bit instances, while quitting the last 32-bit instance clears any remaining notifications from 32-bit instances.

Vid­Draw is only able to raise toast notifications on Windows 10, version 10.0.17763 or later. If Vid­Draw can’t raise toast notifications on your system, it falls back to opening the Explorer window immediately when recording finishes. But if Vid­Draw can’t show you a notification because you’ve configured notifications in Windows 10 not to show them (or turned them off), then Vid­Draw does not try to circumvent this by showing a file browser window. In that case, nothing special happens when recording finishes.

You can always open the destination folder by clicking “Open Videos Folder” in Vid­Draw’s menu.

The Menu

Vid­Draw augments its system menu—the application menu that you can open by left- or right-clicking on the left side of the title bar, right-clicking anywhere on the title bar, or pressing Alt+Space, and that contains standard items like “Move” and “Close”—with encoding choices and some other operations specific to Vid­Draw.

Screenshot of augmented system menu in VidDraw

Some menu items change settings. These changes are saved in a VidDraw subdirectory of your per-user application data (%APPDATA%) directory, which is usually %USERPROFILE%\AppData\Roaming (where %USERPROFILE% is your home directory).

Encoding (“Codec”) Choices

There are currently four video encodings available. The selected encoding has a check mark to the left of it in the menu. Exactly one is selected at any given time.

Please note that this doesn’t affect the file format, i.e., container filetype, which is always AVI. Rather, it affects the encoding of the video stream.

Your codec choice is remembered across runs of the program.

Raw (frame copy)

This is the worst possible encoding and I don’t recommend using it. Each bitmap is captured from the canvas as-is, including the alpha channel data (the “A” in “ARGB”). The canvas, and the recorded video stream, use different conventions for the order in which each line (row of pixels) is stored, so this order is reversed; otherwise, it is a raw “frame copy.”

The only reason I put this in Vid­Draw was to demonstrate how to write video frames in Sharp­Avi without an encoder. But you should use an encoder. If you want uncompressed video, I recommend using Uncompressed instead, which leaves out the unused alpha channel.

Uncompressed

If you want uncompressed video (where each frame is a bitmap), you should use this. It uses Sharp­Avi’s UncompressedVideoEncoder. As the Sharp­Avi docs say:

The simplest [encoder] is the UncompressedVideoEncoder. It does no real encoding, just flips image vertically and converts BGR32 data to BGR24 data to reduce the size.

Video files created this way are quite large, if you’re recording for more a few seconds. If you’re keeping videos you create this way, you may want to encode them with a compressed codec afterwards. If your hard disk is slow, you may experience lag while encoding this way. It’s still better than Raw (frame copy), though.

Motion JPEG

Motion JPEG is Vid­Draw’s default encoding. Each frame is converted to and stored as a JPEG image. This uses Sharp­Avi’s MotionJpegVideoEncoderWpf. From the Sharp­Avi docs:

Next is the MJpegWpfVideoEncoder which does Motion JPEG encoding. It uses System.Windows.Media.Imaging.JpegBitmapEncoder under the hood. Hence it’s only available in Windows targets. Besides dimensions, you provide a desired quality level to its constructor, ranging from 1 (low quality, small size) to 100 (high quality, large size).

Vid­Draw uses a quality of 100, since the pen in Vid­Draw makes 1-pixel-thick curves, and lower qualities of Motion JPEG (like the oft-used 70) tend not to render such curves crisply.

The file size is unhappily large, but nowhere near as bad as the uncompressed encodings.

H.264 (MPEG-4 AVC)

If the x264vfw codec (of the same architecture as the Vid­Draw process) is installed, the menu item for H.264 is unfaded. It isn’t the default because Vid­Draw doesn’t ship that codec and you may not already have it, and because there are configuration choices for you to make and playback issues to wrangle with.

Still, I recommend encoding in H.264 if you can, because it produces higher quality than Motion JPEG at a small fraction of the file size (even if you use --keyint 1).

The Sharp­Avi docs say:

Finally, the Mpeg4VcmVideoEncoder does MPEG-4 encoding using a Video for Windows (aka VfW) or Video Compression Manager (aka VCM) compatible codec installed on the system. Apparently, this encoder works on Windows only (but is available for any target).

Currently tested codecs include Microsoft MPEG-4 V2 and V3, Xvid, DivX and x264vfw. Unfortunately, some of them have only 32-bit versions, others produce errors in 64 bits. The only codec which looks to work reliably in 64 bits is x264vfw64.

Tip. For x264vfw (both 32- and 64-bit), it is recommended to check the option Zero Latency in its configuration utility to prevent picture freezes. This configuration utility is installed along with the codec.

Other Stuff in the Menu

Clear Canvas

If the canvas has not been drawn on since opening Sharp­Avi, or since the last time it was cleared, then the “Clear Canvas” option is unfaded. This clears the canvas, making all pixels white, as they started.

Pick Color…

The pen color is black by default. “Pick Color…” opens a color picker in which you can choose another color. The color picker is based on ColorDialog, which wraps the standard Windows color dialog box and, as such, allows you to define custom color presets. Vid­Draw saves your custom colors, so they are available if you quit Vid­Draw and run it again. Your custom Vid­Draw colors do not appear in any other programs’ color dialogs.

(Unfortunately, defining custom colors but cancelling out of the color picker discards the new custom colors—you have to click “OK.” Since this is what users familiar with the Windows color dialog expect, I don’t think I should try to change it for Vid­Draw’s color picker.)

Open Videos Folder

Clicking “Open Videos Folder” opens the destination folder where Vid­Draw saves videos. This is your per-user Videos (or My Videos) directory.

This is handy if you meant to click to activate a toast notification after recording, but dismissed it instead.

In the strange case that you record a video and, while Vid­Draw is still running, change the location of your per-user Videos folder, this goes to the new place, not the old one. (The new location is the destination for any further videos Vid­Draw saves, even during the same run of the program.)

Download x264vfw
or Configure x264vfw (x64)
or Configure x264vfw (x86)

If x264vfw is not installed, or it is installed but not for the same architecture as the Vid­Draw process, then Vid­Draw cannot use it. In this case, the menu contains a “Download x264vfw” item that opens the x264vfw download page in your web browser.

If x264vfw is installed for the architecture of the Vid­Draw process, then Vid­Draw can use it, and the menu contains either a “Configure x264vfw (x64)” or “Configure x264vfw (x86)” item, depending on the architecture of the Vid­Draw process (i.e., whether it’s running as a 64-bit process or a 32-bit process, respectively).

Clicking “Configure x264vfw” opens x264vfw’s own configuration dialog. This dialog is not part of Vid­Draw, and configuration changes you make in it affect x264vfw on your whole system; they are not specific to Vid­Draw. But they are specific to the 64-bit (x64) or 32-bit (x86) version of x264vfw. By default, all remotely recent versions of x264vfw install both the 64-bit and 32-bit codecs. They must be configured separately.

About VidDraw…

Clicking “About Vid­Draw…” displays this README in Vid­Draw’s built-in help browser.

This help browser’s own system menu contains items for opening the README externally in your default web browser, for visiting the repository on GitHub, and for navigation (equivalent to the page’s own left sidenav).

Known Bugs

Sometimes there is an initial lag on the first recording.

This seems to happen mainly while debugging—even a debug build that is being run (via dotnet run or by directly running the compiled executable) is most often free of it. But it seems to happen occasionally even outside of debugging.

This is annoying because, when it happens, it usually results in a straight line segment appearing on the canvas (and in the video) that the user didn’t intend to draw.

Vid­Draw could do some operations asynchronously that it now does on the UI thread. Most or all file I/O could, and should, be asynchronous. Implementing this will require thought about what to do in some race conditions that cannot currently happen.

I don’t know if that would be sufficient to fix this bug.

Video files are not always playable on all players.

As detailed above, when H.264 encoding is selected and x264vfw has not been configured to make every frame a keyframe (which increases file size dramatically, albeit still less than the other encodings), VLC cannot play the file. This is even though VLC fully supports H.264 (and manages to play even most broken H.264 videos). It may be a problem with the way I’ve configured x264vfw. But FFmpeg is able to repair the files, and it reports problems with them, so I think this is a bug.

I can produce this problem (on the same system) with the Sharp­Avi sample application—both the upstream version targeting the upstream Sharp­Avi and my forked version targeting the fork of Sharp­Avi that Vid­Draw uses. But it remains unclear to me, due to its sensitivity to x264vfw settings, whether it is due to a bug in Sharp­Avi. I can also produce it in the Sharp­Avi sample application with Xvid (but, likewise, this might turn out to be because of how I have Xvid configured).

The help’s sidenav can be unexpectedly in “mid-fade.”

Narrowing the viewport fades the navigational sidebar out; widening fades it in. Whether or not it is faded, and how faded, is determined solely by (scaled) viewport width. This works okay when the user resizes the window. But it is possible for the viewport to start with a “transitional” width at which the sidebar is present but faded. In that case, the user is likely to think either that the sidebar is meant to look this way (i.e., poorly designed) or that a bug causes it to appear this way (either always, or under limited but unclear circumstances).

This isn’t all that likely to happen in Vid­Draw’s own help viewer. But general-purpose web browsers don’t start out with a predetermined (scaled) size selected to make this specific page look reasonable. The help file—and its sidenav—is meant to be fully usable on web browsers, too.

Menu items are cumbersome to access while drawing.

Some operations that users are likely to want to do while recording—especially opening the dialog box to change the pen color—should have keyboard shortcuts but do not. Some design choices have to be made to implement this correctly: if the user presses a key combination that opens a modal dialog box, should recording automatically continue after the dialog box exits?

It might be useful to be able to pause.

Vid­Draw’s user experience is intended to be simple and spontaneous, so I haven’t included any option to pause and unpause recording. If recording ever pauses, then users are likely to assume, and some may prefer, that opening a modal dialog box or changing focus to another application will pause it. So, if pausing is added, options to enable (and disable) automatic pausing in those situations should be added too.

Fixing this may help with Menu items are cumbersome to access while drawing as well.

The pen thickness should be adjustable in some way.

Being able to vary the pen’s size would make drawing more fun.

This could be done by holding down modifier keys (Shift, Ctrl, Alt) and/or by selecting something in the menu.

User experience on older Windows could be better.

Awkward toast fallback

Although it is not a goal for Vid­Draw to fully support any versions of Windows older than 10.0.17763, it might be good to come up with some other behavior than immediately opening the destination folder each time on systems that don’t support toast notifications.

Thin title bars

Old Windows operating systems, such as Windows 7, have very thin title bars, at least when styling is turned off or classic styling is used. This makes the border around the canvas (which turns red to indicate recording) look excessively thick. It’s probably not worth it to detect and handle this situation, but perhaps there’s some simple way.

Dependencies

Vid­Draw uses the following libraries and fonts. Thanks go to the authors and contributors to all these projects—and especially to Vasili Maslov for writing Sharp­Avi. Some of these dependencies are included in this repository while others are retrieved by NuGet.

This list is in alphabetical order. Entries for libraries included in this repository contain “[included]” links to their subdirectories. Links to each dependency’s detailed licensing information are given on the second line.

Vid­Draw is a C# program targeting .NET 6 on Windows. It uses Windows Forms, and it makes calls to the Windows API via libraries such as Sharp­Avi and Windows Forms as well as directly. Components that I believe are considered part of the framework (.NET) or operating system (Windows) are not listed above.

Indirect dependencies (dependencies of the above-listed dependencies that are either included in them or otherwise resolved through them) are also not listed.

VidDraw and x264vfw

Vid­Draw does not depend on x264vfw but is capable of using it if it is installed. x264vfw is a VfW codec for H.264 by Anton Mitrofanov and other authors, derived from x264. Since, when installed and selected in Vid­Draw, it greatly reduces file size while preserving quality, I’m thankful to all the developers of x264vfw and x264 for the work they’ve done. Per its COPYING file and license headers in most of its source code files, x264vfw is licensed under the GNU GPL v2 or later.

Vid­Draw uses x264vfw via Sharp­Avi in a manner analogous to how any VfW codec may be used, doesn’t itself include the codec, and interacts with it at arm’s length (VfW codecs are shared libraries, but as I understand it, programs that use them don’t link to them or directly call API functions that they define). So I believe the GPL does not require that Vid­Draw or any of the libraries Vid­Draw uses be offered under the GPL or have a GPL-compatible license.

Please note that, for practical and ideological reasons unrelated to x264vfw, I still intend Vid­Draw to be GPL-compatible! If it is not, or even if it appears not to be, I’d consider that a serious bug.

Notices

Vid­Draw’s own code, but not that of its dependencies, is licensed under 0BSD. Thus, everything in this repository except the contents of doc/bower_components and of the subdirectories of doc/fonts is offered under 0BSD:

View 0BSD    “Copyright (c) 2021-2023 Eliah Kagan …”

Copyright (c) 2021-2023 Eliah Kagan

Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

Licenses and accompanying information for each of Vid­Draw’s above-listed dependencies are reproduced below in full (but only some, not all, dependencies are themselves included in this repository).

Some licenses contain copyright statements, which differ across projects that may otherwise be licensed the same way. I’ve preserved each license in full.

AnchorJS

Bryan Braun has released AnchorJS under the MIT license:

View MIT license    “Copyright (c) 2021 Bryan Braun …”

MIT License

Copyright (c) 2021 Bryan Braun

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Fork me on GitHub CSS Ribbon

Simon Whitaker has released Fork me on GitHub CSS Ribbon under the MIT license:

View MIT license    “Copyright (c) 2013 Simon Whitaker …”

The MIT License (MIT)

Copyright (c) 2013 Simon Whitaker

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Json.NET

James Newton-King has released Json.NET under the MIT license:

View MIT license    “Copyright (c) 2007 James Newton-King …”

The MIT License (MIT)

Copyright (c) 2007 James Newton-King

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

kbd

Auth0 Inc. has released kbd under the MIT license:

View MIT license    “Copyright (c) 2014 Auth0 Inc. …”

The MIT License (MIT)

Copyright (c) 2014 Auth0 Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Milligram

CJ Patoilo has released Milligram under the MIT license:

View MIT license    “Copyright (c) CJ Patoilo <cjpatoilo@gmail.com> …”

The MIT License (MIT)

Copyright (c) CJ Patoilo <cjpatoilo@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

normalize.css

Nicolas Gallagher and Jonathan Neal have released normalize.css under the MIT license:

View MIT license    “Copyright © Nicolas Gallagher and Jonathan Neal …”

The MIT License (MIT)

Copyright © Nicolas Gallagher and Jonathan Neal

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Open Sans
Open Sans Condensed

Google Corporation has released Open Sans and Open Sans Condensed, fonts designed by Steve Matteson of Ascender Corporation and © 2011 Google Corporation, under the Apache License, Version 2.0.

Please note that the .woff files in this repository are not the same files as downloaded from Google Fonts, which provided the fonts as .ttf files. I compressed them to produce the .woff files found here using sfnt2woff. This is lossless; the exact, byte-for-byte original .ttf files can be recovered by decompressing them with woff2sfnt.

View Apache License, Version 2.0    “TERMS AND CONDITIONS FOR USE…”
                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

SharpAvi

Vasili Maslov has released SharpAvi under the MIT license. My fork of SharpAvi, SharpAvi.Net5, retains its license file without modification:

View MIT license    “Copyright (c) 2013-2018 Vasili Maslov …”

Copyright (c) 2013-2018 Vasili Maslov

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Smooth Scroll behavior polyfill

Smooth Scroll behavior polyfill, which is also sometimes called smoothscroll and smoothscroll-polyfill, has been released under the MIT license:

View MIT license    “Copyright (c) 2013 Dustan Kasten …”

The MIT License (MIT)

Copyright (c) 2013 Dustan Kasten

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Regarding authorship, the software’s website mentions:

Polyfill written by Dustan Kasten and Jeremias Menichelli

Windows Community Toolkit

The .NET Foundation and Contributors have released the Windows Community Toolkit under the MIT license:

View MIT license    “Copyright © .NET Foundation and Contributors …”

Windows Community Toolkit

Copyright © .NET Foundation and Contributors

All rights reserved.

MIT License (MIT)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


This README can be viewed in Vid­Draw’s built-in help browser, or online with the same styling, or on the repository page.