VidDraw 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 VidDraw is to demonstrate using SharpAvi (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 VidDraw alpha 5. It still has some usability bugs.
VidDraw 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. VidDraw’s dependencies are also free, but they are offered under other licenses. See Dependencies below for details.
Since some of VidDraw’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.
This alpha version of VidDraw 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 VidDraw, 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 VidDraw 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.
If you want VidDraw to be able to encode H.264 video, you’ll need x264vfw. You don’t have to install that before VidDraw, though. You can even install it while VidDraw is already running, and H.264 will be ungrayed in VidDraw’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 VidDraw: so long as x264vfw is installed for the same architecture as the running VidDraw process, a “Configure x264vfw (x86)” or “Configure x264vfw (x64)” menu item will appear.
Encoding with H.264 produces much smaller files than Motion JPEG, which is VidDraw’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 VidDraw records them, not H.264 video in general—are not playable on all players. This may be due to a bug in VidDraw, 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 VidDraw is out of alpha?), there are a couple workarounds to produce a video that VLC will play:
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.
Given a video from VidDraw 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 VidDraw saved the
file). Change VidDraw capture 2021-05-08 16-38-04.avi
to the actual name of
the file VidDraw 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.
If you’re just building and using VidDraw, and not modifying it—or modifying it but not modifying its documentation—you can skip this section.
VidDraw comes with doc\index.html
. Building VidDraw 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
VidDraw does not regenerate it. If you’re hacking on VidDraw
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 VidDraw’ and generating its documentation are supported on Windows, GNU/Linux, and macOS, running VidDraw’ 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.
VidDraw’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.
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 VidDraw is recording because the border around the canvas turns bright red. As long as it is red, VidDraw is recording. When it turns back to light gray, recording has stopped and the video file is fully saved.
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 VidDraw is still running or not. Conversely, it is fine to quit while still recording. VidDraw 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 VidDraw is always 800×600.
VidDraw 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 VidDraw is still running), VidDraw 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.
VidDraw 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 VidDraw clears any notifications that have not been clicked or dismissed. Unless you were running multiple instances of VidDraw—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.
VidDraw is only able to raise toast notifications on Windows 10, version 10.0.17763 or later. If VidDraw can’t raise toast notifications on your system, it falls back to opening the Explorer window immediately when recording finishes. But if VidDraw can’t show you a notification because you’ve configured notifications in Windows 10 not to show them (or turned them off), then VidDraw 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 VidDraw’s menu.
VidDraw 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 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).
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.
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 VidDraw was to demonstrate how to write video frames in SharpAvi 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.
If you want uncompressed video (where each frame is a bitmap), you should use
this. It uses SharpAvi’s UncompressedVideoEncoder
. As the
SharpAvi
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 is
VidDraw’s default encoding. Each frame is converted to and stored as
a JPEG image. This uses SharpAvi’s MotionJpegVideoEncoderWpf
. From
the SharpAvi
docs:
Next is the
MJpegWpfVideoEncoder
which does Motion JPEG encoding. It usesSystem.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).
VidDraw uses a quality of 100, since the pen in VidDraw 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.
If the x264vfw codec (of the same architecture as the VidDraw process) is installed, the menu item for H.264 is unfaded. It isn’t the default because VidDraw 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 SharpAvi 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.
If the canvas has not been drawn on since opening SharpAvi, 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.
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. VidDraw saves
your custom colors, so they are available if you quit VidDraw and run it
again. Your custom VidDraw 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 VidDraw’s color picker.)
Clicking “Open Videos Folder” opens the destination folder where
VidDraw 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 VidDraw 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 VidDraw saves, even during the same run of the program.)
If x264vfw is not installed, or it is installed but not for the same architecture as the VidDraw process, then VidDraw 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 VidDraw process, then VidDraw can use it, and the menu contains either a “Configure x264vfw (x64)” or “Configure x264vfw (x86)” item, depending on the architecture of the VidDraw 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 VidDraw, and configuration changes you make in it affect x264vfw on your whole system; they are not specific to VidDraw. 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.
Clicking “About VidDraw…” displays this README in VidDraw’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).
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.
VidDraw 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.
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 SharpAvi sample application—both the upstream version targeting the upstream SharpAvi and my forked version targeting the fork of SharpAvi that VidDraw uses. But it remains unclear to me, due to its sensitivity to x264vfw settings, whether it is due to a bug in SharpAvi. I can also produce it in the SharpAvi sample application with Xvid (but, likewise, this might turn out to be because of how I have Xvid configured).
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 VidDraw’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.
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?
VidDraw’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.
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.
Although it is not a goal for VidDraw 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.
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.
VidDraw uses the following libraries and fonts. Thanks go to the authors and contributors to all these projects—and especially to Vasili Maslov for writing SharpAvi. 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.
- AnchorJS 4.3.1 by Bryan Braun
[included]
MIT license (local, inline) - Fork me on GitHub CSS
ribbon 0.2.3 by
Simon Whitaker [included]
MIT license (local, inline) - Json.NET (Newtonsoft.Json) 13.0.2 by James
Newton-King [nuget]
MIT license (inline) - kbd 0.0.1 by Auth0
[included]
MIT license (local, inline) - Milligram 1.4.1 by CJ Patoilo
[included]
MIT license (local, inline) - normalize.css 8.0.1 by Nicolas
Gallagher and Jonathan Neal
[included]
MIT license (local, inline) - Open Sans 1.10 (font) by Steve
Matteson [included]
Apache License, Version 2.0 (local, inline) - Open Sans
Condensed
1.10 (font) by Steve Matteson [included]
Apache License, Version 2.0 (local, inline) - SharpAvi.Net5 2.2.1, my
fork of SharpAvi 2.2.1 by Vasili
Maslov [nuget]
MIT license (inline) - Smooth Scroll behavior polyfill
0.4.4 by Dustan Kasten and Jeremias Menichelli
[included]
MIT license (local, inline) - Windows Community
Toolkit –
Notifications
7.1.3 by .NET Foundation and Contributors
[nuget]
MIT license (inline)
VidDraw 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 SharpAvi 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 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 VidDraw, 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.
VidDraw uses x264vfw via SharpAvi 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 VidDraw or any of the libraries VidDraw 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 VidDraw to be GPL-compatible! If it is not, or even if it appears not to be, I’d consider that a serious bug.
VidDraw’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 VidDraw’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.
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.
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.
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.
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.
CJ Patoilo has released Milligram under the MIT license:
View MIT license “Copyright (c) CJ Patoilo <[email protected]> …”
The MIT License (MIT)
Copyright (c) CJ Patoilo <[email protected]>
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.
Nicolas Gallagher and Jonathan Neal have released normalize.css under the MIT license:
View MIT license “Copyright © Nicolas Gallagher and Jonathan Neal …”
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.
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.
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, 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
The .NET Foundation and Contributors have released the Windows Community Toolkit under the MIT license:
View MIT license “Copyright © .NET Foundation and Contributors …”
Copyright © .NET Foundation and Contributors
All rights reserved.
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 VidDraw’s built-in help browser, or online with the same styling, or on the repository page.