VidDraw - record video as you draw
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.
License
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.
Setup
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:
://github.com/EliahKagan/VidDraw.git
git clone httpscd 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.
Optional: Get x264vfw for H.264 support
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.
A problem with H.264 in VidDraw
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:
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 VidDraw that VLC cannot open, FFmpeg will repair it:
-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" ffmpeg
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.
Optional: Regenerate the Documentation
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:
.cmd pandoc\generate
(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.
Usage Tips
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.
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 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.
Save Location and Toast Notifications
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.
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.
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.
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 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).
It might be useful to be able to pause.
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.
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 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.
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
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 and x264vfw
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.
Notices
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:
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.
AnchorJS
Bryan Braun has released AnchorJS under the MIT license:
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:
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:
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:
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:
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:
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
.
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.
Smooth Scroll behavior polyfill
Smooth Scroll behavior polyfill, which is also sometimes called smoothscroll and smoothscroll-polyfill, has been released under the MIT license:
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:
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 VidDraw’s built-in help browser, or online with the same styling, or on the repository page.