danmu-tui 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +373 -0
- package/README.md +339 -0
- package/THIRD_PARTY_NOTICES.md +27 -0
- package/bin/danmu.cjs +43 -0
- package/package.json +39 -0
- package/vendor/darwin-arm64/danmu +0 -0
- package/vendor/darwin-x64/danmu +0 -0
- package/vendor/linux-arm64/danmu +0 -0
- package/vendor/linux-x64/danmu +0 -0
- package/vendor/win32-x64/danmu.exe +0 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
Mozilla Public License Version 2.0
|
|
2
|
+
==================================
|
|
3
|
+
|
|
4
|
+
1. Definitions
|
|
5
|
+
--------------
|
|
6
|
+
|
|
7
|
+
1.1. "Contributor"
|
|
8
|
+
means each individual or legal entity that creates, contributes to
|
|
9
|
+
the creation of, or owns Covered Software.
|
|
10
|
+
|
|
11
|
+
1.2. "Contributor Version"
|
|
12
|
+
means the combination of the Contributions of others (if any) used
|
|
13
|
+
by a Contributor and that particular Contributor's Contribution.
|
|
14
|
+
|
|
15
|
+
1.3. "Contribution"
|
|
16
|
+
means Covered Software of a particular Contributor.
|
|
17
|
+
|
|
18
|
+
1.4. "Covered Software"
|
|
19
|
+
means Source Code Form to which the initial Contributor has attached
|
|
20
|
+
the notice in Exhibit A, the Executable Form of such Source Code
|
|
21
|
+
Form, and Modifications of such Source Code Form, in each case
|
|
22
|
+
including portions thereof.
|
|
23
|
+
|
|
24
|
+
1.5. "Incompatible With Secondary Licenses"
|
|
25
|
+
means
|
|
26
|
+
|
|
27
|
+
(a) that the initial Contributor has attached the notice described
|
|
28
|
+
in Exhibit B to the Covered Software; or
|
|
29
|
+
|
|
30
|
+
(b) that the Covered Software was made available under the terms of
|
|
31
|
+
version 1.1 or earlier of the License, but not also under the
|
|
32
|
+
terms of a Secondary License.
|
|
33
|
+
|
|
34
|
+
1.6. "Executable Form"
|
|
35
|
+
means any form of the work other than Source Code Form.
|
|
36
|
+
|
|
37
|
+
1.7. "Larger Work"
|
|
38
|
+
means a work that combines Covered Software with other material, in
|
|
39
|
+
a separate file or files, that is not Covered Software.
|
|
40
|
+
|
|
41
|
+
1.8. "License"
|
|
42
|
+
means this document.
|
|
43
|
+
|
|
44
|
+
1.9. "Licensable"
|
|
45
|
+
means having the right to grant, to the maximum extent possible,
|
|
46
|
+
whether at the time of the initial grant or subsequently, any and
|
|
47
|
+
all of the rights conveyed by this License.
|
|
48
|
+
|
|
49
|
+
1.10. "Modifications"
|
|
50
|
+
means any of the following:
|
|
51
|
+
|
|
52
|
+
(a) any file in Source Code Form that results from an addition to,
|
|
53
|
+
deletion from, or modification of the contents of Covered
|
|
54
|
+
Software; or
|
|
55
|
+
|
|
56
|
+
(b) any new file in Source Code Form that contains any Covered
|
|
57
|
+
Software.
|
|
58
|
+
|
|
59
|
+
1.11. "Patent Claims" of a Contributor
|
|
60
|
+
means any patent claim(s), including without limitation, method,
|
|
61
|
+
process, and apparatus claims, in any patent Licensable by such
|
|
62
|
+
Contributor that would be infringed, but for the grant of the
|
|
63
|
+
License, by the making, using, selling, offering for sale, having
|
|
64
|
+
made, import, or transfer of either its Contributions or its
|
|
65
|
+
Contributor Version.
|
|
66
|
+
|
|
67
|
+
1.12. "Secondary License"
|
|
68
|
+
means either the GNU General Public License, Version 2.0, the GNU
|
|
69
|
+
Lesser General Public License, Version 2.1, the GNU Affero General
|
|
70
|
+
Public License, Version 3.0, or any later versions of those
|
|
71
|
+
licenses.
|
|
72
|
+
|
|
73
|
+
1.13. "Source Code Form"
|
|
74
|
+
means the form of the work preferred for making modifications.
|
|
75
|
+
|
|
76
|
+
1.14. "You" (or "Your")
|
|
77
|
+
means an individual or a legal entity exercising rights under this
|
|
78
|
+
License. For legal entities, "You" includes any entity that
|
|
79
|
+
controls, is controlled by, or is under common control with You. For
|
|
80
|
+
purposes of this definition, "control" means (a) the power, direct
|
|
81
|
+
or indirect, to cause the direction or management of such entity,
|
|
82
|
+
whether by contract or otherwise, or (b) ownership of more than
|
|
83
|
+
fifty percent (50%) of the outstanding shares or beneficial
|
|
84
|
+
ownership of such entity.
|
|
85
|
+
|
|
86
|
+
2. License Grants and Conditions
|
|
87
|
+
--------------------------------
|
|
88
|
+
|
|
89
|
+
2.1. Grants
|
|
90
|
+
|
|
91
|
+
Each Contributor hereby grants You a world-wide, royalty-free,
|
|
92
|
+
non-exclusive license:
|
|
93
|
+
|
|
94
|
+
(a) under intellectual property rights (other than patent or trademark)
|
|
95
|
+
Licensable by such Contributor to use, reproduce, make available,
|
|
96
|
+
modify, display, perform, distribute, and otherwise exploit its
|
|
97
|
+
Contributions, either on an unmodified basis, with Modifications, or
|
|
98
|
+
as part of a Larger Work; and
|
|
99
|
+
|
|
100
|
+
(b) under Patent Claims of such Contributor to make, use, sell, offer
|
|
101
|
+
for sale, have made, import, and otherwise transfer either its
|
|
102
|
+
Contributions or its Contributor Version.
|
|
103
|
+
|
|
104
|
+
2.2. Effective Date
|
|
105
|
+
|
|
106
|
+
The licenses granted in Section 2.1 with respect to any Contribution
|
|
107
|
+
become effective for each Contribution on the date the Contributor first
|
|
108
|
+
distributes such Contribution.
|
|
109
|
+
|
|
110
|
+
2.3. Limitations on Grant Scope
|
|
111
|
+
|
|
112
|
+
The licenses granted in this Section 2 are the only rights granted under
|
|
113
|
+
this License. No additional rights or licenses will be implied from the
|
|
114
|
+
distribution or licensing of Covered Software under this License.
|
|
115
|
+
Notwithstanding Section 2.1(b) above, no patent license is granted by a
|
|
116
|
+
Contributor:
|
|
117
|
+
|
|
118
|
+
(a) for any code that a Contributor has removed from Covered Software;
|
|
119
|
+
or
|
|
120
|
+
|
|
121
|
+
(b) for infringements caused by: (i) Your and any other third party's
|
|
122
|
+
modifications of Covered Software, or (ii) the combination of its
|
|
123
|
+
Contributions with other software (except as part of its Contributor
|
|
124
|
+
Version); or
|
|
125
|
+
|
|
126
|
+
(c) under Patent Claims infringed by Covered Software in the absence of
|
|
127
|
+
its Contributions.
|
|
128
|
+
|
|
129
|
+
This License does not grant any rights in the trademarks, service marks,
|
|
130
|
+
or logos of any Contributor (except as may be necessary to comply with
|
|
131
|
+
the notice requirements in Section 3.4).
|
|
132
|
+
|
|
133
|
+
2.4. Subsequent Licenses
|
|
134
|
+
|
|
135
|
+
No Contributor makes additional grants as a result of Your choice to
|
|
136
|
+
distribute the Covered Software under a subsequent version of this
|
|
137
|
+
License (see Section 10.2) or under the terms of a Secondary License (if
|
|
138
|
+
permitted under the terms of Section 3.3).
|
|
139
|
+
|
|
140
|
+
2.5. Representation
|
|
141
|
+
|
|
142
|
+
Each Contributor represents that the Contributor believes its
|
|
143
|
+
Contributions are its original creation(s) or it has sufficient rights
|
|
144
|
+
to grant the rights to its Contributions conveyed by this License.
|
|
145
|
+
|
|
146
|
+
2.6. Fair Use
|
|
147
|
+
|
|
148
|
+
This License is not intended to limit any rights You have under
|
|
149
|
+
applicable copyright doctrines of fair use, fair dealing, or other
|
|
150
|
+
equivalents.
|
|
151
|
+
|
|
152
|
+
2.7. Conditions
|
|
153
|
+
|
|
154
|
+
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
|
|
155
|
+
in Section 2.1.
|
|
156
|
+
|
|
157
|
+
3. Responsibilities
|
|
158
|
+
-------------------
|
|
159
|
+
|
|
160
|
+
3.1. Distribution of Source Form
|
|
161
|
+
|
|
162
|
+
All distribution of Covered Software in Source Code Form, including any
|
|
163
|
+
Modifications that You create or to which You contribute, must be under
|
|
164
|
+
the terms of this License. You must inform recipients that the Source
|
|
165
|
+
Code Form of the Covered Software is governed by the terms of this
|
|
166
|
+
License, and how they can obtain a copy of this License. You may not
|
|
167
|
+
attempt to alter or restrict the recipients' rights in the Source Code
|
|
168
|
+
Form.
|
|
169
|
+
|
|
170
|
+
3.2. Distribution of Executable Form
|
|
171
|
+
|
|
172
|
+
If You distribute Covered Software in Executable Form then:
|
|
173
|
+
|
|
174
|
+
(a) such Covered Software must also be made available in Source Code
|
|
175
|
+
Form, as described in Section 3.1, and You must inform recipients of
|
|
176
|
+
the Executable Form how they can obtain a copy of such Source Code
|
|
177
|
+
Form by reasonable means in a timely manner, at a charge no more
|
|
178
|
+
than the cost of distribution to the recipient; and
|
|
179
|
+
|
|
180
|
+
(b) You may distribute such Executable Form under the terms of this
|
|
181
|
+
License, or sublicense it under different terms, provided that the
|
|
182
|
+
license for the Executable Form does not attempt to limit or alter
|
|
183
|
+
the recipients' rights in the Source Code Form under this License.
|
|
184
|
+
|
|
185
|
+
3.3. Distribution of a Larger Work
|
|
186
|
+
|
|
187
|
+
You may create and distribute a Larger Work under terms of Your choice,
|
|
188
|
+
provided that You also comply with the requirements of this License for
|
|
189
|
+
the Covered Software. If the Larger Work is a combination of Covered
|
|
190
|
+
Software with a work governed by one or more Secondary Licenses, and the
|
|
191
|
+
Covered Software is not Incompatible With Secondary Licenses, this
|
|
192
|
+
License permits You to additionally distribute such Covered Software
|
|
193
|
+
under the terms of such Secondary License(s), so that the recipient of
|
|
194
|
+
the Larger Work may, at their option, further distribute the Covered
|
|
195
|
+
Software under the terms of either this License or such Secondary
|
|
196
|
+
License(s).
|
|
197
|
+
|
|
198
|
+
3.4. Notices
|
|
199
|
+
|
|
200
|
+
You may not remove or alter the substance of any license notices
|
|
201
|
+
(including copyright notices, patent notices, disclaimers of warranty,
|
|
202
|
+
or limitations of liability) contained within the Source Code Form of
|
|
203
|
+
the Covered Software, except that You may alter any license notices to
|
|
204
|
+
the extent required to remedy known factual inaccuracies.
|
|
205
|
+
|
|
206
|
+
3.5. Application of Additional Terms
|
|
207
|
+
|
|
208
|
+
You may choose to offer, and to charge a fee for, warranty, support,
|
|
209
|
+
indemnity or liability obligations to one or more recipients of Covered
|
|
210
|
+
Software. However, You may do so only on Your own behalf, and not on
|
|
211
|
+
behalf of any Contributor. You must make it absolutely clear that any
|
|
212
|
+
such warranty, support, indemnity, or liability obligation is offered by
|
|
213
|
+
You alone, and You hereby agree to indemnify every Contributor for any
|
|
214
|
+
liability incurred by such Contributor as a result of warranty, support,
|
|
215
|
+
indemnity or liability terms You offer. You may include additional
|
|
216
|
+
disclaimers of warranty and limitations of liability specific to any
|
|
217
|
+
jurisdiction.
|
|
218
|
+
|
|
219
|
+
4. Inability to Comply Due to Statute or Regulation
|
|
220
|
+
---------------------------------------------------
|
|
221
|
+
|
|
222
|
+
If it is impossible for You to comply with any of the terms of this
|
|
223
|
+
License with respect to some or all of the Covered Software due to
|
|
224
|
+
statute, judicial order, or regulation then You must: (a) comply with
|
|
225
|
+
the terms of this License to the maximum extent possible; and (b)
|
|
226
|
+
describe the limitations and the code they affect. Such description must
|
|
227
|
+
be placed in a text file included with all distributions of the Covered
|
|
228
|
+
Software under this License. Except to the extent prohibited by statute
|
|
229
|
+
or regulation, such description must be sufficiently detailed for a
|
|
230
|
+
recipient of ordinary skill to be able to understand it.
|
|
231
|
+
|
|
232
|
+
5. Termination
|
|
233
|
+
--------------
|
|
234
|
+
|
|
235
|
+
5.1. The rights granted under this License will terminate automatically
|
|
236
|
+
if You fail to comply with any of its terms. However, if You become
|
|
237
|
+
compliant, then the rights granted under this License from a particular
|
|
238
|
+
Contributor are reinstated (a) provisionally, unless and until such
|
|
239
|
+
Contributor explicitly and finally terminates Your grants, and (b) on an
|
|
240
|
+
ongoing basis, if such Contributor fails to notify You of the
|
|
241
|
+
non-compliance by some reasonable means prior to 60 days after You have
|
|
242
|
+
come back into compliance. Moreover, Your grants from a particular
|
|
243
|
+
Contributor are reinstated on an ongoing basis if such Contributor
|
|
244
|
+
notifies You of the non-compliance by some reasonable means, this is the
|
|
245
|
+
first time You have received notice of non-compliance with this License
|
|
246
|
+
from such Contributor, and You become compliant prior to 30 days after
|
|
247
|
+
Your receipt of the notice.
|
|
248
|
+
|
|
249
|
+
5.2. If You initiate litigation against any entity by asserting a patent
|
|
250
|
+
infringement claim (excluding declaratory judgment actions,
|
|
251
|
+
counter-claims, and cross-claims) alleging that a Contributor Version
|
|
252
|
+
directly or indirectly infringes any patent, then the rights granted to
|
|
253
|
+
You by any and all Contributors for the Covered Software under Section
|
|
254
|
+
2.1 of this License shall terminate.
|
|
255
|
+
|
|
256
|
+
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
|
|
257
|
+
end user license agreements (excluding distributors and resellers) which
|
|
258
|
+
have been validly granted by You or Your distributors under this License
|
|
259
|
+
prior to termination shall survive termination.
|
|
260
|
+
|
|
261
|
+
************************************************************************
|
|
262
|
+
* *
|
|
263
|
+
* 6. Disclaimer of Warranty *
|
|
264
|
+
* ------------------------- *
|
|
265
|
+
* *
|
|
266
|
+
* Covered Software is provided under this License on an "as is" *
|
|
267
|
+
* basis, without warranty of any kind, either expressed, implied, or *
|
|
268
|
+
* statutory, including, without limitation, warranties that the *
|
|
269
|
+
* Covered Software is free of defects, merchantable, fit for a *
|
|
270
|
+
* particular purpose or non-infringing. The entire risk as to the *
|
|
271
|
+
* quality and performance of the Covered Software is with You. *
|
|
272
|
+
* Should any Covered Software prove defective in any respect, You *
|
|
273
|
+
* (not any Contributor) assume the cost of any necessary servicing, *
|
|
274
|
+
* repair, or correction. This disclaimer of warranty constitutes an *
|
|
275
|
+
* essential part of this License. No use of any Covered Software is *
|
|
276
|
+
* authorized under this License except under this disclaimer. *
|
|
277
|
+
* *
|
|
278
|
+
************************************************************************
|
|
279
|
+
|
|
280
|
+
************************************************************************
|
|
281
|
+
* *
|
|
282
|
+
* 7. Limitation of Liability *
|
|
283
|
+
* -------------------------- *
|
|
284
|
+
* *
|
|
285
|
+
* Under no circumstances and under no legal theory, whether tort *
|
|
286
|
+
* (including negligence), contract, or otherwise, shall any *
|
|
287
|
+
* Contributor, or anyone who distributes Covered Software as *
|
|
288
|
+
* permitted above, be liable to You for any direct, indirect, *
|
|
289
|
+
* special, incidental, or consequential damages of any character *
|
|
290
|
+
* including, without limitation, damages for lost profits, loss of *
|
|
291
|
+
* goodwill, work stoppage, computer failure or malfunction, or any *
|
|
292
|
+
* and all other commercial damages or losses, even if such party *
|
|
293
|
+
* shall have been informed of the possibility of such damages. This *
|
|
294
|
+
* limitation of liability shall not apply to liability for death or *
|
|
295
|
+
* personal injury resulting from such party's negligence to the *
|
|
296
|
+
* extent applicable law prohibits such limitation. Some *
|
|
297
|
+
* jurisdictions do not allow the exclusion or limitation of *
|
|
298
|
+
* incidental or consequential damages, so this exclusion and *
|
|
299
|
+
* limitation may not apply to You. *
|
|
300
|
+
* *
|
|
301
|
+
************************************************************************
|
|
302
|
+
|
|
303
|
+
8. Litigation
|
|
304
|
+
-------------
|
|
305
|
+
|
|
306
|
+
Any litigation relating to this License may be brought only in the
|
|
307
|
+
courts of a jurisdiction where the defendant maintains its principal
|
|
308
|
+
place of business and such litigation shall be governed by laws of that
|
|
309
|
+
jurisdiction, without reference to its conflict-of-law provisions.
|
|
310
|
+
Nothing in this Section shall prevent a party's ability to bring
|
|
311
|
+
cross-claims or counter-claims.
|
|
312
|
+
|
|
313
|
+
9. Miscellaneous
|
|
314
|
+
----------------
|
|
315
|
+
|
|
316
|
+
This License represents the complete agreement concerning the subject
|
|
317
|
+
matter hereof. If any provision of this License is held to be
|
|
318
|
+
unenforceable, such provision shall be reformed only to the extent
|
|
319
|
+
necessary to make it enforceable. Any law or regulation which provides
|
|
320
|
+
that the language of a contract shall be construed against the drafter
|
|
321
|
+
shall not be used to construe this License against a Contributor.
|
|
322
|
+
|
|
323
|
+
10. Versions of the License
|
|
324
|
+
---------------------------
|
|
325
|
+
|
|
326
|
+
10.1. New Versions
|
|
327
|
+
|
|
328
|
+
Mozilla Foundation is the license steward. Except as provided in Section
|
|
329
|
+
10.3, no one other than the license steward has the right to modify or
|
|
330
|
+
publish new versions of this License. Each version will be given a
|
|
331
|
+
distinguishing version number.
|
|
332
|
+
|
|
333
|
+
10.2. Effect of New Versions
|
|
334
|
+
|
|
335
|
+
You may distribute the Covered Software under the terms of the version
|
|
336
|
+
of the License under which You originally received the Covered Software,
|
|
337
|
+
or under the terms of any subsequent version published by the license
|
|
338
|
+
steward.
|
|
339
|
+
|
|
340
|
+
10.3. Modified Versions
|
|
341
|
+
|
|
342
|
+
If you create software not governed by this License, and you want to
|
|
343
|
+
create a new license for such software, you may create and use a
|
|
344
|
+
modified version of this License if you rename the license and remove
|
|
345
|
+
any references to the name of the license steward (except to note that
|
|
346
|
+
such modified license differs from this License).
|
|
347
|
+
|
|
348
|
+
10.4. Distributing Source Code Form that is Incompatible With Secondary
|
|
349
|
+
Licenses
|
|
350
|
+
|
|
351
|
+
If You choose to distribute Source Code Form that is Incompatible With
|
|
352
|
+
Secondary Licenses under the terms of this version of the License, the
|
|
353
|
+
notice described in Exhibit B of this License must be attached.
|
|
354
|
+
|
|
355
|
+
Exhibit A - Source Code Form License Notice
|
|
356
|
+
-------------------------------------------
|
|
357
|
+
|
|
358
|
+
This Source Code Form is subject to the terms of the Mozilla Public
|
|
359
|
+
License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
360
|
+
file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
361
|
+
|
|
362
|
+
If it is not possible or desirable to put the notice in a particular
|
|
363
|
+
file, then You may include the notice in a location (such as a LICENSE
|
|
364
|
+
file in a relevant directory) where a recipient would be likely to look
|
|
365
|
+
for such a notice.
|
|
366
|
+
|
|
367
|
+
You may add additional accurate notices of copyright ownership.
|
|
368
|
+
|
|
369
|
+
Exhibit B - "Incompatible With Secondary Licenses" Notice
|
|
370
|
+
---------------------------------------------------------
|
|
371
|
+
|
|
372
|
+
This Source Code Form is "Incompatible With Secondary Licenses", as
|
|
373
|
+
defined by the Mozilla Public License, v. 2.0.
|
package/README.md
ADDED
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/hero.png" alt="DANMU — Live Interaction Console" width="100%">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<strong>为知识型主播收束弹幕、问题与现场控制。</strong><br>
|
|
7
|
+
一块安静、快速、可恢复的直播互动终端。
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
<p align="center">
|
|
11
|
+
<a href="https://github.com/rockythink/shisui-danmu/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/rockythink/shisui-danmu/ci.yml?style=flat-square&label=build&colorA=111827&colorB=4ADE80" alt="Build"></a>
|
|
12
|
+
<a href="https://github.com/rockythink/shisui-danmu/releases/latest"><img src="https://img.shields.io/github/v/release/rockythink/shisui-danmu?style=flat-square&colorA=111827&colorB=22D3EE" alt="Release"></a>
|
|
13
|
+
<a href="https://github.com/rockythink/shisui-danmu/blob/main/LICENSE"><img src="https://img.shields.io/github/license/rockythink/shisui-danmu?style=flat-square&colorA=111827&colorB=F472B6" alt="License"></a>
|
|
14
|
+
<img src="https://img.shields.io/badge/Rust-1.89%2B-F8FAFC?style=flat-square&colorA=111827&logo=rust&logoColor=white" alt="Rust 1.89+">
|
|
15
|
+
<img src="https://img.shields.io/badge/OBS_WebSocket-v5-FACC15?style=flat-square&colorA=111827" alt="OBS WebSocket v5">
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
macOS · Linux · Windows | Bilibili | Ratatui | MPL-2.0
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
**DANMU** 是面向知识型主播的免费开源弹幕与提问工作台。它把 B 站的历史弹幕、实时互动、重点问题、发送状态和有限 OBS 控制放进同一个终端界面,让主播少盯几个窗口,多留一点注意力给正在讲的内容。
|
|
25
|
+
|
|
26
|
+
它不是播放器,也不是另一套 OBS。它只解决直播时最容易失控的那一段:**看见互动、辨认问题、快速回应、保留现场。**
|
|
27
|
+
|
|
28
|
+
<p align="center">
|
|
29
|
+
<img src="assets/tui-preview.png" alt="DANMU TUI:实时弹幕、重点问题、直播状态、OBS 与麦克风电平" width="100%">
|
|
30
|
+
</p>
|
|
31
|
+
|
|
32
|
+
> 界面由实际 DANMU TUI 在真实终端中渲染;内容为演示数据,不包含真实观众信息。
|
|
33
|
+
|
|
34
|
+
## 为什么做 DANMU
|
|
35
|
+
|
|
36
|
+
知识型直播的难点通常不是“弹幕不够多”,而是信息密度太高:问题夹在闲聊里,历史接口与实时 WebSocket 偶尔漏包,主播还要同时确认推流、场景和麦克风状态。
|
|
37
|
+
|
|
38
|
+
DANMU 把这些信号压缩成一块可扫读的终端界面:
|
|
39
|
+
|
|
40
|
+
- **不漏重要互动**:历史窗口与实时流合并、去重,断线自动重连;
|
|
41
|
+
- **问题留在眼前**:键盘选中弹幕、插入回复对象、设置重点消息;
|
|
42
|
+
- **发送结果可确认**:长弹幕按 Unicode 字素安全分段,并等待主播身份回流;
|
|
43
|
+
- **现场状态可感知**:直播状态、开播时长、看过、点赞、弹幕与在线人数分层显示;
|
|
44
|
+
- **OBS 只做必要的事**:场景、推流、静音和单路麦克风电平,不复制完整控制台;
|
|
45
|
+
- **结束后还有记录**:每场直播写入独立 Journal,可搜索并导出快照。
|
|
46
|
+
|
|
47
|
+
## 快速开始
|
|
48
|
+
|
|
49
|
+
### 1. 安装
|
|
50
|
+
|
|
51
|
+
任选一种渠道;安装后的命令都叫 `danmu`。
|
|
52
|
+
|
|
53
|
+
| 渠道 | 命令 | 适用环境 |
|
|
54
|
+
| --- | --- | --- |
|
|
55
|
+
| npm | `npm install -g danmu-tui` | 已安装 Node.js 18+ |
|
|
56
|
+
| Bun | `bun install -g danmu-tui` | 已安装 Bun |
|
|
57
|
+
| Homebrew | `brew install rockythink/tap/danmu` | macOS、Linux |
|
|
58
|
+
| Cargo | `cargo install shisui-danmu --locked` | 已安装 Rust 1.89+ |
|
|
59
|
+
| 安装脚本 | 见下方 | macOS、Linux、Windows Git Bash |
|
|
60
|
+
| 手动下载 | [GitHub Releases](https://github.com/rockythink/shisui-danmu/releases/latest) | 全平台 |
|
|
61
|
+
|
|
62
|
+
产品名统一为 **DANMU**。为保持已有仓库链接和本地数据目录兼容,GitHub 仓库与 Cargo 包继续使用 `shisui-danmu`,npm 包使用 `danmu-tui`;所有渠道安装后的可执行命令均为 `danmu`。
|
|
63
|
+
|
|
64
|
+
npm 与 Bun 安装的是同一份 Rust 原生程序,不是 JavaScript 重写;包内不运行 `postinstall` 下载脚本。无需全局安装也可以直接执行:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npx danmu-tui <房间号>
|
|
68
|
+
bunx danmu-tui <房间号>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
无 Node、Bun、Homebrew 或 Rust 环境时,使用安装脚本:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
curl -fsSL https://raw.githubusercontent.com/rockythink/shisui-danmu/main/script/install_release.sh | bash
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
脚本会识别操作系统与 CPU 架构,下载对应 GitHub Release,验证 SHA-256,并安装到 `~/.local/bin/danmu`。Windows 也可以下载 `shisui-danmu-windows-x86_64.zip`,校验同名 `.sha256` 后将 `danmu.exe` 放入 `PATH`。
|
|
78
|
+
|
|
79
|
+
### 2. 进入直播间
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
danmu <房间号>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
也可以显式传参:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
danmu --room <房间号>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
公开监看不需要登录。启动后按 `/` 打开命令面板,`↑/↓` 选择,`Enter` 执行。
|
|
92
|
+
|
|
93
|
+
### 3. 登录并发送弹幕(可选)
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
danmu --login
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
使用哔哩哔哩客户端扫码。登录成功后重新运行 `danmu <房间号>`,直接在底部输入框发送弹幕。
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
danmu --logout
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
`--logout` 只清除 DANMU 自己的 B 站登录态,不读取浏览器 Cookie,也不与其他应用共享凭据。
|
|
106
|
+
|
|
107
|
+
## 界面读法
|
|
108
|
+
|
|
109
|
+
| 区域 | 内容 |
|
|
110
|
+
| --- | --- |
|
|
111
|
+
| 顶部第一行 | `LIVE / OFFLINE / ROTATING`、直播标题、已开播时长 |
|
|
112
|
+
| 顶部第二行 | 主播身份、OBS 连接、麦克风静音状态 |
|
|
113
|
+
| Ghost Stage | 历史与实时事件合并后的主信息流;重点消息显示在标题上 |
|
|
114
|
+
| 通知区 | 登录、发送、重连、OBS 操作的进度、错误与可执行提示 |
|
|
115
|
+
| 输入框顶栏 | 发送状态、业务计数,以及空间允许时的麦克风电平 |
|
|
116
|
+
| 输入框 | Unicode 字素级编辑;最多四行,光标始终保持可见 |
|
|
117
|
+
|
|
118
|
+
底栏计数使用明确的数据口径:
|
|
119
|
+
|
|
120
|
+
| 符号 | 含义 | 来源 |
|
|
121
|
+
| --- | --- | --- |
|
|
122
|
+
| `◉` | 累计看过 | `WATCHED_CHANGE.data.num` |
|
|
123
|
+
| `♥` | 累计点赞 | `LIKE_INFO_V3_UPDATE.data.click_count` |
|
|
124
|
+
| `▤` | 本次运行收到的实时弹幕数 | 本地会话计数 |
|
|
125
|
+
| `●` | 当前在线人数 | 登录后读取 `getOnlineRank.data.onlineNum` |
|
|
126
|
+
|
|
127
|
+
`MIC` 电平来自 OBS WebSocket v5 的 `InputVolumeMeters` 事件:约 50 ms 接收一次,在 Adapter 内聚合为 10 Hz;上升立即响应,回落平滑。界面空间不足时先缩短电平条,再隐藏数值,极窄或 OBS 断连时完全隐藏。
|
|
128
|
+
|
|
129
|
+
## 键盘与命令
|
|
130
|
+
|
|
131
|
+
### 高频操作
|
|
132
|
+
|
|
133
|
+
| 操作 | 按键 |
|
|
134
|
+
| --- | --- |
|
|
135
|
+
| 打开命令面板 | `/` |
|
|
136
|
+
| 切换信息流 / 聊天布局 | `Tab` |
|
|
137
|
+
| 浏览历史 | 鼠标滚轮 |
|
|
138
|
+
| 回到最新消息 | `End` |
|
|
139
|
+
| 选择回复对象 | `Shift+↑/↓` |
|
|
140
|
+
| 插入 `@用户名` | 选择后按 `Enter` |
|
|
141
|
+
| 取消选择或退出 | `Esc` |
|
|
142
|
+
| 安全退出 | `Ctrl+C` 或 `/quit` |
|
|
143
|
+
| 行首 / 行尾 | `Home` / `End`,或 `Ctrl+A/E` |
|
|
144
|
+
| 删除到行首 / 删除前一个词 | `Ctrl+U/W` |
|
|
145
|
+
|
|
146
|
+
### TUI 命令
|
|
147
|
+
|
|
148
|
+
| 命令 | 作用 |
|
|
149
|
+
| --- | --- |
|
|
150
|
+
| `/help` | 显示命令面板操作提示 |
|
|
151
|
+
| `/login` · `/logout` | 扫码登录或清除独立登录态 |
|
|
152
|
+
| `/layout` | 切换信息流与聊天布局 |
|
|
153
|
+
| `/theme` | 打开主题选择;`/theme reload` 热加载自定义主题 |
|
|
154
|
+
| `/names show\|hide` | 显示或隐藏用户名 |
|
|
155
|
+
| `/time show\|hide` | 显示或隐藏消息时间 |
|
|
156
|
+
| `/feature` | 将当前选中消息设为重点 |
|
|
157
|
+
| `/archive [关键词]` | 搜索历史会话 |
|
|
158
|
+
| `/obs` · `/obs status` | 检查或查看 OBS 状态 |
|
|
159
|
+
| `/obs mute\|unmute` | 静音或取消静音所配置的麦克风 |
|
|
160
|
+
| `/obs scene [名称]` | 列出或切换场景 |
|
|
161
|
+
| `/obs config mic [名称]` | 列出或选择单路麦克风输入 |
|
|
162
|
+
| `/obs start` | 开始推流 |
|
|
163
|
+
| `/obs stop` | 请求停止推流;必须再执行 `/obs confirm` |
|
|
164
|
+
| `/obs cancel` | 取消待确认的停止推流操作 |
|
|
165
|
+
| `/quit` | 安全退出并写入会话状态 |
|
|
166
|
+
|
|
167
|
+
## OBS 接入
|
|
168
|
+
|
|
169
|
+
DANMU 使用 OBS 28+ 内置的 WebSocket v5,**不依赖 `obs-cli`、Python 或额外桥接进程**。
|
|
170
|
+
|
|
171
|
+
1. 在 OBS 中打开 **工具 → WebSocket 服务器设置**;
|
|
172
|
+
2. 启用 WebSocket 服务器,记下端口与密码;
|
|
173
|
+
3. 运行配置向导:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
danmu --configure-obs
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
4. 依次填写主机、端口、默认直播场景和麦克风输入名;
|
|
180
|
+
5. 进入 TUI 后运行 `/obs status` 验证连接。
|
|
181
|
+
|
|
182
|
+
密码保存到系统凭据存储;主机、端口、场景与输入名写入 DANMU 独立配置。停止推流始终需要二次确认。
|
|
183
|
+
|
|
184
|
+
## 配置与主题
|
|
185
|
+
|
|
186
|
+
### 启动参数
|
|
187
|
+
|
|
188
|
+
```text
|
|
189
|
+
danmu [房间号]
|
|
190
|
+
[--room <房间号>]
|
|
191
|
+
[--single-line <true|false>]
|
|
192
|
+
[--show-time <true|false>]
|
|
193
|
+
[--show-name <true|false> | --hide-name]
|
|
194
|
+
[--theme <主题名>]
|
|
195
|
+
[--config <路径>]
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
运行 `danmu --help` 查看完整参数。
|
|
199
|
+
|
|
200
|
+
### TOML 配置
|
|
201
|
+
|
|
202
|
+
```toml
|
|
203
|
+
room_id = "123456"
|
|
204
|
+
single_line = true
|
|
205
|
+
chat_layout = false
|
|
206
|
+
show_time = true
|
|
207
|
+
show_name = true
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
CLI 参数优先于 TOML。可通过 `--config <路径>` 使用指定配置文件。
|
|
211
|
+
|
|
212
|
+
### True Color 主题
|
|
213
|
+
|
|
214
|
+
内置四套深色主题:
|
|
215
|
+
|
|
216
|
+
- `shisui`
|
|
217
|
+
- `catppuccin-mocha`
|
|
218
|
+
- `tokyo-night`
|
|
219
|
+
- `gruvbox-dark`
|
|
220
|
+
|
|
221
|
+
```text
|
|
222
|
+
/theme
|
|
223
|
+
/theme tokyo-night
|
|
224
|
+
/theme reload
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
首次运行会生成 `themes.json`。输入 `/theme` 可查看当前实际路径。复制现有主题对象并修改 ID、`label` 与十个 `#RRGGBB` 语义色,即可创建自定义主题;保存后执行 `/theme reload`,不必重启。
|
|
228
|
+
|
|
229
|
+
## 数据、凭据与恢复
|
|
230
|
+
|
|
231
|
+
DANMU 使用独立命名空间,不读取商业 GUI、浏览器或其他直播工具的数据:
|
|
232
|
+
|
|
233
|
+
- B 站 Cookie / CSRF:独立 `BilibiliAccount/session.json`,Unix 权限 `0600`;
|
|
234
|
+
- OBS 密码:系统凭据存储;
|
|
235
|
+
- OBS 非敏感配置:独立 `obs-control.json`;
|
|
236
|
+
- 主题与启动配置:平台配置目录中的 `shisui-danmu/`;
|
|
237
|
+
- 会话记录:每场直播一个目录,持续追加 `journal.jsonl`;
|
|
238
|
+
- 正常结束:额外生成 `snapshot.json` 与 `summary.md`;
|
|
239
|
+
- 异常退出:下次进入同一房间时恢复未结束会话。
|
|
240
|
+
|
|
241
|
+
Cookie、CSRF 和原始 B 站 payload 不进入领域事件或会话导出。
|
|
242
|
+
|
|
243
|
+
## 架构
|
|
244
|
+
|
|
245
|
+
```mermaid
|
|
246
|
+
graph LR
|
|
247
|
+
B[Bilibili Adapter] --> D[Platform-neutral Domain]
|
|
248
|
+
O[OBS WebSocket Adapter] --> T[Ratatui Terminal]
|
|
249
|
+
D --> T
|
|
250
|
+
D --> J[JSONL Session Journal]
|
|
251
|
+
C[CLI / TOML / Theme Catalog] --> T
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
- `src/bilibili/`:房间解析、历史补偿、WebSocket、账号与发送;
|
|
255
|
+
- `src/domain/`:标准事件、会话、指标、去重与问题分类;
|
|
256
|
+
- `src/obs.rs`、`src/obs/`:有限 OBS 控制与电平聚合;
|
|
257
|
+
- `src/terminal/`:Ratatui 渲染、输入、二维码与电平表;
|
|
258
|
+
- `src/persistence.rs`:追加式 Journal、恢复、搜索和导出。
|
|
259
|
+
|
|
260
|
+
平台协议只存在于 Adapter。领域 Module 不依赖 B 站原始字段。
|
|
261
|
+
|
|
262
|
+
## 能力边界
|
|
263
|
+
|
|
264
|
+
DANMU 有意保持克制:
|
|
265
|
+
|
|
266
|
+
**包含**:公开房间监看、历史与实时事件去重、自动重连、登录后发送、重点互动、会话归档、True Color 主题、有限 OBS 控制、单路麦克风电平。
|
|
267
|
+
|
|
268
|
+
**不包含**:播放器、完整直播画布、音频混音台、录制与 Replay Buffer、OBS 场景编辑器、商业 GUI。
|
|
269
|
+
|
|
270
|
+
完整行为基线见 [终端舞台功能矩阵](docs/terminal-feature-matrix.md)。
|
|
271
|
+
|
|
272
|
+
## 从源码构建
|
|
273
|
+
|
|
274
|
+
需要 Rust 1.89 或更高版本:
|
|
275
|
+
|
|
276
|
+
```bash
|
|
277
|
+
git clone https://github.com/rockythink/shisui-danmu.git
|
|
278
|
+
cd shisui-danmu
|
|
279
|
+
cargo build --release --locked
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
安装到 `~/.local/bin/danmu`:
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
./script/install_cli.sh
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
或使用 Cargo:
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
cargo install --locked --path .
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
## 开发与验证
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
./script/verify.sh
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
完整门禁包含:
|
|
301
|
+
|
|
302
|
+
- `cargo fmt --check`
|
|
303
|
+
- 严格 `clippy`
|
|
304
|
+
- 全目标测试
|
|
305
|
+
- Release 构建
|
|
306
|
+
- CLI 冒烟
|
|
307
|
+
|
|
308
|
+
GitHub Actions 在 macOS、Linux、Windows 上执行对应 Rust 门禁。提交前请阅读 [CONTRIBUTING.md](CONTRIBUTING.md)。
|
|
309
|
+
|
|
310
|
+
## Release 资产
|
|
311
|
+
|
|
312
|
+
| 平台 | 文件 |
|
|
313
|
+
| --- | --- |
|
|
314
|
+
| macOS Apple Silicon | `shisui-danmu-macos-aarch64.tar.gz` |
|
|
315
|
+
| macOS Intel | `shisui-danmu-macos-x86_64.tar.gz` |
|
|
316
|
+
| Linux x86_64 | `shisui-danmu-linux-x86_64.tar.gz` |
|
|
317
|
+
| Linux aarch64 | `shisui-danmu-linux-aarch64.tar.gz` |
|
|
318
|
+
| Windows x86_64 | `shisui-danmu-windows-x86_64.zip` |
|
|
319
|
+
|
|
320
|
+
指定版本或安装目录:
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
curl -fsSL https://raw.githubusercontent.com/rockythink/shisui-danmu/main/script/install_release.sh | \
|
|
324
|
+
DANMU_VERSION=v0.4.0 DANMU_INSTALL_DIR="$HOME/bin" bash
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
卸载:
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
curl -fsSL https://raw.githubusercontent.com/rockythink/shisui-danmu/main/script/install_release.sh | bash -s -- --uninstall
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
卸载只删除可执行文件,不删除配置、系统凭据或会话日志。
|
|
334
|
+
|
|
335
|
+
## License、商标与安全
|
|
336
|
+
|
|
337
|
+
源代码按 [Mozilla Public License 2.0](LICENSE) 发布,第三方组件见 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)。MPL-2.0 不授予 **DANMU** 名称、Logo、App 图标或其他品牌资产的商标许可,详见 [TRADEMARKS.md](TRADEMARKS.md)。
|
|
338
|
+
|
|
339
|
+
安全问题请按 [SECURITY.md](SECURITY.md) 私下报告。不要在公开 Issue 中提交 B 站 Cookie、CSRF token、OBS 密码、系统凭据存储内容或本机会话日志。
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Third-party notices
|
|
2
|
+
|
|
3
|
+
## obws
|
|
4
|
+
|
|
5
|
+
- Repository: <https://forge.dnaka91.rocks/dnaka91/obws>
|
|
6
|
+
- License: MIT
|
|
7
|
+
- Usage: native OBS WebSocket v5 control and event subscriptions.
|
|
8
|
+
|
|
9
|
+
## tui-input
|
|
10
|
+
|
|
11
|
+
- Repository: <https://github.com/sayanarijit/tui-input>
|
|
12
|
+
- License: MIT
|
|
13
|
+
- Usage: Unicode-safe terminal input editing state and operations.
|
|
14
|
+
|
|
15
|
+
## bililive_dm
|
|
16
|
+
|
|
17
|
+
- Repository: <https://github.com/copyliu/bililive_dm>
|
|
18
|
+
- Referenced commit: `38172aa0b859b8b9deb77ca2aa8d52329a17d10d`
|
|
19
|
+
- License: WTFPL
|
|
20
|
+
- Referenced files: `BilibiliDM_PluginFramework/DanmakuModel.cs`, `BiliDMLibCore/Model.cs`
|
|
21
|
+
- Reused material: public-room command names and JSON fixture shapes, including the
|
|
22
|
+
`SUPER_CHAT_MESSAGE_JP` / `SUPER_CHAT_MESSAGE_JPN` aliases.
|
|
23
|
+
- Implementation: fixtures were rewritten as Rust tests and the parser/deduplication
|
|
24
|
+
behavior was independently implemented in Rust.
|
|
25
|
+
|
|
26
|
+
No DLL plugin host, WPF state, open-platform identity code, third-party signing
|
|
27
|
+
service, `EndianBitConverter`, or submodule source is copied into this project.
|
package/bin/danmu.cjs
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
"use strict";
|
|
4
|
+
|
|
5
|
+
const { spawnSync } = require("node:child_process");
|
|
6
|
+
const { existsSync } = require("node:fs");
|
|
7
|
+
const path = require("node:path");
|
|
8
|
+
|
|
9
|
+
const targets = {
|
|
10
|
+
"darwin-arm64": ["darwin-arm64", "danmu"],
|
|
11
|
+
"darwin-x64": ["darwin-x64", "danmu"],
|
|
12
|
+
"linux-arm64": ["linux-arm64", "danmu"],
|
|
13
|
+
"linux-x64": ["linux-x64", "danmu"],
|
|
14
|
+
"win32-x64": ["win32-x64", "danmu.exe"],
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const target = targets[`${process.platform}-${process.arch}`];
|
|
18
|
+
if (!target) {
|
|
19
|
+
console.error(
|
|
20
|
+
`DANMU 暂不支持 ${process.platform}/${process.arch};请从 https://github.com/rockythink/shisui-danmu/releases 下载兼容版本。`,
|
|
21
|
+
);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const executable = path.join(__dirname, "..", "vendor", target[0], target[1]);
|
|
26
|
+
if (!existsSync(executable)) {
|
|
27
|
+
console.error(`DANMU 原生程序缺失:${executable}。请重新安装 danmu-tui。`);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const result = spawnSync(executable, process.argv.slice(2), {
|
|
32
|
+
stdio: "inherit",
|
|
33
|
+
env: process.env,
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
if (result.error) {
|
|
37
|
+
console.error(`DANMU 启动失败:${result.error.message}`);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
if (result.signal && process.platform !== "win32") {
|
|
41
|
+
process.kill(process.pid, result.signal);
|
|
42
|
+
}
|
|
43
|
+
process.exit(result.status ?? 1);
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "danmu-tui",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "为知识型主播收束弹幕、问题与现场控制的原生终端工作台",
|
|
5
|
+
"license": "MPL-2.0",
|
|
6
|
+
"author": "Elazer <apps@elazer.wang>",
|
|
7
|
+
"homepage": "https://github.com/rockythink/shisui-danmu#readme",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/rockythink/shisui-danmu.git"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/rockythink/shisui-danmu/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"bilibili",
|
|
17
|
+
"danmaku",
|
|
18
|
+
"tui",
|
|
19
|
+
"streaming",
|
|
20
|
+
"obs"
|
|
21
|
+
],
|
|
22
|
+
"preferGlobal": true,
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=18"
|
|
25
|
+
},
|
|
26
|
+
"bin": {
|
|
27
|
+
"danmu": "bin/danmu.cjs"
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"bin",
|
|
31
|
+
"vendor",
|
|
32
|
+
"README.md",
|
|
33
|
+
"LICENSE",
|
|
34
|
+
"THIRD_PARTY_NOTICES.md"
|
|
35
|
+
],
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"access": "public"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|