noobs 0.0.89 → 0.0.130

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.
Files changed (215) hide show
  1. package/dist/data/obs-plugins/obs-filters/LUTs/black_and_white.png +0 -0
  2. package/dist/data/obs-plugins/obs-filters/LUTs/grayscale.cube +32769 -0
  3. package/dist/data/obs-plugins/obs-filters/LUTs/grayscale.png +0 -0
  4. package/dist/data/obs-plugins/obs-filters/LUTs/invert.png +0 -0
  5. package/dist/data/obs-plugins/obs-filters/LUTs/original.cube +33 -0
  6. package/dist/data/obs-plugins/obs-filters/LUTs/original.png +0 -0
  7. package/dist/data/obs-plugins/obs-filters/LUTs/posterize.png +0 -0
  8. package/dist/data/obs-plugins/obs-filters/LUTs/red_isolated.png +0 -0
  9. package/dist/data/obs-plugins/obs-filters/LUTs/teal_lows_orange_highs.png +0 -0
  10. package/dist/data/obs-plugins/obs-filters/blend_add_filter.effect +54 -0
  11. package/dist/data/obs-plugins/obs-filters/blend_mul_filter.effect +54 -0
  12. package/dist/data/obs-plugins/obs-filters/blend_sub_filter.effect +54 -0
  13. package/dist/data/obs-plugins/obs-filters/chroma_key_filter.effect +99 -0
  14. package/dist/data/obs-plugins/obs-filters/chroma_key_filter_v2.effect +111 -0
  15. package/dist/data/obs-plugins/obs-filters/color.effect +95 -0
  16. package/dist/data/obs-plugins/obs-filters/color_correction_filter.effect +74 -0
  17. package/dist/data/obs-plugins/obs-filters/color_grade_filter.effect +177 -0
  18. package/dist/data/obs-plugins/obs-filters/color_key_filter.effect +65 -0
  19. package/dist/data/obs-plugins/obs-filters/color_key_filter_v2.effect +77 -0
  20. package/dist/data/obs-plugins/obs-filters/crop_filter.effect +95 -0
  21. package/dist/data/obs-plugins/obs-filters/hdr_tonemap_filter.effect +97 -0
  22. package/dist/data/obs-plugins/obs-filters/locale/af-ZA.ini +89 -0
  23. package/dist/data/obs-plugins/obs-filters/locale/ar-SA.ini +133 -0
  24. package/dist/data/obs-plugins/obs-filters/locale/az-AZ.ini +1 -0
  25. package/dist/data/obs-plugins/obs-filters/locale/ba-RU.ini +19 -0
  26. package/dist/data/obs-plugins/obs-filters/locale/be-BY.ini +134 -0
  27. package/dist/data/obs-plugins/obs-filters/locale/bg-BG.ini +71 -0
  28. package/dist/data/obs-plugins/obs-filters/locale/bn-BD.ini +106 -0
  29. package/dist/data/obs-plugins/obs-filters/locale/ca-ES.ini +128 -0
  30. package/dist/data/obs-plugins/obs-filters/locale/cs-CZ.ini +130 -0
  31. package/dist/data/obs-plugins/obs-filters/locale/da-DK.ini +119 -0
  32. package/dist/data/obs-plugins/obs-filters/locale/de-DE.ini +113 -0
  33. package/dist/data/obs-plugins/obs-filters/locale/el-GR.ini +128 -0
  34. package/dist/data/obs-plugins/obs-filters/locale/en-GB.ini +12 -0
  35. package/dist/data/obs-plugins/obs-filters/locale/en-US.ini +138 -0
  36. package/dist/data/obs-plugins/obs-filters/locale/eo-UY.ini +1 -0
  37. package/dist/data/obs-plugins/obs-filters/locale/es-ES.ini +129 -0
  38. package/dist/data/obs-plugins/obs-filters/locale/et-EE.ini +132 -0
  39. package/dist/data/obs-plugins/obs-filters/locale/eu-ES.ini +127 -0
  40. package/dist/data/obs-plugins/obs-filters/locale/fa-IR.ini +137 -0
  41. package/dist/data/obs-plugins/obs-filters/locale/fi-FI.ini +127 -0
  42. package/dist/data/obs-plugins/obs-filters/locale/fil-PH.ini +111 -0
  43. package/dist/data/obs-plugins/obs-filters/locale/fr-FR.ini +124 -0
  44. package/dist/data/obs-plugins/obs-filters/locale/gd-GB.ini +94 -0
  45. package/dist/data/obs-plugins/obs-filters/locale/gl-ES.ini +132 -0
  46. package/dist/data/obs-plugins/obs-filters/locale/he-IL.ini +135 -0
  47. package/dist/data/obs-plugins/obs-filters/locale/hi-IN.ini +134 -0
  48. package/dist/data/obs-plugins/obs-filters/locale/hr-HR.ini +80 -0
  49. package/dist/data/obs-plugins/obs-filters/locale/hu-HU.ini +131 -0
  50. package/dist/data/obs-plugins/obs-filters/locale/hy-AM.ini +130 -0
  51. package/dist/data/obs-plugins/obs-filters/locale/id-ID.ini +112 -0
  52. package/dist/data/obs-plugins/obs-filters/locale/it-IT.ini +130 -0
  53. package/dist/data/obs-plugins/obs-filters/locale/ja-JP.ini +134 -0
  54. package/dist/data/obs-plugins/obs-filters/locale/ka-GE.ini +133 -0
  55. package/dist/data/obs-plugins/obs-filters/locale/kaa.ini +41 -0
  56. package/dist/data/obs-plugins/obs-filters/locale/kab-KAB.ini +56 -0
  57. package/dist/data/obs-plugins/obs-filters/locale/kmr-TR.ini +126 -0
  58. package/dist/data/obs-plugins/obs-filters/locale/ko-KR.ini +134 -0
  59. package/dist/data/obs-plugins/obs-filters/locale/ms-MY.ini +131 -0
  60. package/dist/data/obs-plugins/obs-filters/locale/nb-NO.ini +115 -0
  61. package/dist/data/obs-plugins/obs-filters/locale/nl-NL.ini +111 -0
  62. package/dist/data/obs-plugins/obs-filters/locale/nn-NO.ini +19 -0
  63. package/dist/data/obs-plugins/obs-filters/locale/pl-PL.ini +127 -0
  64. package/dist/data/obs-plugins/obs-filters/locale/pt-BR.ini +128 -0
  65. package/dist/data/obs-plugins/obs-filters/locale/pt-PT.ini +130 -0
  66. package/dist/data/obs-plugins/obs-filters/locale/ro-RO.ini +125 -0
  67. package/dist/data/obs-plugins/obs-filters/locale/ru-RU.ini +135 -0
  68. package/dist/data/obs-plugins/obs-filters/locale/si-LK.ini +44 -0
  69. package/dist/data/obs-plugins/obs-filters/locale/sk-SK.ini +131 -0
  70. package/dist/data/obs-plugins/obs-filters/locale/sl-SI.ini +133 -0
  71. package/dist/data/obs-plugins/obs-filters/locale/sr-CS.ini +90 -0
  72. package/dist/data/obs-plugins/obs-filters/locale/sr-SP.ini +97 -0
  73. package/dist/data/obs-plugins/obs-filters/locale/sv-SE.ini +129 -0
  74. package/dist/data/obs-plugins/obs-filters/locale/szl-PL.ini +94 -0
  75. package/dist/data/obs-plugins/obs-filters/locale/ta-IN.ini +28 -0
  76. package/dist/data/obs-plugins/obs-filters/locale/th-TH.ini +132 -0
  77. package/dist/data/obs-plugins/obs-filters/locale/tl-PH.ini +64 -0
  78. package/dist/data/obs-plugins/obs-filters/locale/tr-TR.ini +129 -0
  79. package/dist/data/obs-plugins/obs-filters/locale/tt-RU.ini +27 -0
  80. package/dist/data/obs-plugins/obs-filters/locale/ug-CN.ini +133 -0
  81. package/dist/data/obs-plugins/obs-filters/locale/uk-UA.ini +135 -0
  82. package/dist/data/obs-plugins/obs-filters/locale/vi-VN.ini +131 -0
  83. package/dist/data/obs-plugins/obs-filters/locale/zh-CN.ini +138 -0
  84. package/dist/data/obs-plugins/obs-filters/locale/zh-TW.ini +136 -0
  85. package/dist/data/obs-plugins/obs-filters/luma_key_filter.effect +52 -0
  86. package/dist/data/obs-plugins/obs-filters/luma_key_filter_v2.effect +54 -0
  87. package/dist/data/obs-plugins/obs-filters/mask_alpha_filter.effect +54 -0
  88. package/dist/data/obs-plugins/obs-filters/mask_color_filter.effect +55 -0
  89. package/dist/data/obs-plugins/obs-filters/rtx_greenscreen.effect +183 -0
  90. package/dist/data/obs-plugins/obs-filters/sharpness.effect +76 -0
  91. package/dist/data/obs-plugins/obs-nvenc/locale/ar-SA.ini +60 -0
  92. package/dist/data/obs-plugins/obs-nvenc/locale/be-BY.ini +59 -0
  93. package/dist/data/obs-plugins/obs-nvenc/locale/bg-BG.ini +2 -0
  94. package/dist/data/obs-plugins/obs-nvenc/locale/ca-ES.ini +59 -0
  95. package/dist/data/obs-plugins/obs-nvenc/locale/cs-CZ.ini +55 -0
  96. package/dist/data/obs-plugins/obs-nvenc/locale/da-DK.ini +54 -0
  97. package/dist/data/obs-plugins/obs-nvenc/locale/de-DE.ini +55 -0
  98. package/dist/data/obs-plugins/obs-nvenc/locale/en-GB.ini +9 -0
  99. package/dist/data/obs-plugins/obs-nvenc/locale/en-US.ini +75 -0
  100. package/dist/data/obs-plugins/obs-nvenc/locale/es-ES.ini +59 -0
  101. package/dist/data/obs-plugins/obs-nvenc/locale/et-EE.ini +36 -0
  102. package/dist/data/obs-plugins/obs-nvenc/locale/fa-IR.ini +60 -0
  103. package/dist/data/obs-plugins/obs-nvenc/locale/fi-FI.ini +59 -0
  104. package/dist/data/obs-plugins/obs-nvenc/locale/fr-FR.ini +59 -0
  105. package/dist/data/obs-plugins/obs-nvenc/locale/gl-ES.ini +60 -0
  106. package/dist/data/obs-plugins/obs-nvenc/locale/he-IL.ini +60 -0
  107. package/dist/data/obs-plugins/obs-nvenc/locale/hi-IN.ini +60 -0
  108. package/dist/data/obs-plugins/obs-nvenc/locale/hu-HU.ini +60 -0
  109. package/dist/data/obs-plugins/obs-nvenc/locale/id-ID.ini +55 -0
  110. package/dist/data/obs-plugins/obs-nvenc/locale/is-IS.ini +2 -0
  111. package/dist/data/obs-plugins/obs-nvenc/locale/it-IT.ini +60 -0
  112. package/dist/data/obs-plugins/obs-nvenc/locale/ja-JP.ini +59 -0
  113. package/dist/data/obs-plugins/obs-nvenc/locale/ka-GE.ini +60 -0
  114. package/dist/data/obs-plugins/obs-nvenc/locale/kaa.ini +13 -0
  115. package/dist/data/obs-plugins/obs-nvenc/locale/kmr-TR.ini +20 -0
  116. package/dist/data/obs-plugins/obs-nvenc/locale/ko-KR.ini +58 -0
  117. package/dist/data/obs-plugins/obs-nvenc/locale/ms-MY.ini +58 -0
  118. package/dist/data/obs-plugins/obs-nvenc/locale/nb-NO.ini +24 -0
  119. package/dist/data/obs-plugins/obs-nvenc/locale/nl-NL.ini +54 -0
  120. package/dist/data/obs-plugins/obs-nvenc/locale/nn-NO.ini +1 -0
  121. package/dist/data/obs-plugins/obs-nvenc/locale/pl-PL.ini +55 -0
  122. package/dist/data/obs-plugins/obs-nvenc/locale/pt-BR.ini +58 -0
  123. package/dist/data/obs-plugins/obs-nvenc/locale/pt-PT.ini +60 -0
  124. package/dist/data/obs-plugins/obs-nvenc/locale/ru-RU.ini +60 -0
  125. package/dist/data/obs-plugins/obs-nvenc/locale/sk-SK.ini +56 -0
  126. package/dist/data/obs-plugins/obs-nvenc/locale/sv-SE.ini +58 -0
  127. package/dist/data/obs-plugins/obs-nvenc/locale/th-TH.ini +59 -0
  128. package/dist/data/obs-plugins/obs-nvenc/locale/tr-TR.ini +60 -0
  129. package/dist/data/obs-plugins/obs-nvenc/locale/tt-RU.ini +2 -0
  130. package/dist/data/obs-plugins/obs-nvenc/locale/ug-CN.ini +60 -0
  131. package/dist/data/obs-plugins/obs-nvenc/locale/uk-UA.ini +60 -0
  132. package/dist/data/obs-plugins/obs-nvenc/locale/vi-VN.ini +60 -0
  133. package/dist/data/obs-plugins/obs-nvenc/locale/zh-CN.ini +60 -0
  134. package/dist/data/obs-plugins/obs-nvenc/locale/zh-TW.ini +60 -0
  135. package/dist/data/obs-plugins/obs-qsv11/locale/af-ZA.ini +19 -0
  136. package/dist/data/obs-plugins/obs-qsv11/locale/ar-SA.ini +20 -0
  137. package/dist/data/obs-plugins/obs-qsv11/locale/ba-RU.ini +2 -0
  138. package/dist/data/obs-plugins/obs-qsv11/locale/be-BY.ini +20 -0
  139. package/dist/data/obs-plugins/obs-qsv11/locale/bg-BG.ini +7 -0
  140. package/dist/data/obs-plugins/obs-qsv11/locale/bn-BD.ini +8 -0
  141. package/dist/data/obs-plugins/obs-qsv11/locale/ca-ES.ini +20 -0
  142. package/dist/data/obs-plugins/obs-qsv11/locale/cs-CZ.ini +19 -0
  143. package/dist/data/obs-plugins/obs-qsv11/locale/da-DK.ini +19 -0
  144. package/dist/data/obs-plugins/obs-qsv11/locale/de-DE.ini +19 -0
  145. package/dist/data/obs-plugins/obs-qsv11/locale/el-GR.ini +20 -0
  146. package/dist/data/obs-plugins/obs-qsv11/locale/en-GB.ini +1 -0
  147. package/dist/data/obs-plugins/obs-qsv11/locale/en-US.ini +21 -0
  148. package/dist/data/obs-plugins/obs-qsv11/locale/es-ES.ini +19 -0
  149. package/dist/data/obs-plugins/obs-qsv11/locale/et-EE.ini +20 -0
  150. package/dist/data/obs-plugins/obs-qsv11/locale/eu-ES.ini +11 -0
  151. package/dist/data/obs-plugins/obs-qsv11/locale/fa-IR.ini +20 -0
  152. package/dist/data/obs-plugins/obs-qsv11/locale/fi-FI.ini +20 -0
  153. package/dist/data/obs-plugins/obs-qsv11/locale/fil-PH.ini +11 -0
  154. package/dist/data/obs-plugins/obs-qsv11/locale/fr-FR.ini +20 -0
  155. package/dist/data/obs-plugins/obs-qsv11/locale/gd-GB.ini +8 -0
  156. package/dist/data/obs-plugins/obs-qsv11/locale/gl-ES.ini +20 -0
  157. package/dist/data/obs-plugins/obs-qsv11/locale/he-IL.ini +20 -0
  158. package/dist/data/obs-plugins/obs-qsv11/locale/hi-IN.ini +20 -0
  159. package/dist/data/obs-plugins/obs-qsv11/locale/hr-HR.ini +14 -0
  160. package/dist/data/obs-plugins/obs-qsv11/locale/hu-HU.ini +20 -0
  161. package/dist/data/obs-plugins/obs-qsv11/locale/hy-AM.ini +13 -0
  162. package/dist/data/obs-plugins/obs-qsv11/locale/id-ID.ini +18 -0
  163. package/dist/data/obs-plugins/obs-qsv11/locale/is-IS.ini +1 -0
  164. package/dist/data/obs-plugins/obs-qsv11/locale/it-IT.ini +20 -0
  165. package/dist/data/obs-plugins/obs-qsv11/locale/ja-JP.ini +16 -0
  166. package/dist/data/obs-plugins/obs-qsv11/locale/ka-GE.ini +20 -0
  167. package/dist/data/obs-plugins/obs-qsv11/locale/kaa.ini +10 -0
  168. package/dist/data/obs-plugins/obs-qsv11/locale/kab-KAB.ini +5 -0
  169. package/dist/data/obs-plugins/obs-qsv11/locale/kmr-TR.ini +12 -0
  170. package/dist/data/obs-plugins/obs-qsv11/locale/ko-KR.ini +20 -0
  171. package/dist/data/obs-plugins/obs-qsv11/locale/ms-MY.ini +20 -0
  172. package/dist/data/obs-plugins/obs-qsv11/locale/nb-NO.ini +16 -0
  173. package/dist/data/obs-plugins/obs-qsv11/locale/nl-NL.ini +18 -0
  174. package/dist/data/obs-plugins/obs-qsv11/locale/nn-NO.ini +2 -0
  175. package/dist/data/obs-plugins/obs-qsv11/locale/oc-FR.ini +1 -0
  176. package/dist/data/obs-plugins/obs-qsv11/locale/pl-PL.ini +16 -0
  177. package/dist/data/obs-plugins/obs-qsv11/locale/pt-BR.ini +20 -0
  178. package/dist/data/obs-plugins/obs-qsv11/locale/pt-PT.ini +20 -0
  179. package/dist/data/obs-plugins/obs-qsv11/locale/ro-RO.ini +20 -0
  180. package/dist/data/obs-plugins/obs-qsv11/locale/ru-RU.ini +20 -0
  181. package/dist/data/obs-plugins/obs-qsv11/locale/si-LK.ini +8 -0
  182. package/dist/data/obs-plugins/obs-qsv11/locale/sk-SK.ini +19 -0
  183. package/dist/data/obs-plugins/obs-qsv11/locale/sl-SI.ini +20 -0
  184. package/dist/data/obs-plugins/obs-qsv11/locale/sr-CS.ini +6 -0
  185. package/dist/data/obs-plugins/obs-qsv11/locale/sr-SP.ini +10 -0
  186. package/dist/data/obs-plugins/obs-qsv11/locale/sv-SE.ini +20 -0
  187. package/dist/data/obs-plugins/obs-qsv11/locale/ta-IN.ini +2 -0
  188. package/dist/data/obs-plugins/obs-qsv11/locale/th-TH.ini +20 -0
  189. package/dist/data/obs-plugins/obs-qsv11/locale/tl-PH.ini +5 -0
  190. package/dist/data/obs-plugins/obs-qsv11/locale/tr-TR.ini +20 -0
  191. package/dist/data/obs-plugins/obs-qsv11/locale/tt-RU.ini +3 -0
  192. package/dist/data/obs-plugins/obs-qsv11/locale/ug-CN.ini +20 -0
  193. package/dist/data/obs-plugins/obs-qsv11/locale/uk-UA.ini +20 -0
  194. package/dist/data/obs-plugins/obs-qsv11/locale/vi-VN.ini +20 -0
  195. package/dist/data/obs-plugins/obs-qsv11/locale/zh-CN.ini +20 -0
  196. package/dist/data/obs-plugins/obs-qsv11/locale/zh-TW.ini +20 -0
  197. package/dist/data/obs-plugins/win-capture/get-graphics-offsets32.exe +0 -0
  198. package/dist/data/obs-plugins/win-capture/get-graphics-offsets64.exe +0 -0
  199. package/dist/data/obs-plugins/win-capture/graphics-hook32.dll +0 -0
  200. package/dist/data/obs-plugins/win-capture/graphics-hook64.dll +0 -0
  201. package/dist/data/obs-plugins/win-capture/inject-helper32.exe +0 -0
  202. package/dist/data/obs-plugins/win-capture/inject-helper64.exe +0 -0
  203. package/dist/noobs.node +0 -0
  204. package/dist/obs-plugins/image-source.dll +0 -0
  205. package/dist/obs-plugins/obs-filters.dll +0 -0
  206. package/dist/obs-plugins/obs-nvenc.dll +0 -0
  207. package/dist/obs-plugins/obs-qsv11.dll +0 -0
  208. package/dist/obs-plugins/obs-x264.dll +0 -0
  209. package/dist/obs-plugins/win-capture.dll +0 -0
  210. package/dist/obs-plugins/win-wasapi.dll +0 -0
  211. package/index.d.ts +24 -18
  212. package/package.json +1 -1
  213. package/src/main.cpp +215 -33
  214. package/src/obs_interface.cpp +598 -288
  215. package/src/obs_interface.h +85 -38
package/index.d.ts CHANGED
@@ -136,8 +136,10 @@ export type ObsProperty =
136
136
  | ObsGenericProperty;
137
137
 
138
138
  export type Signal = {
139
+ type: string; // Either "output" or "volmeter" or "source".
139
140
  id: string; // Signal identifier, e.g. "stop"
140
141
  code: number; // 0 for success, other values for errors
142
+ value?: number; // Currently only used for volmeters.
141
143
  };
142
144
 
143
145
  export type SceneItemPosition = {
@@ -156,49 +158,53 @@ interface Noobs {
156
158
  Init(
157
159
  distPath: string,
158
160
  logPath: string,
159
- recordingPath: string,
160
161
  cb: (signal: Signal) => void,
161
162
  ): void;
162
163
 
163
164
  Shutdown(): void;
164
165
 
165
- // Recording functions
166
+ // Recording functions.
166
167
  SetBuffering(buffering: boolean): void; // In buffering mode, the recording is stored in memory and can be converted to a file later.
167
168
  StartBuffer(): void;
168
169
  StartRecording(offset: number): void;
169
170
  StopRecording(): void;
171
+ ForceStopRecording(): void;
170
172
  GetLastRecording(): string;
171
173
  SetRecordingDir(recordingPath: string): void;
174
+ ResetVideoContext(fps: number, width: number, height: number): void;
172
175
 
173
- // Source management functions
174
- CreateSource(name: string, type: string): void;
176
+ // Encoder functions.
177
+ ListVideoEncoders(): string[]; // Returns a list of available video encoders.
178
+ SetVideoEncoder(id: string, settings: ObsData): void; // Create the video encoder to use.
179
+
180
+ // Source management functions.
181
+ CreateSource(name: string, type: string): string; // Returns the name of the source, which may vary in the event of a name conflict.
175
182
  DeleteSource(name: string): void;
176
183
  GetSourceSettings(name: string): ObsData;
177
184
  SetSourceSettings(name: string, settings: ObsData): void;
178
185
  GetSourceProperties(name: string): ObsProperty[];
179
186
 
180
- // Scene management functions
187
+ // Audio source management functions.
188
+ SetMuteAudioInputs(mute: boolean): void; // Mute or unmute all audio inputs.
189
+ SetSourceVolume(name: string, volume: number): void; // Set the volume for a specific audio source (0.0 to 1.0).
190
+ SetVolmeterEnabled(enabled: boolean): void; // Enable or disable the volume meter.
191
+ SetAudioSuppression(enabled: boolean): void; // Enable or disable audio suppression (noise gate).
192
+ SetForceMono(enabled: boolean): void; // Enable or disable the force mono audio setting.
193
+
194
+ // Scene management functions.
181
195
  AddSourceToScene(sourceName: string): void;
182
196
  RemoveSourceFromScene(sourceName: string): void;
183
197
  GetSourcePos(name: string): SceneItemPosition & SourceDimensions;
184
198
  SetSourcePos(name: string, pos: SceneItemPosition): void;
185
- // TODO: Cropping?
186
199
 
187
- // Preview functions
200
+ // Preview functions.
188
201
  InitPreview(hwnd: Buffer): void;
189
- ShowPreview(x: number, y: number, width: number, height: number): void;
202
+ ConfigurePreview(x: number, y: number, width: number, height: number): void;
203
+ ShowPreview(): void;
190
204
  HidePreview(): void;
191
- GetPreviewScaleFactor(): number;
192
- /**
193
- * Draws a red border around source preview
194
- * @param enabled
195
- */
205
+ DisablePreview(): void;
206
+ GetPreviewInfo(): { canvasWidth: number; canvasHeight: number; previewWidth: number; previewHeight: number };
196
207
  SetDrawSourceOutline(enabled: boolean): void;
197
- /**
198
- * Gets the current state of the preview outline, a red border around the source preview
199
- *
200
- * Default: *false*
201
- */
202
208
  GetDrawSourceOutlineEnabled(): boolean;
203
209
  }
204
210
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "noobs",
3
- "version": "0.0.89",
3
+ "version": "0.0.130",
4
4
  "description": "A native Node.js addon with libobs bindings for Warcraft Recorder.",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
package/src/main.cpp CHANGED
@@ -7,11 +7,10 @@
7
7
  ObsInterface* obs = nullptr;
8
8
 
9
9
  Napi::Value ObsInit(const Napi::CallbackInfo& info) {
10
- bool valid = info.Length() == 4 &&
10
+ bool valid = info.Length() == 3 &&
11
11
  info[0].IsString() && // Dist path
12
12
  info[1].IsString() && // Log path
13
- info[2].IsString() && // Recording path
14
- info[3].IsFunction(); // JavaScript callback
13
+ info[2].IsFunction(); // JavaScript callback
15
14
 
16
15
  if (!valid) {
17
16
  Napi::Error::New(info.Env(), "Invalid arguments passed to ObsInit").ThrowAsJavaScriptException();
@@ -20,13 +19,12 @@ Napi::Value ObsInit(const Napi::CallbackInfo& info) {
20
19
 
21
20
  std::string distPath = info[0].As<Napi::String>().Utf8Value();
22
21
  std::string logPath = info[1].As<Napi::String>().Utf8Value();
23
- std::string recordingPath = info[2].As<Napi::String>().Utf8Value();
24
- Napi::Function fn = info[3].As<Napi::Function>();
22
+ Napi::Function fn = info[2].As<Napi::Function>();
25
23
 
26
24
  Napi::ThreadSafeFunction jscb =
27
25
  Napi::ThreadSafeFunction::New(info.Env(), fn, "JavaScript callback", 0, 1);
28
26
 
29
- obs = new ObsInterface(distPath, logPath, recordingPath, jscb);
27
+ obs = new ObsInterface(distPath, logPath, jscb);
30
28
  return info.Env().Undefined();
31
29
  }
32
30
 
@@ -54,6 +52,74 @@ Napi::Value ObsSetRecordingDir(const Napi::CallbackInfo& info) {
54
52
  return info.Env().Undefined();
55
53
  }
56
54
 
55
+ Napi::Value ObsResetVideoContext(const Napi::CallbackInfo& info) {
56
+ if (!obs) {
57
+ blog(LOG_ERROR, "ObsResetVideoContext called but obs is not initialized");
58
+ throw std::runtime_error("Obs not initialized");
59
+ }
60
+
61
+ bool valid = info.Length() == 3 && info[0].IsNumber() && info[1].IsNumber() && info[2].IsNumber();
62
+
63
+ if (!valid) {
64
+ Napi::TypeError::New(info.Env(), "Invalid arguments passed to ObsResetVideo").ThrowAsJavaScriptException();
65
+ return info.Env().Undefined();
66
+ }
67
+
68
+ int fps = info[0].As<Napi::Number>().Int32Value();
69
+ int width = info[1].As<Napi::Number>().Int32Value();
70
+ int height = info[2].As<Napi::Number>().Int32Value();
71
+
72
+ obs->setVideoContext(fps, width, height);
73
+ return info.Env().Undefined();
74
+ }
75
+
76
+ Napi::Value ObsListVideoEncoders(const Napi::CallbackInfo& info) {
77
+ if (!obs) {
78
+ blog(LOG_ERROR, "ObsListVideoEncoders called but obs is not initialized");
79
+ throw std::runtime_error("Obs not initialized");
80
+ }
81
+
82
+ bool valid = info.Length() == 0;
83
+
84
+ if (!valid) {
85
+ Napi::TypeError::New(info.Env(), "Invalid arguments passed to ObsListVideoEncoders").ThrowAsJavaScriptException();
86
+ return info.Env().Undefined();
87
+ }
88
+
89
+ auto encoders = obs->listAvailableVideoEncoders();
90
+ Napi::Array result = Napi::Array::New(info.Env(), encoders.size());
91
+
92
+ for (size_t i = 0; i < encoders.size(); ++i) {
93
+ result[i] = Napi::String::New(info.Env(), encoders[i]);
94
+ }
95
+
96
+ return result;
97
+ }
98
+
99
+ Napi::Value ObsSetVideoEncoder(const Napi::CallbackInfo& info) {
100
+ if (!obs) {
101
+ blog(LOG_ERROR, "ObsSetVideoEncoder called but obs is not initialized");
102
+ throw std::runtime_error("Obs not initialized");
103
+ }
104
+
105
+ bool valid = info.Length() == 2 &&
106
+ info[0].IsString() && // Encoder ID
107
+ info[1].IsObject(); // Settings object
108
+
109
+ if (!valid) {
110
+ Napi::TypeError::New(info.Env(), "Invalid arguments passed to ObsSetVideoEncoder").ThrowAsJavaScriptException();
111
+ return info.Env().Undefined();
112
+ }
113
+
114
+ std::string id = info[0].As<Napi::String>().Utf8Value();
115
+ Napi::Object obj = info[1].As<Napi::Object>();
116
+
117
+ obs_data_t* settings = napi_to_data(obj);
118
+ obs->setVideoEncoder(id, settings);
119
+
120
+ return info.Env().Undefined();
121
+ }
122
+
57
123
  Napi::Value ObsSetBuffering(const Napi::CallbackInfo& info) {
58
124
  blog(LOG_INFO, "ObsSetBuffering called");
59
125
 
@@ -70,12 +136,7 @@ Napi::Value ObsSetBuffering(const Napi::CallbackInfo& info) {
70
136
  }
71
137
 
72
138
  bool buffering = info[0].As<Napi::Boolean>().Value();
73
- bool success = obs->setBuffering(buffering);
74
-
75
- if (!success) {
76
- Napi::Error::New(info.Env(), "Failed to set buffering mode, is recording active?").ThrowAsJavaScriptException();
77
- return info.Env().Undefined();
78
- }
139
+ obs->setBuffering(buffering);
79
140
 
80
141
  return info.Env().Undefined();
81
142
  }
@@ -118,6 +179,16 @@ Napi::Value ObsStopRecording(const Napi::CallbackInfo& info) {
118
179
  return info.Env().Undefined();
119
180
  }
120
181
 
182
+ Napi::Value ObsForceStopRecording(const Napi::CallbackInfo& info) {
183
+ if (!obs) {
184
+ blog(LOG_ERROR, "ObsForceStopRecording called but obs is not initialized");
185
+ throw std::runtime_error("Obs not initialized");
186
+ }
187
+
188
+ obs->forceStopRecording();
189
+ return info.Env().Undefined();
190
+ }
191
+
121
192
  Napi::Value ObsGetLastRecording(const Napi::CallbackInfo& info) {
122
193
  if (!obs) {
123
194
  blog(LOG_ERROR, "ObsGetLastRecording called but obs is not initialized");
@@ -155,11 +226,11 @@ Napi::Value ObsInitPreview(const Napi::CallbackInfo& info) {
155
226
  return info.Env().Undefined();
156
227
  }
157
228
 
158
- Napi::Value ObsShowPreview(const Napi::CallbackInfo& info) {
159
- blog(LOG_INFO, "ObsShowPreview called");
229
+ Napi::Value ObsConfigurePreview(const Napi::CallbackInfo& info) {
230
+ blog(LOG_INFO, "ObsConfigurePreview called");
160
231
 
161
232
  if (!obs) {
162
- blog(LOG_ERROR, "ObsShowPreview called but obs is not initialized");
233
+ blog(LOG_ERROR, "ObsConfigurePreview called but obs is not initialized");
163
234
  throw std::runtime_error("Obs not initialized");
164
235
  }
165
236
 
@@ -170,7 +241,7 @@ Napi::Value ObsShowPreview(const Napi::CallbackInfo& info) {
170
241
  info[3].IsNumber(); // Height
171
242
 
172
243
  if (!valid) {
173
- Napi::TypeError::New(info.Env(), "Invalid arguments passed to ObsShowPreview").ThrowAsJavaScriptException();
244
+ Napi::TypeError::New(info.Env(), "Invalid arguments passed to ObsConfigurePreview").ThrowAsJavaScriptException();
174
245
  return info.Env().Undefined();
175
246
  }
176
247
 
@@ -179,7 +250,19 @@ Napi::Value ObsShowPreview(const Napi::CallbackInfo& info) {
179
250
  int width = info[2].As<Napi::Number>().Int32Value();
180
251
  int height = info[3].As<Napi::Number>().Int32Value();
181
252
 
182
- obs->showPreview(x, y, width, height);
253
+ obs->configurePreview(x, y, width, height);
254
+ return info.Env().Undefined();
255
+ }
256
+
257
+ Napi::Value ObsShowPreview(const Napi::CallbackInfo& info) {
258
+ blog(LOG_INFO, "ObsShowPreview called");
259
+
260
+ if (!obs) {
261
+ blog(LOG_ERROR, "ObsShowPreview called but obs is not initialized");
262
+ throw std::runtime_error("Obs not initialized");
263
+ }
264
+
265
+ obs->showPreview();
183
266
  return info.Env().Undefined();
184
267
  }
185
268
 
@@ -193,14 +276,31 @@ Napi::Value ObsHidePreview(const Napi::CallbackInfo& info) {
193
276
  return info.Env().Undefined();
194
277
  }
195
278
 
196
- Napi::Value ObsGetPreviewScaleFactor(const Napi::CallbackInfo& info) {
279
+ Napi::Value ObsDisablePreview(const Napi::CallbackInfo& info) {
197
280
  if (!obs) {
198
- blog(LOG_ERROR, "ObsGetPreviewScaleFactor called but obs is not initialized");
281
+ blog(LOG_ERROR, "ObsDisablePreview called but obs is not initialized");
199
282
  throw std::runtime_error("Obs not initialized");
200
283
  }
201
284
 
202
- float scaleFactor = obs->getPreviewScaleFactor();
203
- return Napi::Number::New(info.Env(), scaleFactor);
285
+ obs->disablePreview();
286
+ return info.Env().Undefined();
287
+ }
288
+
289
+ Napi::Value ObsGetPreviewInfo(const Napi::CallbackInfo& info) {
290
+ if (!obs) {
291
+ blog(LOG_ERROR, "ObsGetPreviewInfo called but obs is not initialized");
292
+ throw std::runtime_error("Obs not initialized");
293
+ }
294
+
295
+ PreviewInfo previewInfo = obs->getPreviewInfo();
296
+
297
+ Napi::Object result = Napi::Object::New(info.Env());
298
+ result.Set("canvasWidth", Napi::Number::New(info.Env(), previewInfo.canvasWidth));
299
+ result.Set("canvasHeight", Napi::Number::New(info.Env(), previewInfo.canvasHeight));
300
+ result.Set("previewWidth", Napi::Number::New(info.Env(), previewInfo.displayWidth));
301
+ result.Set("previewHeight", Napi::Number::New(info.Env(), previewInfo.displayHeight));
302
+
303
+ return result;
204
304
  }
205
305
 
206
306
  Napi::Value ObsCreateSource(const Napi::CallbackInfo& info) {
@@ -221,8 +321,8 @@ Napi::Value ObsCreateSource(const Napi::CallbackInfo& info) {
221
321
  std::string name = info[0].As<Napi::String>().Utf8Value();
222
322
  std::string type = info[1].As<Napi::String>().Utf8Value();
223
323
 
224
- obs->createSource(name, type);
225
- return info.Env().Undefined();
324
+ std::string real_name = obs->createSource(name, type);
325
+ return Napi::String::New(info.Env(), real_name);
226
326
  }
227
327
 
228
328
  Napi::Value ObsDeleteSource(const Napi::CallbackInfo& info) {
@@ -309,25 +409,96 @@ Napi::Value ObsGetSourceProperties(const Napi::CallbackInfo& info) {
309
409
  return result;
310
410
  }
311
411
 
312
- Napi::Value ObsCreateScene(const Napi::CallbackInfo& info) {
412
+
413
+ Napi::Value ObsSetMuteAudioInputs(const Napi::CallbackInfo& info) {
313
414
  if (!obs) {
314
- blog(LOG_ERROR, "ObsCreateScene called but obs is not initialized");
415
+ blog(LOG_ERROR, "ObsSetMuteAudioInputs called but obs is not initialized");
315
416
  throw std::runtime_error("Obs not initialized");
316
417
  }
317
418
 
318
- bool valid = info.Length() == 2 &&
319
- info[0].IsString() && // Scene name
320
- info[1].IsString(); // Source type
419
+ bool valid = info.Length() == 1 && info[0].IsBoolean();
321
420
 
322
421
  if (!valid) {
323
- Napi::TypeError::New(info.Env(), "Invalid arguments passed to ObsCreateScene").ThrowAsJavaScriptException();
324
- return info.Env().Undefined();
422
+ Napi::TypeError::New(info.Env(), "Invalid arguments passed to ObsSetMuteAudioInputs").ThrowAsJavaScriptException();
423
+ return info.Env().Undefined();
325
424
  }
326
425
 
426
+ bool mute = info[0].As<Napi::Boolean>().Value();
427
+ obs->setMuteAudioInputs(mute);
428
+ return info.Env().Undefined();
429
+ }
430
+
431
+ Napi::Value ObsSetSourceVolume(const Napi::CallbackInfo& info) {
432
+ if (!obs) {
433
+ blog(LOG_ERROR, "ObsSetSourceVolume called but obs is not initialized");
434
+ throw std::runtime_error("Obs not initialized");
435
+ }
436
+
437
+ bool valid = info.Length() == 2 && info[0].IsString() && info[1].IsNumber();
327
438
  std::string name = info[0].As<Napi::String>().Utf8Value();
328
- std::string type = info[1].As<Napi::String>().Utf8Value();
439
+ float volume = info[1].As<Napi::Number>().FloatValue();
440
+
441
+ if (!valid || (volume < 0.0f || volume > 1.0f)) {
442
+ Napi::TypeError::New(info.Env(), "Invalid arguments passed to ObsSetOutputVolume").ThrowAsJavaScriptException();
443
+ return info.Env().Undefined();
444
+ }
445
+
446
+ obs->setSourceVolume(name,volume);
447
+ return info.Env().Undefined();
448
+ }
449
+
450
+ Napi::Value ObsSetVolmeterEnabled(const Napi::CallbackInfo& info) {
451
+ if (!obs) {
452
+ blog(LOG_ERROR, "ObsSetVolmeterEnabled called but obs is not initialized");
453
+ throw std::runtime_error("Obs not initialized");
454
+ }
455
+
456
+ bool valid = info.Length() == 1 && info[0].IsBoolean();
457
+
458
+
459
+ if (!valid) {
460
+ Napi::TypeError::New(info.Env(), "Invalid arguments passed to ObsSetVolmeterEnabled").ThrowAsJavaScriptException();
461
+ return info.Env().Undefined();
462
+ }
463
+
464
+ bool enabled = info[0].As<Napi::Boolean>().Value();
465
+ obs->setVolmeterEnabled(enabled);
466
+ return info.Env().Undefined();
467
+ }
468
+
469
+ Napi::Value ObsSetAudioSuppression(const Napi::CallbackInfo& info) {
470
+ if (!obs) {
471
+ blog(LOG_ERROR, "ObsSetAudioSuppression called but obs is not initialized");
472
+ throw std::runtime_error("Obs not initialized");
473
+ }
474
+
475
+ bool valid = info.Length() == 1 && info[0].IsBoolean();
476
+
477
+ if (!valid) {
478
+ Napi::TypeError::New(info.Env(), "Invalid arguments passed to ObsSetAudioSuppression").ThrowAsJavaScriptException();
479
+ return info.Env().Undefined();
480
+ }
481
+
482
+ bool enabled = info[0].As<Napi::Boolean>().Value();
483
+ obs->setAudioSuppression(enabled);
484
+ return info.Env().Undefined();
485
+ }
486
+
487
+ Napi::Value ObsSetForceMono(const Napi::CallbackInfo& info) {
488
+ if (!obs) {
489
+ blog(LOG_ERROR, "ObsSetForceMono called but obs is not initialized");
490
+ throw std::runtime_error("Obs not initialized");
491
+ }
492
+
493
+ bool valid = info.Length() == 1 && info[0].IsBoolean();
494
+
495
+ if (!valid) {
496
+ Napi::TypeError::New(info.Env(), "Invalid arguments passed to ObsSetForceMono").ThrowAsJavaScriptException();
497
+ return info.Env().Undefined();
498
+ }
329
499
 
330
- obs->createSource(name, type);
500
+ bool enabled = info[0].As<Napi::Boolean>().Value();
501
+ obs->setForceMono(enabled);
331
502
  return info.Env().Undefined();
332
503
  }
333
504
 
@@ -447,11 +618,15 @@ Napi::Object Init(Napi::Env env, Napi::Object exports) {
447
618
  exports.Set("Init", Napi::Function::New(env, ObsInit));
448
619
  exports.Set("Shutdown", Napi::Function::New(env, ObsShutdown));
449
620
  exports.Set("SetRecordingDir", Napi::Function::New(env, ObsSetRecordingDir));
621
+ exports.Set("ResetVideoContext", Napi::Function::New(env, ObsResetVideoContext));
622
+ exports.Set("ListVideoEncoders", Napi::Function::New(env, ObsListVideoEncoders));
623
+ exports.Set("SetVideoEncoder", Napi::Function::New(env, ObsSetVideoEncoder));
450
624
 
451
625
  exports.Set("SetBuffering", Napi::Function::New(env, ObsSetBuffering));
452
626
  exports.Set("StartBuffer", Napi::Function::New(env, ObsStartBuffer));
453
627
  exports.Set("StartRecording", Napi::Function::New(env, ObsStartRecording));
454
628
  exports.Set("StopRecording", Napi::Function::New(env, ObsStopRecording));
629
+ exports.Set("ForceStopRecording", Napi::Function::New(env, ObsForceStopRecording));
455
630
  exports.Set("GetLastRecording", Napi::Function::New(env, ObsGetLastRecording));
456
631
 
457
632
  exports.Set("CreateSource", Napi::Function::New(env, ObsCreateSource));
@@ -459,6 +634,11 @@ Napi::Object Init(Napi::Env env, Napi::Object exports) {
459
634
  exports.Set("GetSourceSettings", Napi::Function::New(env, ObsGetSourceSettings));
460
635
  exports.Set("SetSourceSettings", Napi::Function::New(env, ObsSetSourceSettings));
461
636
  exports.Set("GetSourceProperties", Napi::Function::New(env, ObsGetSourceProperties));
637
+ exports.Set("SetMuteAudioInputs", Napi::Function::New(env, ObsSetMuteAudioInputs));
638
+ exports.Set("SetSourceVolume", Napi::Function::New(env, ObsSetSourceVolume));
639
+ exports.Set("SetVolmeterEnabled", Napi::Function::New(env, ObsSetVolmeterEnabled));
640
+ exports.Set("SetAudioSuppression", Napi::Function::New(env, ObsSetAudioSuppression));
641
+ exports.Set("SetForceMono", Napi::Function::New(env, ObsSetForceMono));
462
642
 
463
643
  exports.Set("AddSourceToScene", Napi::Function::New(env, ObsAddSourceToScene));
464
644
  exports.Set("RemoveSourceFromScene", Napi::Function::New(env, ObsRemoveSourceFromScene));
@@ -466,9 +646,11 @@ Napi::Object Init(Napi::Env env, Napi::Object exports) {
466
646
  exports.Set("SetSourcePos", Napi::Function::New(env, ObsSetSourcePos));
467
647
 
468
648
  exports.Set("InitPreview", Napi::Function::New(env, ObsInitPreview));
649
+ exports.Set("ConfigurePreview", Napi::Function::New(env, ObsConfigurePreview));
469
650
  exports.Set("ShowPreview", Napi::Function::New(env, ObsShowPreview));
470
651
  exports.Set("HidePreview", Napi::Function::New(env, ObsHidePreview));
471
- exports.Set("GetPreviewScaleFactor", Napi::Function::New(env, ObsGetPreviewScaleFactor));
652
+ exports.Set("DisablePreview", Napi::Function::New(env, ObsDisablePreview));
653
+ exports.Set("GetPreviewInfo", Napi::Function::New(env, ObsGetPreviewInfo));
472
654
  exports.Set("GetDrawSourceOutlineEnabled", Napi::Function::New(env, ObsGetDrawSourceOutlineEnabled));
473
655
  exports.Set("SetDrawSourceOutline", Napi::Function::New(env, ObsSetDrawSourceOutline));
474
656