diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000000..57cf0ec14452 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +charset = utf-8 +indent_size = 2 +end_of_line = lf +indent_style = space +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.github/ISSUE_TEMPLATE/Bug_report.md b/.github/ISSUE_TEMPLATE/Bug_report.md new file mode 100644 index 000000000000..30a9e8a84556 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/Bug_report.md @@ -0,0 +1,28 @@ +--- +name: バグ報告 +about: バグ修正に役立つ報告を作成 + +--- + +**バグの概要** +バグの内容を簡潔かつ明確に書いてください。 + +**再現手順** +バグ再現手順: +1. '...'に移動 +2. '....'をクリック +3. '....'を下へスクロール +4. エラーが表示される + +**期待する動作** +あなたが期待する動きを簡潔かつ明確に書いてください。 + +**スクリーンショット** +バグの説明に役立つスクリーンショットを用意できる場合、ここに追加してください。 + +**バグが発生した環境** + - OS: [例: Windows 10] + - Version [例: v0.1.20180808-1.exe] + +**補足** +このバグに関連する情報を追加してください。 diff --git a/.github/ISSUE_TEMPLATE/Feature_request.md b/.github/ISSUE_TEMPLATE/Feature_request.md new file mode 100644 index 000000000000..9708204f606d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/Feature_request.md @@ -0,0 +1,17 @@ +--- +name: 要望 +about: プロジェクトに関するアイディア提案 + +--- + +**あなたの要望がどのような問題に関連しているのか** +問題が何であるかを簡潔かつ明確に書いてください。 + +**あなたが望む解決策の説明** +あなたが何をしたいのかについての説明を簡潔かつ明確に書いてください。 + +**解決手法の提案** +あなたが考えた解決手法や機能の説明を簡潔かつ明確に書いてください。 + +**追加情報** +この要望に関連する情報やスクリーンショットを追加してください。 diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000000..aba52b3a8c4d --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,3 @@ +**このpull requestが解決する内容** + +**動作確認手順** diff --git a/.gitignore b/.gitignore index abcb56e09861..e17e634dfe04 100644 --- a/.gitignore +++ b/.gitignore @@ -3,12 +3,14 @@ node_modules/ build/ npm-debug.log +yarn-error.log lib/ rtmp-services/ text-freetype2/ /data/ dist/ test-dist/ +test-unit-dist/ bundles/ node-obs/ node-boost/ @@ -16,3 +18,4 @@ electron.sln electron.VC.db .vs/ plugins/ +AGREEMENT.sjis diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 91f7cab3eb4e..000000000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "node-libuiohook"] - path = node-libuiohook - url = https://github.com/stream-labs/node-libuiohook.git diff --git a/.prettierrc b/.prettierrc index 544138be4565..b8fab9bd5439 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,3 +1,5 @@ { - "singleQuote": true + "singleQuote": true, + "printWidth": 120, + "trailingComma": "es5" } diff --git a/AGREEMENT b/AGREEMENT index 5c21eb1adb87..f7a5f1a99a0a 100644 --- a/AGREEMENT +++ b/AGREEMENT @@ -1,1887 +1,62 @@ -Streamlabs OBS License, Terms, and Policy - -CONTENTS: - I. Software License Agreement - II. Terms of Service -III. Privacy Policy - ------------------------------------ -I. Software License Agreement ------------------------------------ - - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. - ------------------------------------ -II. Terms of Service ------------------------------------ - -OVERVIEW - -This website ("streamlabs.com") is operated by Streamlabs. Throughout -the site, the terms “we”, “us”, and “our” refer to -Streamlabs. Streamlabs offers this website, including all information, -tools, and services available from this site to you, the user, -conditioned upon your acceptance of all terms, conditions, policies, and -notices stated here. - -By visiting our site and/or using our service, you engage in our -“Service” and agree to be bound by the following terms and -conditions (“Terms of Service”, “Terms”), including those -additional terms and conditions and policies referenced herein and/or -available by hyperlink. These Terms of Service apply to all users of the -site, including without limitation users who are browsers, vendors, -customers, tippers, merchants, and/or contributors of content. - -Please read these Terms of Service carefully before accessing or using -our website. By accessing or using any part of the site, you agree to be -bound by these Terms of Service. If you do not agree to all the terms -and conditions of this agreement, then you may not access the website or -use any services. If these Terms of Service are considered an offer, -acceptance is expressly limited to these Terms of Service. - -Any new features or tools which are added to the service shall also be -subject to the Terms of Service. You can review the most current version -of the Terms of Service at any time on this page. We reserve the right -to update, change or replace any part of these Terms of Service by -posting updates and/or changes to our website. It is your responsibility -to check this page periodically for changes. Your continued use of or -access to the website following the posting of any changes constitutes -acceptance of those changes. - -INTRODUCTION - -Streamlabs is a broadcaster tool software service, and offers services -for the user to customize and optimize their live stream. Streamlabs -offers a free service, as well as a premium paid subscription service. -Streamlabs is a service that allows users to send and receive money -("tips") through third-party payment processors. Our service also -features a variety of tools and widgets that can utilize various data -from our services. - -USER TERMS - -By agreeing to these Terms of Service, you represent that you are at -least the age of majority in your state or province of residence, or -that you are the age of majority in your state or province of residence -and you have given us your consent to allow any of your minor dependents -to use this site. - -You may not use our service for any illegal or unauthorized purpose nor -may you, in the use of the Service, violate any laws in your -jurisdiction (including but not limited to copyright laws). - -You must not transmit any worms or viruses or any code of a destructive -nature. - -A breach or violation of any of the Terms will result in an immediate -termination of your Services. - -GENERAL CONDITIONS - -We reserve the right to refuse service to anyone for any reason at any -time. - -You understand that your content, may be transferred unencrypted and -involve (a) transmissions over various networks; and (b) changes to -conform and adapt to technical requirements of connecting networks or -devices. - -You agree not to reproduce, duplicate, copy, sell, resell, or exploit -any portion of the Service, use of the Service, or access to the Service -or any contact on the website through which the service is provided, -without express written permission by us. - -The headings used in this agreement are included for convenience only -and will not limit or otherwise affect these Terms. - -ACCURACY, COMPLETENESS, AND TIMELINESS OF INFORMATION - -We are not responsible if information made available on this site is not -accurate, complete, or current. The material on this site is provided -for general information only and should not be relied upon or used as -the sole basis for making decisions without consulting primary, more -accurate, more complete or timelier sources of information. Any reliance -on the material on this site is at your own risk. - -This site may contain certain historical information. Historical -information, necessarily, is not current and is provided for your -reference only. We reserve the right to modify the contents of this site -at any time, but we have no obligation to update any information on our -site. You agree that it is your responsibility to monitor changes to our -site. - -MODIFICATIONS TO THE SERVICE AND PRICES - -Prices and/or fees for our Service are subject to change without notice. - -We reserve the right at any time to modify or discontinue the Service -(or any part or content thereof) without notice at any time. - -We shall not be liable to you or to any third-party for any -modification, price change, suspension, or discontinuance of the -Service. - -SENDING TIPS - -We allow you to send tips (also referred to as “donations”) through -this Service using multiple payment methods. We reserve the right to -change these payment methods at any time. We reserve the right to impose -limits on the number of transactions you can send through our Service. -When sending tips, the recipient is not required to accept or -acknowledge them. You agree that you will not hold us liable for any -unclaimed or unacknowledged tips. - -By sending a tip or donation to the recipient, you agree that the card -is your own and authorize us to charge each tip transaction in full. -This charge is non-refundable, non-profitable, and/or exchangeable and -cannot be withdrawn or charged back. You acknowledge that you are not -receiving any goods/services in return for this tip. - -You, the Tipper, have the option to pay for the processing fee at the -point of the tip transaction. By checking the fee option, you agree to -authorize us to deduct any associated processing fees as needed by the -payment processor. Due to currency exchange discrepancy from our API and -our payment processor’s API the total charge to the tipper may off by -a minimal amount and any overcharged fees will be given to the streamer. -If you decide not to opt in to pay the fee, the streamer is fully -responsible for it. - -THIRD PARTY SITE PROMOTIONS - -When using Streamlabs, you may have the option to utilize a third party -site to earn credits for the use of Streamlabs as well as other -promotional offers. You authorize Streamlabs to share information with -these third party sites if you choose to take part in the promotion. You -additionally agree to the Terms of Service of these third party sites -when utilizing them, as well as the Terms of Service of Streamlabs when -leaving the Streamlabs site to take part in the third party site’s -interface to earn these credits or promotions. Streamlabs and the third -party service reserve the right to withhold points earned for any -reason. Streamlabs reserves the right to remove your account credit -balance if you are in a breach of the Terms of Service, or suspected of -a breach in the Terms of Service, on the third party site or on -Streamlabs. - -RECEIVING TIPS - -We reserve the right to collect a fee for tips received. Fees are -subject to change without prior notification, it is your responsibility -as the user to stay updated on Fees and changes to the Fees. When -receiving tips, you are liable for any chargebacks or disputes that may -occur thereafter in association with those transactions. We are not -liable for any charges that may be incurred from these chargebacks or -disputes. At any point our payment processors determine you are -incurring excessive Chargebacks, your Streamlabs account may results in -additional controls and restrictions on your balance. - -You agree to send any type of identification that is asked for in order -to complete a withdrawal request. You agree to pay a fee for any -withdrawal. If bank account information and country of issuance is -incorrect, you are subject to a delay in your withdrawal and/or account -deletion. If country of issued bank account is incorrect, you will not -be able to change it. You must contact Streamlabs support immediately. - -By accepting this agreement, you authorize us to hold, receive, and -disburse funds on your behalf when such funds from the Card Networks are -settled into your account. We may make available to you information in -the Streamlabs management dashboard regarding anticipated settlement -amounts received on your behalf from the Card Networks and are being -held pending settlement. This settlement information does not constitute -a deposit or other obligation of Streamlabs or our payment processor to -you. This settlement information reflected in the Streamlabs management -dashboard is for reporting and informational purposes only, and you are -not entitled to, and have no ownership or other rights in settlement -funds, until such funds are credited to your designated bank settlement -account. Your authorizations set forth herein will remain in full force -and effect until your Streamlabs account is closed or terminated. - -You agree to pay all fees assessed by us to you for providing our -payment processors services. Tippers have the option to pay for your fee -at the point of the tip transaction. Due to currency exchange -discrepancy from Streamlabs’ API and our payment processor’s API the -total charge to the tipper may off by a minimal amount and overcharged -fees will be given to the streamer. If they decide not to opt in to pay -the fee, you are fully responsible for it. - -Registration - -To register your account to start receiving credit card tips, you must -provide your personal information (which cannot be changed after -registration) and bank account information. To enable withdrawals and -transfers from your account, you must submit valid personal and bank -information which will be sent for verification to our payment -processor. This private information is never saved on Streamlabs’ -website. You will able be required to submit valid government -identification if requested by our payment processor for further -verification. In consideration of use of the Service, you agree to -maintain and update true, accurate, current and complete Registration -Data. If you provide any information that is untrue, inaccurate, not -current or incomplete, or if our payment processor has reasonable -grounds to suspect that such information is untrue, inaccurate, not -current or incomplete, our payment processor may suspend or terminate -your account and refuse any and all current or future use of the Service -or any portion thereof. Failure to submit required information may limit -your ability to withdraw and/or transfer your pending balance. - -To register your account to start receiving PayPal tips, you must -provide your email associated with your Paypal account. Failure to -submit the correct information may limit your ability to receive tips. - -Chargebacks - -In the event a Chargeback is issued, you are immediately liable for the -full amount of the transaction related to the Chargeback. You are also -liable for any associated fees, fines, expenses, or penalties. You agree -that any associated fees, fines, or expenses will be deducted from your -Streamlabs balance (see Reserves). - -For credit card tips, Streamlabs will be elected to contest Chargebacks -assessed against you. You agree to provide us with the necessary -information, in a timely manner and at your expense, to investigate or -help resolve any Chargeback. You also grant us permission to share -records or other information required with financial institutions and -Card Networks to help resolve any disputes. You acknowledge that your -failure to provide us with complete and accurate information in a timely -manner may result in an irreversible Chargeback being assessed. If the -Chargeback is resolved in your favor, the Chargeback amount and any -associated fees will be recovered to your Streamlabs balance. - -At any point our payment processors determine you are incurring -excessive Chargebacks, your Streamlabs account may results in additional -controls and restrictions on your balance. - -For Paypal tips, you are solely responsible for contesting Chargebacks -and disputes. You are liable for any chargebacks or disputes that may -occur thereafter in association with those transactions. We are not -liable for any charges that may be incurred from these chargebacks or -disputes. - -Reserves - -You agree that a 60 day reserve may be accounted on your balance to -cover any Chargebacks at the point of credit card tip sign up. This -reserve may decrease or increase depending on the history and activity -of your account. - -In certain circumstances, we may determine that a Reserve on your -account is necessary to provide the payment services to you. You agree -that Streamlabs, in its sole discretion, will set the terms of a Reserve -on your account, where needed. Streamlabs will notify you of such terms, -which may require that a certain amount (including the full amount) of -the funds received for your transaction is held for a period of time or -that additional amounts are held in a Reserve Account. - -Withdrawal/Transfers - -You may transfer funds from your available account balance once your -bank account information is completely filled on your Streamlabs -account. Funds from credit card tips are only available for transfer -through bank accounts. You agree to send any type of identification that -is asked for in order to complete a withdrawal request. You agree to pay -a fee for any withdrawal. - -If bank account information and country of issuance is incorrect, you -are subject to a delay in your withdrawal and/or account deletion. If -country of issued bank account is incorrect, you will not be able to -change it. You must contact Streamlabs support immediately. - -Handling of Funds - -By accepting this agreement, you authorize us to hold, receive, and -disburse funds on your behalf when such funds from the Card Networks are -settled into your account. We may make available to you information in -the Streamlabs management dashboard regarding anticipated settlement -amounts received on your behalf from the Card Networks and are being -held pending settlement. This settlement information does not constitute -a deposit or other obligation of Streamlabs or our payment processor to -you. This settlement information reflected in the Streamlabs management -dashboard is for reporting and informational purposes only, and you are -not entitled to, and have no ownership or other rights in settlement -funds, until such funds are credited to your designated bank settlement -account. Your authorizations set forth herein will remain in full force -and effect until your Streamlabs account is closed or terminated. - -Fees - -You agree to pay all fees assessed by us to you for providing our -payment processors services. Tippers have the option to pay for your fee -at the point of the tip transaction. Due to currency exchange -discrepancy from Streamlabs’ API and our payment processor’s API the -total charge to the tipper may off by a minimal amount and overcharged -fees will be given to the streamer. If they decide not to opt in to pay -the fee, you are fully responsible for it. - -Your Privacy - -Your privacy is important to us, and you acknowledge that you have read -in full agreement to our Privacy Policy. - -TIPPERS - -Registration - -By sending a tip to the recipient, you agree that the card is your own -and authorize Streamlabs to charge each tip transaction in full. This -charge is non-refundable, non-profitable, and/or exchangeable and cannot -be withdrawn or charged back. You acknowledge that you are not receiving -any goods/services in return for this tip. - -Sending Tips/Donations - -Streamlabs allows users to send tips through third party payment -processors. We reserve the right to add or remove support for these -third party payment processors at any time. The recipient of tips are -not required to acknowledge or accept them. You agree that you will not -hold Streamlabs liable for any unclaimed or unacknowledged tips. - -Fees - -You, the Tipper, have the option to pay for the processing fee at the -point of the tip transaction. By checking the fee option, you agree to -authorize Streamlabs to deduct any associated processing fees as needed -by the payment processor. Due to currency exchange discrepancy from -Streamlabs’ API and our payment processor’s API the total charge to -the tipper may off by a minimal amount and any overcharged fees will be -given to the streamer. If you decide not to opt in to pay the fee, the -streamer is fully responsible for it. - -Your Privacy - -Your privacy is important to us, and you acknowledge that you have read -in full agreement to our Privacy Policy. - -ALL-STARS TERMS - -Streamlabs offers a program called All-Stars, which awards merchandise -and game keys to users within the program. By agreeing to the Membership -of the All-Stars program, you are also agreeing to the terms and -conditions of these third-party games and merchandise of which is given -to you. By accepting admittance to the All-Stars program, you agree to -be bound by the following terms and conditions: - -No Resale. Merchandise and game keys given to you via the All-Stars -program are for use on your channel, or your channel’s giveaway. -Merchandise and game keys are prohibited from resale or exchange. -Exclusivity. You agree to use Streamlabs as your primary service for tip -processing, alerts and other streaming activities. Any violation of -these terms will result in the removal from Streamlabs All-Stars -program. We also reserve the right to remove you from the All-Stars -program at our sole discretion for any breach of these terms herein. - -TERMS OF SERVICE FOR GUILD LEADERS - -Guilds, paid or free, will remain the property of Streamlabs including -any members, files, or other assets. You receive a license to operate -and manage your Guild, provided it does not violate any terms of -service. Streamlabs reserves the right to cancel memberships, revoke or -delete your Guild if it believes that any violations have occurred. - -You shall not use Guilds, or allow any of your members, to promote any -hate, violence, crime, pornography, spam, harassment, illegal substances -or any other illegal activity. - -You are responsible for setting a price for your Guild, defining the -activities/services provided, and keeping members satisfied with your -Guild. You will receive a flat 65% of the membership dues generated (if -any), paid out each month. Payouts can be automated or manual upon -request, and are paid Net 30 after funds are received by Streamlabs. -Chargebacks, refunds and payment processor fees will be paid for by -Streamlabs. - -Streamlabs reserves the right to cancel a Guild, or any particular -member, if it believes that fraud, theft or misuse of funds is taking -place. If you engage willfully in payment fraud, you will forfeit rights -to any funds due to you and your Streamlabs account may be deactivated. - -You shall not publicly disclose your member lists or member names. -Members expect privacy when they join your Guild. Any Guild information -or activities should remain private within the group. - -To receive funds, you may need to provide a completed W9 (if based in -the US). You will be responsible for managing and filing your own taxes -in your own country or jurisdiction. - -If you remove a paid member from your guild for reasons other than abuse -of TOS, harassment or fraud (without “Cause”), then the member will -be entitled to a partial or full refund for that month. - -Any linking (such as from Twitter, Twitch or Youtube) to your guild -should use your official guild link, provided to you on your guild page. - -Use of any third-party services such as the optional Discord integration -provided for your guild requires acceptance of their Terms of Service -and Privacy policies. - -TERMS OF SERVICE FOR GUILD MEMBERS - -Guild, paid or free, will remain the property of Streamlabs including -any members, files, or other assets. Streamlabs reserves the right to -cancel memberships, revoke or delete any Guild if it believes that any -violations have occurred. - -You shall not join Guilds to promote any hate, violence, crime, -pornography, spam, harassment, illegal substances, or any other illegal -activity. - -By applying to a paid Guild, you agree that the card is your own and -authorize Streamlabs to charge each paid Guild transaction in full. -Streamers are in charge of setting the price for each Guild. All -purchases are final and not subject to refunds unless your application -is denied. - -Streamlabs reserve the right to cancel a Guild, or any particular -member, if it believes that fraud, theft of funds is taking place. If -you engage willfully in payment fraud, you will forfeit rights to any -Guilds and your Streamlabs account may be deactivated. - -You will not be publicly be disclosed by Guild leaders. Any Guild -information or activities will remain private within the group. - -If you are removed from a paid Guild for reasons other than abuse of -TOS, harassment or fraud (without “Cause”), then you will be -entitled to a partial or full refund for that month. - -Use of any third-party services such as Discord provided for the Guild -requires acceptance of their Terms of Service and Privacy policies. - -CREDIT CARD TERMS - -Streamlabs utilizes third party service Stripe and Braintree to process -credit cards. By agreeing to Streamlabs’ Terms of Service, you are -also agreeing to Stripe’s Terms of Service, located at -https://stripe.com/us/terms. - -In the event a Chargeback is issued, you are immediately liable for the -full amount of the transaction related to the Chargeback. You are also -liable for any associated fees, fines, expenses, or penalties. You agree -that any associated fees, fines, or expenses will be deducted from your -Streamlabs or Campaign balance. - -At any point our payment processors determine you are incurring -excessive Chargebacks, your Streamlabs account may results in additional -controls and restrictions on your balance. - -ACCURACY OF BILLING AND ACCOUNT INFORMATION - -You agree to provide current, complete, and accurate purchase and -account information for all transactions occurring on our Service. You -agree to promptly update your account and other information so that we -can complete your transactions and contact you as needed. - -TAXES - -You are responsible to determine if any taxes apply to the tips sent or -received using our Service. You are responsible for any taxes applicable -to earnings through the OpenAds platform. - -Publishers will be prompted to fill out a W9 upon account creation. This -W9 will be used for issuance of IRS Tax Form 1099 for U.S. residences -that earn over $600 in a calendar year. - -It is your responsibility to correctly collect and report taxes to your -local tax authority. We are not responsible for taxes arising from any -transactions sent through this Service. - -OPTIONAL TOOLS - -We may provide you with access to third-party tools of which we neither -monitor nor have control over. - -You acknowledge and agree that we provide access to such tools “as -is” and “as available” without any warranties, representations or -conditions of any kind and without any endorsement. We shall have no -liability whatsoever arising from or relating to your use of optional -third-party tools. - -Any use by you of optional tools offered through the site is entirely at -your own risk and discretion and you should ensure that you are familiar -with and approve of the terms on which tools are provided by the -relevant third-party provider(s). - -We may also, in the future, offer new services and/or features through -the website (including, the release of new tools and resources). Such -new features and/or services shall also be subject to these Terms of -Service. - -THIRD-PARTY LINKS - -Certain content and services available via our Service may include -materials from third-parties. - -Third-party links on this site may direct you to third-party websites -that are not affiliated with us. We are not responsible for examining or -evaluating the content or accuracy and we do not warrant and will not -have any liability or responsibility for any third-party materials or -websites, or for any other materials, products, or services of -third-parties. - -We are not liable for any harm or damages related to the purchase or use -of goods, services, resources, content, or any other transactions made -in connection with any third-party websites. Please review carefully the -third-party's policies and practices and make sure you understand them -before you engage in any transaction. Complaints, claims, concerns, or -questions regarding third-party products should be directed to the -third-party. - -USER COMMENTS, FEEDBACK AND OTHER SUBMISSIONS - -If, at our request, you send certain specific submissions (for example -contest entries) or without a request from us you send creative ideas, -suggestions, proposals, plans, or other materials, whether online, by -email, by postal mail, or otherwise (collectively, 'comments'), you -agree that we may, at any time, without restriction, edit, copy, -publish, distribute, translate and otherwise use in any medium any -comments that you forward to us. We are and shall be under no obligation -(1) to maintain any comments in confidence; (2) to pay compensation for -any comments; or (3) to respond to any comments. - -We may, but have no obligation to, monitor, edit or remove content that -we determine in our sole discretion are unlawful, offensive, -threatening, libelous, defamatory, pornographic, obscene or otherwise -objectionable or violates any party’s intellectual property or these -Terms of Service. - -You agree that your comments will not violate any right of any -third-party, including copyright, trademark, privacy, personality or -other personal or proprietary right. You further agree that your -comments will not contain libelous or otherwise unlawful, abusive or -obscene material, or contain any computer virus or other malware that -could in any way affect the operation of the Service or any related -website. You may not use a false e-mail address, pretend to be someone -other than yourself, or otherwise mislead us or third-parties as to the -origin of any comments. You are solely responsible for any comments you -make and their accuracy. We take no responsibility and assume no -liability for any comments posted by you or any third-party. - -PERSONAL INFORMATION - -Your submission of personal information through the service is governed -by our Privacy Policy, which is available on our Privacy Policy. - -ERRORS, INACCURACIES AND OMISSIONS - -Occasionally there may be information on our site or in the Service that -contains typographical errors, inaccuracies or omissions that may relate -to descriptions, pricing, promotions, offers, and availability. We -reserve the right to correct any errors, inaccuracies or omissions, and -to change or update information or cancel orders if any information in -the Service or on any related website is inaccurate at any time without -prior notice (including after you have submitted your order). - -We undertake no obligation to update, amend or clarify information in -the Service or on any related website, including without limitation, -pricing information, except as required by law. No specified update or -refresh date applied in the Service or on any related website, should be -taken to indicate that all information in the Service or on any related -website has been modified or updated. - -PROHIBITED USES - -In addition to other prohibitions as set forth in the Terms of Service, -you are prohibited from using the site or its content: (a) for any -unlawful purpose; (b) to solicit others to perform or participate in any -unlawful acts; (c) to violate any international, federal, provincial or -state regulations, rules, laws, or local ordinances; (d) to infringe -upon or violate our intellectual property rights or the intellectual -property rights of others; (e) to harass, abuse, insult, harm, defame, -slander, disparage, intimidate, or discriminate based on gender, sexual -orientation, religion, ethnicity, race, age, national origin, or -disability; (f) to submit false or misleading information; (g) to upload -or transmit viruses or any other type of malicious code that will or may -be used in any way that will affect the functionality or operation of -the Service or of any related website, other websites, or the Internet; -(h) to collect or track the personal information of others; (i) to spam, -phish, pharm, pretext, spider, crawl, or scrape; (j) for any obscene or -immoral purpose; or (k) to interfere with or circumvent the security -features of the Service or any related website, other websites, or the -Internet. (l) for any campaign that you partake in as a publisher, we -reserve the right to review the campaign, your content, your materials -in connection with the campaign, and reserve the right to remove you -from said campaign at our sole discretion. (m) for viewbotting in -connection to a Campaign, if we determine or assume that your account -has taken part in viewbotting, whether by third parties our yourself, we -reserve the right to ban your account and remove your earnings at our -sole discretion. - -We reserve the right to terminate your use of the Service, Campaign or -any related website for violating any of the prohibited uses. - -DISCLAIMER OF WARRANTIES; LIMITATION OF LIABILITY We do not guarantee, -represent or warrant that your use of our service will be uninterrupted, -timely, secure or error-free. - -We do not warrant that the results that may be obtained from the use of -the service will be accurate or reliable. - -You agree that from time to time we may remove the service for -indefinite periods of time or cancel the service at any time, without -notice to you. - -You expressly agree that your use of, or inability to use, the service -is at your sole risk. The service and all products and services -delivered to you through the service are (except as expressly stated by -us) provided 'as is' and 'as available' for your use, without any -representation, warranties or conditions of any kind, either express or -implied, including all implied warranties or conditions of -merchantability, merchantable quality, fitness for a particular purpose, -durability, title, and non-infringement. - -In no case shall Streamlabs Inc., our directors, officers, employees, -affiliates, agents, contractors, interns, suppliers, service providers -or licensors be liable for any injury, loss, claim, or any direct, -indirect, incidental, punitive, special, or consequential damages of any -kind, including, without limitation lost profits, lost revenue, lost -savings, loss of data, replacement costs, or any similar damages, -whether based in contract, tort (including negligence), strict liability -or otherwise, arising from your use of any of the service or any -products procured using the service, or for any other claim related in -any way to your use of the service or any product, including, but not -limited to, any errors or omissions in any content, or any loss or -damage of any kind incurred as a result of the use of the service or any -content (or product) posted, transmitted, or otherwise made available -via the service, even if advised of their possibility. Because some -states or jurisdictions do not allow the exclusion or the limitation of -liability for consequential or incidental damages, in such states or -jurisdictions, our liability shall be limited to the maximum extent -permitted by law. - -INDEMNIFICATION - -You agree to indemnify, defend and hold harmless Streamlabs, Inc. and -our parent, subsidiaries, affiliates, partners, officers, directors, -agents, contractors, licensors, service providers, subcontractors, -suppliers, interns and employees, harmless from any claim or demand, -including reasonable attorneys’ fees, made by any third-party due to -or arising out of your breach of these Terms of Service or the documents -they incorporate by reference, or your violation of any law or the -rights of a third-party. - -SEVERABILITY - -In the event that any provision of these Terms of Service is determined -to be unlawful, void or unenforceable, such provision shall nonetheless -be enforceable to the fullest extent permitted by applicable law, and -the unenforceable portion shall be deemed to be severed from these Terms -of Service, such determination shall not affect the validity and -enforceability of any other remaining provisions. - -TERMINATION - -The obligations and liabilities of the parties incurred prior to the -termination date shall survive the termination of this agreement for all -purposes. - -These Terms of Service are effective unless and until terminated by -either you or us. You may terminate these Terms of Service at any time -by notifying us that you no longer wish to use our Services, or when you -cease using our site. - -If in our sole judgment you fail, or we suspect that you have failed, to -comply with any term or provision of these Terms of Service, we also may -terminate this agreement at any time without notice and you will remain -liable for all amounts due up to and including the date of termination; -and/or accordingly may deny you access to our Services (or any part -thereof). - -ENTIRE AGREEMENT - -The failure of us to exercise or enforce any right or provision of these -Terms of Service shall not constitute a waiver of such right or -provision. - -These Terms of Service and any policies or operating rules posted by us -on this site or in respect to The Service constitutes the entire -agreement and understanding between you and us and govern your use of -the Service, superseding any prior or contemporaneous agreements, -communications and proposals, whether oral or written, between you and -us (including, but not limited to, any prior versions of the Terms of -Service). - -Any ambiguities in the interpretation of these Terms of Service shall -not be construed against the drafting party. - -CONTACT INFORMATION - -Questions about the Terms of Service should be sent to -support@streamlabs.com. - -Intellectual Property Rights - -The Content on the Websites, including without limitation, the text, -software, scripts, graphics, photos, sounds, music, videos, interactive -features and the like and the trademarks, service marks and logos -contained therein (the "Intellectual Property"), are owned by or -licensed to Streamlabs, subject to copyright and other intellectual -property rights under United States and foreign laws and international -conventions. Content on the Websites is provided to you AS IS for your -information and personal use only and may not be used, copied, -reproduced, distributed, transmitted, broadcast, displayed, sold, -licensed, or otherwise exploited for any other purposes whatsoever -without the prior written consent of the respective owners. Streamlabs -reserves all rights not expressly granted in and to the Websites and the -Intellectual Property. You agree to not engage in the use, copying, or -distribution of any of the Intellectual Property other than expressly -permitted herein. If you download or print a copy of the Intellectual -Property for personal use, you must retain all copyright and other -proprietary notices contained therein. You agree not to circumvent, -disable or otherwise interfere with security related features of the -Websites or features that prevent or restrict use or copying of any -Intellectual Property or enforce limitations on use of the Websites or -the Intellectual Property therein. - -Some of the Services may allow you to submit or transmit audio, video, -text, or other materials (collectively, "User Submissions") to or -through the Services. When you provide User Submissions, you grant to -Streamlabs, its parents, subsidiaries, affiliates, and partners a -non-exclusive, worldwide, royalty-free, fully sub-licenseable license to -use, distribute, edit, display, archive, publish, sublicense, perform, -reproduce, make available, transmit, broadcast, sell, translate, and -create derivative works of those User Submissions, and your name, voice, -likeness and other identifying information where part of a User -Submission, in any form, media, software, or technology of any kind now -known or developed in the future, including, without limitation, for -developing, manufacturing, and marketing products. You hereby waive any -moral rights you may have in your User Submissions. - -In addition, you agree that any User Submissions you submit shall not -contain any material that is, in the sole and absolute discretion of -Streamlabs, inappropriate, obscene, vulgar, unlawful, or otherwise -objectionable (hereinafter, "Prohibited Content"). Posting of any -Prohibited Content, in addition to any and all other rights and remedies -available to Streamlabs, may result in account suspension or -termination. - -We respect your ownership of User Submissions. If you owned a User -Submission before providing it to us, you will continue owning it after -providing it to us, subject to any rights granted in the Terms of Use -and any access granted to others. If you delete a User Submission from -the Services, our general license to that User Submission will end after -a reasonable period of time required for the deletion to take full -effect. However, the User Submission may still exist in our backup -copies, which are not publicly available. If your User Submission is -shared with third parties, those third parties may have retained copies -of your User Submissions. In addition, if we made use of your User -Submission before you deleted it, we will continue to have the right to -make, duplicate, redistribute, and sublicense those pre-existing uses, -even after you delete the User Submission. Terminating your account on a -Service will not automatically delete your User Submissions. - -We may refuse or remove a User Submission without notice to you. -However, we have no obligation to monitor User Submissions, and you -agree that neither we nor our parents, subsidiaries, affiliates, -employees, or agents will be liable for User Submissions or any loss or -damage resulting from User Submissions. - -Except as provided in the Privacy Policy, we do not guarantee that User -Submissions will be private, even if the User Submission is in a -password-protected area. Accordingly, you should not provide User -Submissions that you want protected from others. - -You represent and warrant that you have all rights necessary to grant to -Streamlabs the license above and that none of your User Submissions are -defamatory, violate any rights of third parties (including intellectual -property rights or rights of publicity or privacy), or violate -applicable law. - -Digital Millennium Copyright Act - -The Digital Millennium Copyright Act of 1998 (the "DMCA") provides -recourse for copyright owners who believe that material appearing on the -Internet infringes their rights under U.S. copyright law. If you believe -in good faith that materials on the Websites infringe your copyright, -you (or your agent) may send us a notice requesting that the material be -removed or access to it blocked. Please see the following requirements -and specific instructions for submitting a notice to Streamlabs. - -Notification: If you believe that your copyright-protected work has been -copied and posted on the Websites in a way that constitutes copyright -infringement, then please contact Streamlabs’s DMCA Agent with the -following information (please consult your attorney to better understand -your rights and obligations under Section 512(c) of the Copyright Act -and other laws): - -Reasonably sufficient details to enable us to identify the work claimed -to be infringed or, if multiple works are claimed to be infringed, a -representative list of such works (for example: title, author, any -registration or tracking number, URL); Reasonably sufficient detail to -enable us to identify and locate the material that is claimed to be -infringing (for example a link to the page that contains the material); -Your contact information so that we can contact you (for example, your -address, telephone number, email address); A statement that you have a -good faith belief that the use of the material identified in sub-section -ii above is not authorized by the copyright owner, its agent, or the -law; A written statement, under penalty of perjury, that the information -in the notification is accurate and that you are authorized to act on -behalf of the owner of the exclusive right that is alleged to be -infringed. Your physical or electronic signature. Please send this -written notice to our designated agent at the following address: - -Streamlabs 580 Market Street #401 San Francisco CA 94104 Email: -support@streamlabs.com - -Counter-Notification: If material that you have posted to the Websites -has been taken down, you may file a counter-notification that contains -the following details: - -Identification of the material that has been removed or to which access -has been disabled and the location at which the material appeared before -it was removed or disabled; A statement, under penalty of perjury, that -you have a good faith belief that the material was removed or disabled -as a result of mistake or misidentification of the material in question; -Your name, address and telephone number; A statement that you consent to -the jurisdiction of the Federal District Court for judicial district in -which your address is located or, if your address is outside of the USA, -for any judicial district in which Streamlabs, may be found and that you -will accept service of process from the person who submitted a notice in -compliance with the section (c)(1)(C) of the DMCA, as generally -described above; Your physical or electronic signature. Please send this -written notice to our designated agent as follows: - -DMCA Agent General Workings Inc. dba Streamlabs 100 Montgomery Street -Floor 19 San Francisco CA 94104 Email: support@streamlabs.com - -Please note that under Section 512(f) of the Copyright Act, any person -who knowingly materially misrepresents that material or activity is -infringing, or that the material or activity was removed or disabled by -mistake may be subject to liability. Please also be advised that we -enforce a policy of terminating the accounts of repeat infringers. A -repeat infringer includes any user who has made two or more postings for -which we receive a notice of infringement under this DMCA Notice and -Takedown Procedure. - -Streamlabs’s DMCA Agent for Notice of claims of copyright infringement -should be contacted only for the purposes set forth above. ALL OTHER -INQUIRIES DIRECTED TO Streamlabs ’S DMCA AGENT WILL NOT BE ANSWERED. -MISUSE OF THE DMCA CAN SUBJECT YOU TO LIABILITY. - -Disputes - ARBITRATION - -Before bringing a formal legal case, please first try contacting our -Customer Support team. Most disputes can be resolved that way. - -To the extent permitted under applicable law, any and all disputes, -claims or controversies arising out of or relating to this Agreement, -the breach thereof, or any use of the Websites (including all commercial -transactions conducted through the Website) ("Claims"), except for -claims filed in a small claims court that proceed on an individual -(non-class, non-representative) basis, shall be settled by binding -arbitration before a single arbitrator appointed by the American -Arbitration Association ("AAA") in accordance with its then governing -rules and procedures, including the Supplementary Procedures for -Consumer-Related Disputes, where applicable. In agreeing to arbitrate -all Claims, you and Streamlabs waive all rights to a trial by jury in -any action or proceeding involving any Claim. The arbitration shall be -held in San Francisco, California, and judgment on the award rendered by -the arbitrator may be entered by any court having jurisdiction thereof. -This arbitration undertaking is made pursuant to and in connection with -a transaction involving interstate commerce, and shall be governed by -and construed and interpreted in accordance with the Federal Arbitration -Act at 9 U.S.C. Section 1, et seq. This arbitration provision shall -survive termination of this Agreement. Subject to the limitations set -forth below, the arbitrator shall have authority to award legal and -equitable relief available in the courts of the State of California, -provided that: - -The arbitrator shall not have authority to award punitive damages; and -Any and all claims shall be arbitrated on an individual basis only, and -shall not be consolidated or joined with or in any arbitration or other -proceeding involving a Claim of any other party. You and Streamlabs -agree that the arbitrator shall have no authority to arbitrate any Claim -as a class action or in any other form other than on an individual -basis. For any Claims that are not subject to arbitration: (a) the -exclusive jurisdiction and venue for proceedings involving Claims shall -be the courts of competent jurisdiction sitting within San Francisco -County, California (the "Forum"), and the parties hereby waive any -argument that any such court does not have personal jurisdiction or that -the Forum is not appropriate or convenient; (b) you and Streamlabs waive -any and all rights to trial by jury with respect to any Claims. In the -event that either party initiates a proceeding involving any Claim other -than an arbitration in accordance with this Section, or initiates a -proceeding involving a Claim under this Section other than in the Forum, -the other party shall recover all attorneys' fees and expenses -reasonably incurred in enforcing this Agreement to arbitrate and the -Forum to which the parties have herein agreed. NO CLASS ACTIONS. We all -agree that we can only bring a claim against each other on an individual -basis. That means: (a) neither you nor Streamlabs can bring a claim as a -plaintiff or class member in a class action, consolidated action or -representative action; (b) an arbitrator cannot combine more than one -person’s claim into a single case, and cannot preside over any -consolidated, class or representative arbitration proceeding (unless we -both agree to change this); (c) an arbitrator’s decision or award in -one person’s case can only impact the person who brought the claim, -not other Streamlabs users, and cannot be used to decide other disputes -with other users. If a court decides that this subsection on "No Class -Actions" is not enforceable or valid, then the entire section covering -Disputes will be null and void, but, the rest of the terms of these -Terms of Use will still apply. - -Miscellaneous - -These Terms of Use shall be governed by the internal substantive laws of -the State of California, without respect to its conflict of laws -principles. Any claim or dispute between you and Streamlabs that arises -in whole or in part from the Terms of Use, the Websites or any Contest -shall be decided exclusively by a court of competent jurisdiction -located in San Francisco County, California. - -Nothing in the Terms of Use shall create or confer any rights or other -benefits in favor of any third parties except as specifically provided -herein. By participating in any Contest on the Websites, you agree to -indemnify, protect, defend and hold harmless Streamlabs, its parents, -subsidiaries, affiliates and divisions, and their respective directors, -officers, employees, agents and representatives, from and against any -and all third party claims, liabilities, losses, damages, injuries, -demands, actions, causes of action, suits, proceedings, judgments and -expenses, including reasonable attorneys’ fees, court costs and other -legal expenses including, without limitation, those costs incurred at -the trial and appellate levels and in any bankruptcy, reorganization, -insolvency or other similar proceedings, and any other legal expenses -(collectively, "Claims") arising from or connected with your use of the -Websites, any payment methods used, any funding of your account, and/or -your participation in any Contest. The Websites may contain links to -third party websites that are not owned or controlled by Streamlabs. -Streamlabs has no control over, and assumes no responsibility for, the -content, privacy policies, or practices of any third party websites. In -addition, Streamlabs will not and cannot censor or edit the content of -any third-party site. By using the Websites, you expressly relieve -Streamlabs from any and all liability arising from your use of any -third-party website. Accordingly, we encourage you to be aware when you -leave the Websites and to read the terms and conditions and privacy -policy of each other website that you visit. - -Nothing in the Terms of Use shall create or be deemed to create a -partnership, agency, trust arrangement, fiduciary relationship or joint -venture between you and Streamlabs. - -No professional or amateur sports league or any team associated with any -professional or amateur sports league is associated with Streamlabs or -in any way affiliated or associated with the Contests. - -Third-party online publishers that refer users to the Streamlabs website -shall not be responsible or liable for the Streamlabs website or any of -the content, software, or functions made available on, or accessed -through, or sent from, the Streamlabs website. - -If any provision of these Terms of Use is deemed invalid by a court of -competent jurisdiction, the invalidity of such provision shall not -affect the validity of the remaining provisions of these Terms of Use, -which shall remain in full force and effect. - -No waiver of any term of these Terms of Use shall be deemed a further or -continuing waiver of such term or any other term, and Streamlabs' -failure to assert any right or provision under these Terms of Use shall -not constitute a waiver of such right or provision. - -Streamlabs reserves the right to amend these Terms of Use at any time -and without notice, and it is your responsibility to review these Terms -of Use for any changes. If you continue to use the Services after we -change the Terms of Use, you accept all changes. The failure of -Streamlabs to comply with any provision of these Terms of Use due to an -act of God, hurricane, war, fire, riot, earthquake, terrorism, act of -public enemies, actions of governmental authorities outside of the -control of the Company (excepting compliance with applicable codes and -regulations) or other force majeure event will not be considered a -breach of these Terms of Use. - -Notice for California Users: Under California Civil Code Section 1789.3, -California Websites users are entitled to the following specific -consumer rights notice: The Complaint Assistance Unit of the Division of -Consumer Services of the California Department of Consumer Affairs may -be contacted in writing at 400 R Street, Suite 1080, Sacramento, -California, 95814, or by telephone at (916) 445-1254 or (800) 952-5210 - -Streamlabs AND OTHER TRADEMARKS CONTAINED ON THE WEBSITES ARE TRADEMARKS -OR REGISTERED TRADEMARKS OF Streamlabs IN THE UNITED STATES AND/OR OTHER -COUNTRIES. THIRD-PARTY TRADEMARKS, TRADE NAMES, PRODUCT NAMES AND LOGOS -MAY BE THE TRADEMARKS OR REGISTERED TRADEMARKS OF THEIR RESPECTIVE -OWNERS. YOU MAY NOT REMOVE OR ALTER ANY TRADEMARK, TRADE NAMES, PRODUCT -NAMES, LOGO, COPYRIGHT OR OTHER PROPRIETARY NOTICES, LEGENDS, SYMBOLS OR -LABELS ON THE WEBSITES. - ------------------------------------ -III. Privacy Policy ------------------------------------ - -Streamlabs is fully committed to your privacy. We created this Privacy -Policy to help protect your information and assure you that it’s only -being used to provide you with the highest quality of services. We value -your trust, which is why we’re committed to providing exceptional -service in a secure environment. - -THE INFORMATION STREAMLABS COLLECTS - -At Streamlabs, we’re constantly looking for ways to improve our -offerings and develop new features that our users find valuable. In -order to do so, we collect information to help us analyze behavior and -interests so that we can continue to make Streamlabs better. - -As a general visitor to the site, you may browse our site to find more -information about our offerings. You are not required to provide us with -any personally identifiable information as a visitor. However, we do -automatically receive information from your browser or mobile device, -including the name of the website from which you came to came to the -Streamlabs website, as well as which website you’re going to when you -leave. This information also includes the IP address of the -computer/server that you use to access the Internet, your Internet -Service Provide name, web browser type, type of mobile device, computer -operating system, pages accessed, and other similar information. We use -all of this information to look at trends and to help us improve our -offerings. - -As a user, you maybe be required to provide us with personally -identifiable information. We are the sole owners of any information -collected on this site. We only have access to/collect information that -you voluntarily give us during sign up, or that is passed through our -platform as part of the user experience. We may also obtain information, -including personal information, from third parties and other sources, -such as information from the Twitch service through the Twitch API. - -HOW STREAMLABS USES INFORMATION - -We use the information we receive in a variety of ways, the core of -which is to improve Streamlabs. We may also use this information to -maintain our services; to customize our service to meet your needs; to -process transactions and donations; to collect fees or other charges; to -verify your identity and prevent fraudulent transactions; to provide -customer support; and to contact you. - -Unless you ask us not to, we may contact you via email in the future to -tell you about new products or services and other information we believe -you’d find valuable. - -WHEN STREAMLABS SHARES INFORMATION - -Our policy is to maintain the confidentiality of the personally -identifiable information of individuals except in cases when the law -requires disclosure or when we have your permission to do so. -Occasionally, we may share aggregated statistics of user behavior (e.g. -usage patterns, donation trends, user growth, etc.) with our partners -and other interested parties. This information will never identify any -individual personally or contain any personally identifiable -information. - -Streamlabs does not sell, lease, share, rent, or otherwise provide any -personally identifiable information for marketing purposes to any -companies or persons outside of Streamlabs. We may provide your -personally identifiable information to service providers and affiliates -that provide services in conjunction with our offerings, such as payment -processors, fraud protection services, or other parties assisting in -improving Streamlabs. Information is securely transmitted to these -affiliates, and such affiliates will only receive information necessary -to provide their respective services and will be bound by -confidentiality agreements limiting the use of such information. Please -be aware that any personal information that you voluntarily choose to -display in any public location through the use of our platform becomes -publicly available and may be collected and used by others. - -Streamlabs will only disclose personally identifiable information to -government officials and law enforcement agencies when it is required by -law (e.g. in compliance with a subpoena or court order) or if we believe -in good faith that such action is appropriate and necessary to protect -and defend the rights of Streamlabs, or to protect the safety of -Streamlabs users, employees, affiliates, and the general public. - -In the event that Streamlabs or some or all assets related to our -services are acquired by or merged with a third party entity, we reserve -the right to transfer or assign any information we have collected from -users as part of that merger, acquisition, sale, or other change of -control. - -YOUR ACCESS TO AND CONTROL OVER INFORMATION - -If desired, you may decline to share your personal information with -Streamlabs, at which time we will no longer be able to provide you with -a majority of the functionality of our offerings. If you would like to -access, review, correct, update, suppress, or otherwise limit our use of -your personal information, you may contact us at support@streamlabs.com. -Please note that in order to protect your privacy and security, we take -reasonable steps to verify your identity before making any changes to -your personal information. - -LINKS - -The Streamlabs website contains links to other sites that are not under -our direct control. Please note that the Streamlabs Privacy Policy does -not apply to these sites and Streamlabs is not responsible for, nor do -we endorse, the privacy practices or the content of these sites. You -should check the individual privacy policies of these sites to -understand how they will utilize your personal information. - -THIRD-PARTY PROVIDERS AND DO NOT TRACK - -Streamlabs may use third-party Web analytics services on our site, such -as Google Analytics, to analyze how people use Streamlabs. Information -collected by such technologies will be disclosed to or collected by -these services providers, who use this information to evaluate your use -of Streamlabs. You may choose to opt out of their services if you do not -wish to have your information collected by them. - -Do Not Track (DNT) is a privacy preference that users can set in certain -web brosers. DNT is a way for users to tell websites and services that -they do not want certain information about their visits collected. We -currently do not recognize or respond to browser-initiated DNT signals -at this time though, as the Internet industry is currently working -towards accepted standardization and practices around DNT. - -DATA SECURITY - -Streamlabs has strict security measures in place to protect the loss, -misuse, and alteration of information under our control. We use secure -technology, privacy protection controls, and restrictions on employee -access in order to safeguard your information. While we take precautions -to protect sensitive information that’s transmitted online, we also -protect your information offline . Only employees who need the -information to perform a specific job, such as billing or customer -service, are granted access to personally identifiable information. The -computers/serves in which we store personally identifiable information -are kept in a secure environment. - -Please note that while we continually make every effort to implement -safeguards to protect your personal information, the very nature of the -Internet makes it impossible to guarantee the security of transmitted -data. Streamlabs makes no warranties or representations as to the -security and confidentiality of any data you transmit. Any data you -transmit to Streamlabs is at your own risk, and we cannot guarantee that -information may not be accessed, disclosed, altered, or destroyed by any -breach of our physical, technical, or managerial safeguards. - -PRIVACY OF CHILDREN - -If you are under the age of 18, please make sure that you provide your -personally identifiable information only after obtaining parental -consent. If you are under the age of 13, please do not use or access -Streamlabs at any time or in any manner. We do not knowingly collect or -maintain personal information from persons under 13 years of age. If -Streamlabs learns that personal information of persons under 13 years of -age has been collected, we will take appropriate steps to delete this -information. If you are a parent of a child under 13 who has been using -Streamlabs, please contact us at support@streamlabs.com to have that -child’s account remove and information deleted. - -APPLICATION OF PRIVACY POLICY - -For users visiting Streamlabs from the European Economic Area or other -non-US territories, please note that any data that passes through -Streamlabs will be transferred outside the European Economic Area or -those other non-US territories for use by Streamlabs and our affiliates -for the purposes outlined in this Privacy Policy. By providing data to -Streamlabs, you hereby expressly consent to such transfers of your data -to the United States or other countries, except in the case of data -transfers from the European Economic Area or Switzerland, which are -covered under our EU-US and Swiss-US Safe Harbor Certifications detailed -below. For users from outside the US, Switzerland, or the European -Economic Area, pelase note that las in the US may not provide the same -level of information protection as the laws of the user’s country of -residence. - -Streamlabs also adheres to the Safe Harbor Privacy Principles of notice, -choice, onward transfer, security, data integrity, access, and -enforcement. In compliance with such policies, Streamlabs is committed -to addressing and resolving any complaints about your privacy and our -collection or use of your personal information. For all inquiries or -complaints regarding this Privacy Policy, including European Union or -Swiss citizens, please first contact Streamlabs at -support@streamlabs.com. - -HOW STREAMLABS USES COOKIES - -Like many other sites on the Internet, Streamlabs uses cookies—small -text files containing a string of alphanumeric characters. Streamlabs -uses cookies and collects IP addresses and other automatically collected -information in order to better facilitate the services provided to you, -and to collect non-personal aggregate data for marketing and research -purposes. If you accept the cookies used on our site, we may be able to -identify your system by reading the cookie stored on your system, but we -will not be able to identify you unless you’ve entered your personal -information. - -We may also allow third-party companies to serve ads and/or collect -certain anonymous information from you when you visit our website or use -our services. - -CHANGES TO PRIVACY POLICY - -We reserve the right to change, modify, add, or remove portions of this -Privacy Policy at any time. You should review this Privacy Policy -frequently. If we make significant changes to this policy, we may notify -you through a blog post, by email, or by any method we determine at our -discretion. If you feel that we are not abiding by this privacy policy, -you should contact us immediately at support@streamlabs.com. - -CONTACT INFORMATION - -Questions about the Streamlabs Privacy Policy can be sent to -support@streamlabs.com. +N Air利用規約 +このN Air利用規約(以下「本利用規約」といいます)は、株式会社ドワンゴ(以下「当社」といいます)が無償で公開する動画配信用のソフトウェア(以下「N Air」といいます)の利用条件を規定したものです。N Airを利用しようとする人は、N Airを利用する前に、必ず本利用規約の内容を確認してご同意いただく必要があります。利用者が未成年の場合には、法定代理人(親権者等)に本利用規約を確認して頂き、事前に法定代理人(親権者等)の同意を得たうえで本サービスをご利用ください。また、法人がN Airを利用する場合には、法人を代表して同意する権限のある人が本利用規約の内容に同意する必要があります。当社は、利用者(利用者が法人の場合には利用者の役員または従業員を意味します。以下同じ)がN Airを利用したことをもって本利用規約に同意したものとみなします。 + +なお、本利用規約は、当社の任意の判断により、変更されることがあります。当社は、変更後の利用規約が掲示された以降に利用者がN Airを利用したことをもって、変更後の利用条件に利用者が承諾したものとみなします。 + +第1条 (N Airの利用許諾) +1. 当社は、利用者に対し、本利用規約への同意を条件としてN Air を利用することを許諾し、N Airに関するドキュメント(以下「本ドキュメント」といいます)を当社の任意の裁量において利用者に提供します。利用者は、本利用規約及び本ドキュメントに記載された態様、方法に従ってN Airを利用するものとします。 +2. 当社は、以下の事由により、一時的にN Airの利用を停止することがあります。 +(1) 当社によるシステムの保守、点検、修理などを行う場合 +(2) 火災・停電によりサービスの提供ができなくなった場合 +(3) 天変地異などによりサービスの提供ができなくなった場合 +(4) その他、運用上又は技術上、サービス提供の一時的な中断を必要とした場合 + +第2条 (知的財産権等) +1. N Air及び本ドキュメントに関する著作権、商標権、意匠権、特許権、実用新案権、ノウハウ、その他権利の一切(以下「知的財産権等」といいます)は、当社または当社に権利を許諾した第三者に帰属します。 +2. 利用者は、N Air及び本ドキュメントを、本利用規約において明示的に許諾している範囲を超えて利用することはできません。 +3. 前項に違反して、利用者が当社に損害を与えた場合、利用者はこの損害(間接的損害も含みます)を当社に対し賠償するものとします。 + +第3条(禁止事項) +利用者は、N Airの利用にあたり、以下に該当する行為をすることはできません。利用者が以下の項目の一つにでも該当した場合、当社は、利用者に対して何等の催告もなく、N Airの利用を停止することができるものとし、またこれにより、当社に損害が生じた場合、利用者はこの損害(間接的損害も含みます)を当社に対し賠償するものとします。 +(1) 本ドキュメントに記載されてない方法、態様でのN Airの利用 +(2) 本利用規約において明示的に許諾している範囲を超えたN Air及び本ドキュメントの複製、改変、翻訳、第三者への頒布、送信(自動公衆送信、送信可能化を含む)。 +(3) 公序良俗に反する行為(反社会的活動及びその宣伝活動も含む) +(4) 犯罪的行為(コンピュータウィルス・ジャンクメール・スパムメール・チェーンレターその他有害なファイルのアップロードや配布、殺人幇助、未成年者略取、ねずみ講にあたる行為を含む)及び、当該犯罪的行為を助長し又はその実行を暗示する行為 +(5) 当社又は第三者の知的所有権を侵害する行為 +(6) 当社又は第三者の財産・信用・名誉等を毀損する行為及び、プライバシーに関する権利、肖像権その他の権利を侵害する行為 +(7) 故意、過失を問わず、法令、条約に反する行為 +(8) 当社又は第三者に経済的・精神的不利益を与える行為 +(9) 本利用規約の条項に違反する行為 +(10) その他、当社が不適当と判断する行為 + +第4条(免責) +1. 利用者は、N Airの利用を、利用者自身の責任の下で行うものとします。当該利用に関わる一切の危険は利用者のみが負うものであり、当社は一切関与せず一切の責任も負わないことを利用者はここに確認し、同意するものとします。 +2. 当社は、N Air及び本ドキュメントに関し、その確実性、正確性、安全性、有用性、特許権、著作権等の知的財産権を含む第三者権利侵害の有無、及び特定目的への適合性のいずれについても何ら保証するものではありません。 +3. 当社は、N Airに関し、利用開始時点におけるN Airと同等の利用環境を永続的に保証するものではありません。 +4. 利用者は、N Airの利用に起因して発生した一切の直接・間接の損害ないし危険はすべて利用者のみが負うことをここに確認し、当社は一切関与せず一切の責任も負わないものとします。 + +第5条(利用者の責任) +N Airの利用に起因又は関連して利用者に生じた損害、権利侵害、危険、クレーム、請求その他一切の不利益(以下「不利益等」といいます)については、利用者の費用と責任において解決するものとし、当社は一切関与せず一切の責任も負いません。また、利用者によるN Airの利用に起因又は関連して当社に生じた不利益等については、利用者は当社に対し、その費用及び損害賠償金等(当社が支払った弁護士費用を含みます)を支払うものとします。 + +第6条(N Airの変更・終了) +1. N Airの提供は、利用者への事前の通知なくして変更されることがあります。利用者はこれを予め了承するものとし、当該変更に伴い、利用者又は第三者に不利益又は損害が発生したとしても、当社は一切その責任を負わないものとします。 +2. 当社はN Airの提供を、利用者に対する事前の予告なくして停止又は終了することができます。当該停止又は終了に伴い、利用者又は第三者に不利益又は損害が発生したとしても、当社は一切その責任を負わないものとします。 + +第7条(分離性) +本利用規約に定める条項の一部が強行法規への抵触その他の理由により無効とされた場合であっても、当該無効とされた条項以外の他の条項は有効に存続するものとします。この場合、当該無効とされた条項は、当初に意図された経済的目的が可能な限り達成できる有効な条項に当然に置き換えられるものとし、利用者はこれを予め承諾するものとします。 + +第8条(利用者の責任) +本利用規約及び利用者と当社の関係については、日本法を準拠法とし、万一紛争が生じた場合には、東京地方裁判所又は東京簡易裁判所を第一審の専属的管轄裁判所とします。 + +第9条(第三者のソフトウェア等に関する特則) +1. N Airには、当社以外の第三者がライセンスを有するソフトウェアが利用されています。利用者によるN Air利用に際しては、N Airに組み込まれる当該ソフトウェアの利用規約を自らの責任において順守するものとし、利用者によるソフトウェアの利用規約違反行為については、利用者は自らの責任においてこれを解決し、当社に一切の迷惑を及ぼさないものとします。 +2. 前項に加え、N Airには当社以外の第三者が権利を有する特許ライセンス(下記一覧のとおり)が含まれます。当社は、利用者がN Airを当社が運営するサービス「niconico」内での配信目的で利用する場合に限り、当該特許ライセンスの利用について追加費用を支払う必要はないことを利用者に対して保証します。ただし、利用者がN Airを「niconico」以外の配信サービスに利用すること、または本利用規約の内容を改変して第三者にN Airを再配布すること、その他本利用規約において明示的に認められる以外の態様で、当該特許ライセンスを利用することを希望する場合、当該利用等について当社は一切の保証をせず、利用者は各特許ライセンサーと個別に契約のうえ、当該利用にかかる特許ライセンス利用料について、自らの責任において各特許ライセンサーに支払うものとし、当社はこれに一切関与しないものとします。また、当該特許ライセンス利用料の支払い、その他各特許ライセンサーと利用者との間で生じた一切の紛争について、利用者は自らの責任と負担においてこれを解決し、当社に一切の迷惑を及ぼさないものとし、万一当該紛争により当社に損害が生じた場合、利用者は、その一切の損害(合理的な弁護士費用を含む)を当社に対して補償し、当社を免責するものとします。なお、利用者による当該特許ライセンスの利用については、本利用規約に加えて、以下の条項が適用されるとともに、当該条項は本利用規約と一体のものとして利用者を拘束することを利用者は承諾するものとします。 +◆特許ライセンサー一覧: +①MPEG LA, L.L.C.(AVC) +②Via Licensing Corporation(AAC) +◆追加適用条項: MPEG LA, L.L.C.(AVC) +THIS PRODUCT IS LICENSED UNDER THE AVC PATENT PORTFOLIO LICENSE FOR THE PERSONAL AND NONCOMMERCIAL USE OF A CONSUMER TO (i) ENCODE VIDEO IN COMPLIANCE WITH THE AVC STANDARD ("AVC VIDEO") AND/OR (ii) DECODE AVC VIDEO THAT WAS ENCODED BY A CONSUMER ENGAGED IN A PERSONAL AND NON-COMMERCIAL ACTIVITY AND/OR WAS OBTAINED FROM A VIDEO PROVIDER LICENSED TO PROVIDE AVC VIDEO. NO LICENSE IS GRANTED OR SHALL BE IMPLIED FOR ANY OTHER USE. ADDITIONAL INFORMATION MAY BE OBTAINED FROM MPEG LA, L.L.C. SEE HTTP://WWW.MPEGLA.COM + + + +2018年8月8日 制定 diff --git a/README.md b/README.md index 689bb2cbcb8a..c3f594d3b558 100644 --- a/README.md +++ b/README.md @@ -1,189 +1,75 @@ -# Streamlabs OBS +# N Air -[![Build status](https://ci.appveyor.com/api/projects/status/xxn8immagev9o1fd/branch/staging?svg=true)](https://ci.appveyor.com/project/Streamlabs/streamlabs-obs) +Build Status: TBD -Simple, powerful, and efficient live streaming software built on Electron. +N AirはStreamlabs OBSをベースにした、生放送に便利な機能が豊富に組み込まれた高画質配信ソフトです。NLE(Niconico Live Encoder)よりも、さらに便利になって生まれ変わりました。 +![N Air](https://site.nicovideo.jp/nicolive/n-air-app/image/screenshot.png) -![Streamlabs OBS](https://cdn.streamlabs.com/slobs/slobs-chatbox.png) +## 動作条件 +* DirectX 10.1 互換のGPU +* Windows 7 以降(64ビット版) +* メモリ:8GB以上 +* CPU:Core i5第四世代相当 +* インターネット接続環境が必要です。 -This application currently only supports 64-bit Windows. - -## Issues - -Please submit all issues here: - -https://tracker.streamlabs.com - -## Dependencies +## インストール + +## ビルド方法 ### Node.js +npmパッケージをインストールし、さまざまなスクリプトを実行するにはNodeが必要です。 -Node is required for installing npm packages and for running -various scripts. We recommend the current LTS release, 8.x.x: - -https://nodejs.org - +現在のLTSリリース8.x.xを推奨します: ### Yarn +各ノードモジュールの正しいバージョンを使用するためには、yarn パッケージマネージャーを使用する必要があります。 -In order to ensure you are using the correct version of each -node module, you should use the yarn package manager. -Installation instructions can be found here: - -https://yarnpkg.com/en/docs/install +インストール方法については、こちらを参照してください: -### Visual C++ Compiler - -Yarn will install and compile a number of native extensions from -source. For yarn to do this, it needs a Visual C++ compiler. The -most reliable way to get this is to install: - -Visual Studio Community 2015 with Update 3 - -Make sure you do a custom installation and select Visual C++ from -the languages section. +### Visual C++コンパイラ +yarnは、ソースから多くのネイティブ拡張をインストールしてコンパイルします。このためには、Visual C ++コンパイラが必要です:[Visual Studio Community 2017](https://visualstudio.microsoft.com/ja/downloads/) +※カスタムインストールにて、ワークロード内の「C++によるデスクトップ開発」を選択してインストールしてください。 ### CMake +N Airのネイティブアドオンの中には、コンパイルにCMakeが必要なものがあります。こちらからダウンロードできます: -Some of our native addons require CMake for compilation. You can -download it here: - -https://cmake.org/download/ - -Make sure to add CMake to your path. You may have to restart your -machine before CMake is available. - +※パスにCMakeを追加してください。 CMakeを利用可能な状態にするにはマシンを再起動する必要があります。 ### Python 2.7 +Node-gypでは、ネイティブアドオンをインストールするためにパスにPython 2.7が必要です。 -Node-gyp requires python 2.7 available in your path to install some -native addons. You can download it here: +こちらからダウンロードできます: -https://www.python.org/ - -## Installation - -First, make sure you have initialized git submodules: - -``` -git submodule update --init --recursive -``` - -Install all node modules via yarn: +### インストール +1.yarnを介してすべての node モジュールをインストールする。 ``` yarn install ``` -Install OBS plugins: - -``` -yarn install-plugins -``` - -Then, compile assets with webpack: +2.webpackを使用してアセットをコンパイルする。 ``` yarn compile ``` - -## Starting - -If you are using Visual Studio Code, you can start the app -using the built in debugger (default F5). - -Otherwise, you can run the app with: - +### 実行 +Visual Studioコードを使用している場合は、組み込みのデバッガを使用してアプリケーションを実行できます(デフォルトのF5ボタン)。 +それ以外の場合は以下のコマンドにより実行可能です。 ``` yarn start ``` -## Environment Variables - -These variables can be used in development to force certain behavior. - -`SLOBS_FORCE_AUTO_UPDATE`: Force the auto-updater to run in development. Normally -this would only run in production. - -`SLOBS_CACHE_DIR`: Force a different location for the user data cache directory. - -`SLOBS_DISABLE_MAIN_LOGGING`: Disable javascript logging in the main process. - -`SLOBS_REPORT_TO_SENTRY`: Report errors to sentry in the dev environment - -## Packaging / Distributing +## ライセンス +N Air本体はGPLv3で公開しています。 -Currently only Windows x64 packaging is supported. +N Airには外部の多くのオープンソースを利用しております。それらに関しては各パッケージのライセンス条項を御確認ください。 -### Prerequesites +## Special Thanks +This Open Source Program is forked from Streamlabs OBS, a software originally created by Streamlabs. -The packager will use whatever version of node-obs you have -checked out in the slobs directory (at `./node-obs`). You -should make sure that node-obs is compiled correctly with 32-bit -and 64-bit plugins, and works properly with the currently checked -out version of `streamlabs-obs`. If you're releasing, that should -probably be the `master` branch. You should probably try running -the app from your dev environment to make sure everything is -working before you start the release process. - -### Packaging - -Make sure the app is not running in your dev environment -before you start the packaging process. - -You can package the app by running: - -``` -yarn package -``` - -This will package a distributable installer `.exe` to the `dist/` -directory. There is also an unpacked version in `dist/win-unpacked`. - -### Releasing - -If you want to release a new version to the update server, you will need -the following variables in your environment: - -``` -AWS_ACCESS_KEY_ID -AWS_SECRET_ACCESS_KEY -CSC_LINK -CSC_KEY_PASSWORD -SENTRY_AUTH_TOKEN -``` - -Only authorized team members have permission to release new versions. -If you need help setting up your environment for release, you can ask -someone on the team for help. - -If your environment is properly set up, you can use the automated -release script to push out a new release. - -Simply run: - -``` -yarn release -``` +## バグ報告 +- フィードバックへのリンク + - +- issue + - -and follow the instructions. - -### Legacy Release Checklist - -NOTE: This checklist is deprecated, and is only kept here in case -the automated deploy script isn't working and we need to do a -manual deploy. - -- [ ] Merge `staging` into `master` - DO NOT "Squash & Merge", just do a regular merge -- [ ] Check out `master` -- [ ] If submodules are out of date `git submodule update --init --recursive` -- [ ] Remove node modules `rm -rf node_modules` -- [ ] Install fresh packages `yarn install` -- [ ] Install node-obs with latest plugins `yarn install-node-obs` -- [ ] Compile assets `yarn compile` -- [ ] Run the test suite `yarn test` -- [ ] Change the version in `package.json` -- [ ] Commit and push -- [ ] Tag the repo `git tag 'v0.0.11'` and `git push --tags` -- [ ] Package the app `yarn package` -- [ ] Run the packaged version in `dist/win-unpacked` and make sure it runs -- [ ] Deploy the new version `yarn deploy` -- [ ] Merge master back into staging +## ヘルプページへのリンク + diff --git a/app/app.less b/app/app.less index b7ec5aacc7f0..04bf55bc14e1 100644 --- a/app/app.less +++ b/app/app.less @@ -2,6 +2,7 @@ body { color: @navy; + font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Kaku Gothic ProN", "Meiryo", "メイリオ", sans-serif; } :not(input):not(textarea), @@ -12,12 +13,16 @@ body { } .main { - background: @white; + background: @bg-primary; + color: @text-primary; } a { .transition; text-decoration: underline; + &:hover { + color: @white; + } } // Layout @@ -31,23 +36,20 @@ a { // Type h3 { - font-family: 'Roboto'; font-size: 14px; + color: @text-primary; .semibold; } h4 { - font-family: 'Roboto'; - text-transform: uppercase; font-size: 13px; .letter-spacing; .semibold; margin-bottom: 20px; - color: @day-title; } .label--essential { - background: @purple; + background: @accent; .radius; .semibold; text-transform: uppercase; @@ -61,20 +63,19 @@ h4 { .link { .semibold; - color: @grey; + color: @text-secondary; .transition; text-decoration: none; display: flex; align-items: center; &:hover { - color: @navy; + color: @text-primary; } - .fa, i { - margin-right: 6px; - font-size: 15px; + margin-right: 4px; + font-size: 14px; } } @@ -149,7 +150,7 @@ h4 { background: transparent; border: none; padding: 0 32px 0 8px; - color: @grey; + color: @text-primary; .radius; .transition; @@ -160,7 +161,7 @@ h4 { } } - .fa-search { + .icon-search { position: absolute; top: 8px; right: 8px; @@ -194,14 +195,13 @@ h4 { .slide-open__menu { position: absolute; - background: @day-primary; + background-color: @bg-secondary; right: calc(~'100% + 20px'); bottom: -10px; - padding: 0px 12px; + padding: 0 12px; display: flex; z-index: 10; .radius; - .border; .shadow; } @@ -218,10 +218,9 @@ h4 { font-size: 12px; .semibold; letter-spacing: .7px; - color: @grey; + color: @text-primary; .transition; - .fa, i { margin-right: 4px; font-size: 15px; @@ -230,28 +229,22 @@ h4 { &.active, &:hover { - border-color: @navy; - color: @navy; - - .fa, + border-color: @white; + color: @white; i { - color: @navy; + color: @white; } } } -// TODO: eventuall use LESS variables from twitchalerts -.bgColor-teal { - background-color: @teal; -} - -// TODO: add "disable" and "enable" styles for form controls to styleguide .input { &.disabled { - opacity: 0.5; + opacity: .5; &.checkbox input:checked~label, + &.checkbox input~label { + color: @white; &:before { border-color: gray; background: transparent; @@ -265,10 +258,12 @@ h4 { .checkbox { label { text-transform: none; + background: transparent; + border-color: @accent-hover; } } -// Make select boxes look similar to input boxes + select { .radius; height: 36px; @@ -305,7 +300,7 @@ th { } th { - color: @grey; + color: @text-primary; text-transform: uppercase; .semibold; letter-spacing: 1.5px; @@ -320,15 +315,16 @@ th { } ::-webkit-scrollbar-track { - background: @day-border; + background: @accent-dark; border-radius: 0 3px 3px 0; } ::-webkit-scrollbar-thumb { - background-color: @white; - border: 2px solid @day-border; - border-right: 1px solid @day-border; + background-color: @accent-light; + border: 2px solid @border; + border-right: 1px solid @border; border-radius: 10px; + border-color: @accent-dark; } // Vue transitions @@ -342,85 +338,3 @@ th { transform: translateX(20px); opacity: 0; } - -// Night theme rules -.night-theme { - &.main { - background: @night-primary; - color: @night-text; - } - - a { - &:hover { - color: @white; - } - } - - .border { - border: 1px solid transparent; - } - - h3 { - color: @grey; - } - - h4 { - color: @white; - } - - .checkbox { - input:checked~label { - color: @white; - } - - label { - &:before { - background: transparent; - border-color: @teal-light-opac; - } - } - } - - .link { - &:hover { - color: @white; - } - } - - .slide-open__menu { - background-color: @night-secondary; - border-color: @night-secondary; - .night-shadow; - } - - .slide-open__close { - &:hover { - .fa, - i { - color: @white; - } - } - } - - .tab-button{ - &.active, - &:hover { - color: @white; - border-bottom-color: @white; - - .fa, - i { - color: @white; - } - } - } - - ::-webkit-scrollbar-track { - background: @night-accent-dark; - } - - ::-webkit-scrollbar-thumb { - background-color: @night-accent-light; - border-color: @night-accent-dark; - } -} \ No newline at end of file diff --git a/app/app.ts b/app/app.ts index 9130905b55af..df56b535e537 100644 --- a/app/app.ts +++ b/app/app.ts @@ -20,37 +20,38 @@ import RavenVue from 'raven-js/plugins/vue'; import RavenConsole from 'raven-js/plugins/console'; import VTooltip from 'v-tooltip'; import VueI18n from 'vue-i18n'; +import moment from 'moment'; const { ipcRenderer, remote } = electron; -const slobsVersion = remote.process.env.SLOBS_VERSION; +const nAirVersion = remote.process.env.NAIR_VERSION; const isProduction = process.env.NODE_ENV === 'production'; // This is the development DSN -let sentryDsn = 'https://8f444a81edd446b69ce75421d5e91d4d@sentry.io/252950'; +const sentryDsn = 'https://35a02d8ebec14fd3aadc9d95894fabcf@sentry.io/1246812'; if (isProduction) { // This is the production DSN - sentryDsn = 'https://6971fa187bb64f58ab29ac514aa0eb3d@sentry.io/251674'; + // sentryDsn = 'https://35a02d8ebec14fd3aadc9d95894fabcf@sentry.io/1246812'; electron.crashReporter.start({ - productName: 'streamlabs-obs', - companyName: 'streamlabs', + productName: 'n-air-app', + companyName: 'n-air-app', submitURL: - 'https://streamlabs.sp.backtrace.io:6098/post?' + + 'https://n-air-app.sp.backtrace.io:8443/post?' + 'format=minidump&' + - 'token=e3f92ff3be69381afe2718f94c56da4644567935cc52dec601cf82b3f52a06ce', + 'token=66abc2eda8a8ead580b825dd034d9b4f9da4d54eeb312bf8ce713571e1b1d35f', extra: { - version: slobsVersion, + version: nAirVersion, processType: 'renderer' } }); } -if ((isProduction || process.env.SLOBS_REPORT_TO_SENTRY) && !electron.remote.process.env.SLOBS_IPC) { +if ((isProduction || process.env.NAIR_REPORT_TO_SENTRY) && !electron.remote.process.env.NAIR_IPC) { Raven.config(sentryDsn, { - release: slobsVersion, + release: nAirVersion, dataCallback: data => { // Because our URLs are local files and not publicly // accessible URLs, we simply truncate and send only @@ -118,11 +119,18 @@ document.addEventListener('DOMContentLoaded', () => { locale: i18nService.state.locale, fallbackLocale: i18nService.getFallbackLocale(), messages: i18nService.getLoadedDictionaries(), + missing: ((locale: VueI18n.Locale, key: VueI18n.Path, vm: Vue, values: any[]) => { + return (values[0] && values[0].fallback) || key; + // return key + (values[0] && values[0].fallback ? ': ' + values[0].fallback : ''); + }) as any, // 型定義と実装が異なっている silentTranslationWarn: true }); I18nService.setVuei18nInstance(i18n); + const momentLocale = i18nService.state.locale.split('-')[0]; + moment.locale(momentLocale); + const vm = new Vue({ el: '#app', i18n, diff --git a/app/components/ApiSettings.vue b/app/components/ApiSettings.vue index d6ae46cff0a4..3fee39db14c1 100644 --- a/app/components/ApiSettings.vue +++ b/app/components/ApiSettings.vue @@ -19,6 +19,7 @@ diff --git a/app/components/ApiSettings.vue.ts b/app/components/ApiSettings.vue.ts index 182a4d6827ec..da2524713f6c 100644 --- a/app/components/ApiSettings.vue.ts +++ b/app/components/ApiSettings.vue.ts @@ -30,10 +30,6 @@ export default class ApiSettings extends Vue { }; } - generateToken() { - this.tcpServerService.generateToken(); - } - destroyed() { this.tcpServerService.listen(); } @@ -46,7 +42,7 @@ export default class ApiSettings extends Vue { save(settingsData: ISettingsSubCategory[]) { - const settings: Partial = {} + const settings: Partial = {}; settingsData.forEach(subCategory => { subCategory.parameters.forEach(parameter => { if (!settings[subCategory.codeSubCategory]) settings[subCategory.codeSubCategory] = {}; diff --git a/app/components/Chat.vue b/app/components/Chat.vue deleted file mode 100644 index 5764cc08794f..000000000000 --- a/app/components/Chat.vue +++ /dev/null @@ -1,20 +0,0 @@ - - - - - diff --git a/app/components/Chat.vue.ts b/app/components/Chat.vue.ts deleted file mode 100644 index ce48f85ab154..000000000000 --- a/app/components/Chat.vue.ts +++ /dev/null @@ -1,120 +0,0 @@ -import Vue from 'vue'; -import { Subscription } from 'rxjs/Subscription'; -import { Component } from 'vue-property-decorator'; -import { UserService } from 'services/user'; -import { Inject } from 'util/injector'; -import { getPlatformService } from 'services/platforms'; -import { CustomizationService } from 'services/customization'; -import url from 'url'; -import electron from 'electron'; -import { ICustomizationSettings } from 'services/customization/customization-api'; -import { YoutubeService } from 'services/platforms/youtube'; - -@Component({}) -export default class Chat extends Vue { - @Inject() userService: UserService; - @Inject() customizationService: CustomizationService; - - chatUrl: string = ''; - - $refs: { - chat: Electron.WebviewTag; - }; - - private settingsSubscr: Subscription = null; - - mounted() { - const platform = this.userService.platform.type; - const service = getPlatformService(platform); - const nightMode = this.customizationService.nightMode ? 'night' : 'day'; - const webview = this.$refs.chat; - const settings = this.customizationService.getSettings(); - - if (service instanceof YoutubeService) { - service.getChatUrl(nightMode).then(chatUrl => { - this.chatUrl = 'https://youtube.com/signin'; - - webview.addEventListener('did-navigate', () => { - this.chatUrl = chatUrl; - }); - }); - } else { - service.getChatUrl(nightMode).then(chatUrl => this.chatUrl = chatUrl); - } - - - webview.addEventListener('new-window', e => { - const protocol = url.parse(e.url).protocol; - - if (protocol === 'http:' || protocol === 'https:') { - electron.remote.shell.openExternal(e.url); - } - }); - - webview.addEventListener('dom-ready', () => { - webview.setZoomFactor(settings.chatZoomFactor); - - if (settings.enableBTTVEmotes && this.isTwitch) { - webview.executeJavaScript(` - localStorage.setItem('bttv_clickTwitchEmotes', true); - localStorage.setItem('bttv_darkenedMode', ${ settings.nightMode ? 'true' : 'false' }); - - var bttvscript = document.createElement('script'); - bttvscript.setAttribute('src','https://cdn.betterttv.net/betterttv.js'); - document.head.appendChild(bttvscript); - - function loadLazyEmotes() { - var els = document.getElementsByClassName('lazy-emote'); - - Array.prototype.forEach.call(els, el => { - const src = el.getAttribute('data-src'); - if (el.src !== 'https:' + src) el.src = src; - }); - - setTimeout(loadLazyEmotes, 1000); - } - - loadLazyEmotes(); - `, true); - } - if (settings.enableFFZEmotes && this.isTwitch) { - webview.executeJavaScript(` - var ffzscript1 = document.createElement('script'); - ffzscript1.setAttribute('src','https://cdn.frankerfacez.com/script/script.min.js'); - document.head.appendChild(ffzscript1); - `, true); - } - }); - - - this.settingsSubscr = this.customizationService.settingsChanged.subscribe( - (changedSettings) => this.onSettingsChangedHandler(changedSettings) - ); - } - - destroyed() { - this.settingsSubscr.unsubscribe(); - } - - get isTwitch() { - return this.userService.platform.type === 'twitch'; - } - - refresh() { - this.$refs.chat.loadURL(this.chatUrl); - } - - private onSettingsChangedHandler(changedSettings: Partial) { - if (changedSettings.chatZoomFactor) { - this.$refs.chat.setZoomFactor(changedSettings.chatZoomFactor); - } - - if (changedSettings.enableBTTVEmotes !== void 0) { - this.refresh(); - } - if (changedSettings.enableFFZEmotes !== void 0) { - this.refresh(); - } - } - -} diff --git a/app/components/CustomLoader.vue b/app/components/CustomLoader.vue index 4342d0aeadfa..3779b3d23d31 100644 --- a/app/components/CustomLoader.vue +++ b/app/components/CustomLoader.vue @@ -1,63 +1,16 @@ @@ -66,12 +19,6 @@ diff --git a/app/components/EditableSceneCollection.vue b/app/components/EditableSceneCollection.vue index 2b2dd526034e..09d491518d84 100644 --- a/app/components/EditableSceneCollection.vue +++ b/app/components/EditableSceneCollection.vue @@ -8,7 +8,7 @@ type="text" @keypress="handleKeypress" v-model="editableName" /> - +
@@ -18,20 +18,20 @@ - Active + {{ $t('scenes.activeSceneCollection') }} - Updated {{ modified }} + {{ $t('scenes.sceneCollectionModified', { when: modified }) }} - {{ $t('Rename') }} + {{ $t('common.rename') }} - {{ $t('Duplicate') }} + {{ $t('common.duplicate') }} - + - {{ $t('Delete') }} + {{ $t('common.delete') }}
@@ -44,6 +44,7 @@ .editable-scene-collection { height: 35px; padding: 5px; + .radius; font-size: 14px; cursor: pointer; @@ -53,7 +54,7 @@ } &:hover { - background: @day-hover; + background: @hover; .editable-scene-collection--action { display: inline; @@ -63,7 +64,7 @@ .editable-scene-collection--active { font-size: 12px; - color: @teal; + color: @accent; } .editable-scene-collection--action { @@ -76,6 +77,7 @@ .editable-scene-collection--name { max-width: 230px; + color: @white; >div { white-space: nowrap; @@ -86,6 +88,7 @@ input { font-size: 14px; width: 250px; + background: transparent; } } @@ -93,19 +96,17 @@ font-size: 12px; } -.night-theme { - .editable-scene-collection { - &:hover { - background-color: @night-hover; - } - } - - .editable-scene-collection--name { - color: @white; +.icon-spin { + animation: icon-spin 2s infinite linear; +} - input { - background: transparent; - } +@keyframes icon-spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); } } + diff --git a/app/components/EditableSceneCollection.vue.ts b/app/components/EditableSceneCollection.vue.ts index d840131cf319..3351e5419d0c 100644 --- a/app/components/EditableSceneCollection.vue.ts +++ b/app/components/EditableSceneCollection.vue.ts @@ -1,3 +1,4 @@ +import electron from 'electron'; import Vue from 'vue'; import { Component, Prop, Watch } from 'vue-property-decorator'; import { SceneCollectionsService } from 'services/scene-collections'; @@ -80,9 +81,20 @@ export default class EditableSceneCollection extends Vue { } remove() { - if (!confirm($t('Are you sure you want to remove %{collectionName}?', { collectionName: this.collection.name }))) - return; - this.sceneCollectionsService.delete(this.collectionId); + electron.remote.dialog.showMessageBox( + electron.remote.getCurrentWindow(), + { + type: 'warning', + buttons: [$t('common.cancel'), $t('common.ok')], + title: $t('scenes.removeSceneCollectionConfirmTitle'), + message: $t('scenes.removeSceneCollectionConfirm', { collectionName: this.collection.name }), + noLink: true, + }, + ok => { + if (!ok) return; + this.sceneCollectionsService.delete(this.collectionId); + } + ); } } diff --git a/app/components/ExtraSettings.vue b/app/components/ExtraSettings.vue index 34669a6438f1..c9de7507f5b4 100644 --- a/app/components/ExtraSettings.vue +++ b/app/components/ExtraSettings.vue @@ -1,33 +1,16 @@ diff --git a/app/components/ExtraSettings.vue.ts b/app/components/ExtraSettings.vue.ts index 21ea6294c4c8..a0979af2a7b5 100644 --- a/app/components/ExtraSettings.vue.ts +++ b/app/components/ExtraSettings.vue.ts @@ -1,44 +1,30 @@ import Vue from 'vue'; import electron from 'electron'; import { Component } from 'vue-property-decorator'; -import { CacheUploaderService } from 'services/cache-uploader'; import { Inject } from 'util/injector'; import BoolInput from 'components/shared/forms/BoolInput.vue'; import { CustomizationService } from 'services/customization'; import { IFormInput } from 'components/shared/forms/Input'; -import { StreamlabelsService } from 'services/streamlabels'; import { OnboardingService } from 'services/onboarding'; import { WindowsService } from 'services/windows'; import { UserService } from 'services/user'; import { StreamingService } from 'services/streaming'; +import { AppService } from 'services/app'; import { $t } from 'services/i18n'; @Component({ components: { BoolInput } }) export default class ExtraSettings extends Vue { - @Inject() cacheUploaderService: CacheUploaderService; @Inject() customizationService: CustomizationService; - @Inject() streamlabelsService: StreamlabelsService; @Inject() onboardingService: OnboardingService; @Inject() windowsService: WindowsService; @Inject() userService: UserService; @Inject() streamingService: StreamingService; + @Inject() appService: AppService; cacheUploading = false; - get streamInfoUpdateModel(): IFormInput { - return { - name: 'stream_info_udpate', - description: $t('Confirm stream title and game before going live'), - value: this.customizationService.state.updateStreamInfoOnLive - }; - } - - setStreamInfoUpdate(model: IFormInput) { - this.customizationService.setUpdateStreamInfoOnLive(model.value); - } - showCacheDir() { electron.remote.shell.showItemInFolder( electron.remote.app.getPath('userData') @@ -48,46 +34,10 @@ export default class ExtraSettings extends Vue { deleteCacheDir() { if ( confirm( - $t('WARNING! You will lose all scenes, sources, and settings. This cannot be undone!') + $t('settings.clearCacheConfirm') ) ) { - electron.remote.app.relaunch({ args: ['--clearCacheDir'] }); - electron.remote.app.quit(); + this.appService.relaunch({ clearCacheDir: true }); } } - - uploadCacheDir() { - this.cacheUploading = true; - this.cacheUploaderService.uploadCache().then(file => { - electron.remote.clipboard.writeText(file); - alert( - $t('Your cache directory has been successfully uploaded. The file name %{file} has been copied to your clipboard.', { file }) - ); - this.cacheUploading = false; - }); - } - - restartStreamlabelsSession() { - this.streamlabelsService.restartSession().then(result => { - if (result) alert($t('Streamlabels session has been succesfully restarted!')); - }); - } - - runAutoOptimizer() { - this.onboardingService.start({ isOptimize: true }); - this.windowsService.closeChildWindow(); - } - - get isTwitch() { - return ( - this.userService.isLoggedIn() && - this.userService.platform.type === 'twitch' - ); - } - - get isRecordingOrStreaming() { - return ( - this.streamingService.isStreaming || this.streamingService.isRecording - ); - } } diff --git a/app/components/GlobalSyncStatus.vue b/app/components/GlobalSyncStatus.vue deleted file mode 100644 index 92dfa17bdc4b..000000000000 --- a/app/components/GlobalSyncStatus.vue +++ /dev/null @@ -1,28 +0,0 @@ - - - - - diff --git a/app/components/GlobalSyncStatus.vue.ts b/app/components/GlobalSyncStatus.vue.ts deleted file mode 100644 index 7edfc721a8c0..000000000000 --- a/app/components/GlobalSyncStatus.vue.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Component } from 'vue-property-decorator'; -import Vue from 'vue'; -import { Inject } from 'util/injector'; -import { MediaBackupService, EGlobalSyncStatus } from 'services/media-backup'; -import { $t } from 'services/i18n'; - -@Component({}) -export default class GlobalSyncStatus extends Vue { - @Inject() mediaBackupService: MediaBackupService; - - get syncIcon() { - const status = this.mediaBackupService.globalSyncStatus; - - return { - 'icon-cloud-backup-2': status === EGlobalSyncStatus.Synced, - 'fa-refresh': status === EGlobalSyncStatus.Syncing, - 'fa-spin': status === EGlobalSyncStatus.Syncing - }; - } - - get syncStatusTooltip() { - if (this.mediaBackupService.globalSyncStatus === EGlobalSyncStatus.Synced) { - return $t('Cloud Backup: All media and sources are backed up in the cloud'); - } - - return $t('Cloud Backup: Your media and sources are being synced with the cloud'); - } -} diff --git a/app/components/HotkeyGroup.vue b/app/components/HotkeyGroup.vue index fcb48b0bae3a..bed886efb45f 100644 --- a/app/components/HotkeyGroup.vue +++ b/app/components/HotkeyGroup.vue @@ -6,10 +6,10 @@ @click="collapsed = !collapsed"> + class="icon-plus"/> + class="icon-minus"/> {{ title }} diff --git a/app/components/LanguageSettings.vue.ts b/app/components/LanguageSettings.vue.ts index fd9cdb45f51e..f3b63f1f39b9 100644 --- a/app/components/LanguageSettings.vue.ts +++ b/app/components/LanguageSettings.vue.ts @@ -19,9 +19,11 @@ export default class LanguageSettings extends Vue { electron.remote.getCurrentWindow(), { type: 'question', - buttons: [$t('Yes'), $t('No')], - title: $t('Confirm'), - message: $t('This action will restart the application. Continue?') + buttons: [$t('common.yes'), $t('common.no')], + title: $t('common.confirm'), + message: $t('settings.restartConfirm'), + noLink: true, + cancelId: 1, }); if (choice !== 0) return; diff --git a/app/components/LiveDock.vue b/app/components/LiveDock.vue deleted file mode 100644 index 3e5a20d0615d..000000000000 --- a/app/components/LiveDock.vue +++ /dev/null @@ -1,237 +0,0 @@ - - - - - diff --git a/app/components/LiveDock.vue.ts b/app/components/LiveDock.vue.ts deleted file mode 100644 index f3c185ceb30e..000000000000 --- a/app/components/LiveDock.vue.ts +++ /dev/null @@ -1,156 +0,0 @@ -import Vue from 'vue'; -import { Component, Prop, Watch } from 'vue-property-decorator'; -import Chat from './Chat.vue'; -import { StreamingService, EStreamingState } from '../services/streaming'; -import { Inject } from '../util/injector'; -import { StreamInfoService } from '../services/stream-info'; -import { UserService } from '../services/user'; -import { CustomizationService } from 'services/customization'; -import Slider from './shared/Slider.vue'; -import electron from 'electron'; -import { getPlatformService } from 'services/platforms'; -import { YoutubeService } from 'services/platforms/youtube'; -import { $t } from 'services/i18n'; - -@Component({ - components: { - Chat, - Slider - } -}) -export default class LiveDock extends Vue { - @Inject() streamingService: StreamingService; - @Inject() streamInfoService: StreamInfoService; - @Inject() userService: UserService; - @Inject() customizationService: CustomizationService; - - @Prop({ default: false }) - onLeft: boolean; - - elapsedStreamTime = ''; - elapsedInterval: number; - - $refs: { - chat: Chat; - }; - - viewStreamTooltip = $t('Go to Youtube to view your live stream'); - editStreamInfoTooltip = $t('Edit your stream title and description'); - controlRoomTooltip = $t('Go to Youtube Live Dashboard to control your stream'); - - mounted() { - this.elapsedInterval = window.setInterval(() => { - if (this.streamingStatus === EStreamingState.Live) { - this.elapsedStreamTime = this.getElapsedStreamTime(); - } else { - this.elapsedStreamTime = ''; - } - }, 100); - } - - beforeDestroy() { - clearInterval(this.elapsedInterval); - } - - get streamingStatus() { - return this.streamingService.state.streamingStatus; - } - - @Watch('streamingStatus') - onStreamingStatusChange() { - if (this.streamingStatus === EStreamingState.Starting) { - this.expand(); - } - } - - getElapsedStreamTime() { - return this.streamingService.formattedDurationInCurrentStreamingState; - } - - get collapsed() { - return this.customizationService.state.livedockCollapsed; - } - - collapse() { - this.customizationService.setLiveDockCollapsed(true); - } - - expand() { - this.customizationService.setLiveDockCollapsed(false); - } - - get isStreaming() { - return this.streamingService.isStreaming; - } - - get liveText() { - if (this.streamingStatus === EStreamingState.Live) return 'LIVE'; - if (this.streamingStatus === EStreamingState.Starting) return 'STARTING'; - if (this.streamingStatus === EStreamingState.Ending) return 'ENDING'; - if (this.streamingStatus === EStreamingState.Reconnecting) - return 'RECONNECTING'; - return 'OFFLINE'; - } - - get viewerCount() { - if (this.hideViewerCount) { - return '?'; - } - - return this.streamInfoService.state.viewerCount.toString(); - } - - showEditStreamInfo() { - this.streamingService.showEditStreamInfo(); - } - - openYoutubeStreamUrl() { - const platform = this.userService.platform.type; - const service = getPlatformService(platform); - const nightMode = this.customizationService.nightMode ? 'night' : 'day'; - const youtubeDomain = - nightMode === 'day' - ? 'https://youtube.com' - : 'https://gaming.youtube.com'; - if (service instanceof YoutubeService) { - const url = `${youtubeDomain}/channel/${service.youtubeId}/live`; - electron.remote.shell.openExternal(url); - } - } - - openYoutubeControlRoom() { - electron.remote.shell.openExternal( - 'https://www.youtube.com/live_dashboard' - ); - } - - get isTwitch() { - return this.userService.platform.type === 'twitch'; - } - - get isMixer() { - return this.userService.platform.type === 'mixer'; - } - - get isYoutube() { - return this.userService.platform.type === 'youtube'; - } - - get hideViewerCount() { - return this.customizationService.state.hideViewerCount; - } - - get liveDockSize() { - return this.customizationService.state.livedockSize; - } - - toggleViewerCount() { - this.customizationService.setHiddenViewerCount( - !this.customizationService.state.hideViewerCount - ); - } - - refreshChat() { - this.$refs.chat.refresh(); - } -} diff --git a/app/components/Login.vue b/app/components/Login.vue index 5a5debfa45dd..ec6723a0e282 100644 --- a/app/components/Login.vue +++ b/app/components/Login.vue @@ -1,14 +1,20 @@