ugcinc 4.22.0 → 4.23.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/README.md +18 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +5 -1
- package/dist/media-analysis.d.ts +1739 -210
- package/dist/media-analysis.js +27 -2
- package/dist/media.d.ts +5 -1
- package/dist/media.js +8 -0
- package/dist/tools/media.js +2 -0
- package/dist/types.d.ts +1 -1
- package/package.json +1 -1
package/dist/media-analysis.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.mediaAnalysisResultSchema = exports.videoTextResultSchema = exports.imageTextResultSchema = exports.textLineSchema = exports.textRegionSchema = exports.readVideoTextSchema = exports.readImageTextSchema = exports.scenesResultSchema = exports.framesResultSchema = exports.analysisSourceSchema = exports.mediaAnalysisStatusSchema = exports.extractFramesSchema = exports.detectScenesSchema = void 0;
|
|
3
|
+
exports.mediaAnalysisResultSchema = exports.audioTranscriptResultSchema = exports.audioLevelsResultSchema = exports.measureAudioLevelsSchema = exports.transcribeAudioSchema = exports.videoTextResultSchema = exports.imageTextResultSchema = exports.textLineSchema = exports.textRegionSchema = exports.readVideoTextSchema = exports.readImageTextSchema = exports.scenesResultSchema = exports.framesResultSchema = exports.analysisSourceSchema = exports.mediaAnalysisStatusSchema = exports.extractFramesSchema = exports.detectScenesSchema = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const videoUrl = zod_1.z.string().url().max(8192).refine(value => {
|
|
6
6
|
const url = new URL(value);
|
|
@@ -62,4 +62,29 @@ exports.videoTextResultSchema = zod_1.z.object({ version: zod_1.z.literal(1), op
|
|
|
62
62
|
coverage: zod_1.z.object({ mode: zod_1.z.enum(['fast', 'frame_scan']), range: intervalSchema, complete: zod_1.z.boolean(), uninspected: zod_1.z.array(intervalSchema),
|
|
63
63
|
inspected: zod_1.z.array(intervalSchema.extend({ frameIndex: zod_1.z.number().int(), sourcePts: zod_1.z.string() })) }),
|
|
64
64
|
});
|
|
65
|
-
|
|
65
|
+
const audioRange = zod_1.z.object({ startMs: time, endMs: time }).strict().refine(v => v.endMs > v.startMs && v.endMs - v.startMs <= 120000, 'Audio range must be positive and at most 120 seconds');
|
|
66
|
+
exports.transcribeAudioSchema = zod_1.z.object({ url: videoUrl, range: audioRange.optional(),
|
|
67
|
+
language: zod_1.z.enum(['auto', 'en', 'es', 'fr', 'de', 'it', 'pt', 'ja', 'ko', 'zh', 'ar', 'hi', 'ru']).default('auto'),
|
|
68
|
+
timing: zod_1.z.enum(['word', 'segment']).default('word'), channel: zod_1.z.number().int().min(0).max(1).optional() }).strict();
|
|
69
|
+
exports.measureAudioLevelsSchema = zod_1.z.object({ url: videoUrl, range: audioRange.optional(),
|
|
70
|
+
windowMs: zod_1.z.number().finite().min(20).max(5000).default(100), silenceThresholdDbfs: zod_1.z.number().finite().min(-100).max(-10).default(-50) }).strict();
|
|
71
|
+
const audioSourceSchema = zod_1.z.object({ sha256: zod_1.z.string(), bytes: zod_1.z.number(), hasAudio: zod_1.z.boolean(), durationMs: time, originStartMs: zod_1.z.number(),
|
|
72
|
+
audioStartPts: zod_1.z.string().nullable(), audioTimeBase: zod_1.z.string().nullable(), sampleRate: zod_1.z.number().nullable(), channels: zod_1.z.number().nullable(), channelLayout: zod_1.z.string().nullable(), audioOffsetMs: zod_1.z.number().nullable() });
|
|
73
|
+
const audioCoverageSchema = zod_1.z.object({ requestedRange: intervalSchema, analyzed: zod_1.z.array(intervalSchema), withoutAudio: zod_1.z.array(intervalSchema), sampleRoundingToleranceMs: time });
|
|
74
|
+
const dbValue = zod_1.z.number().finite().nullable();
|
|
75
|
+
const levelChannelSchema = zod_1.z.object({ index: zod_1.z.number().int(), rmsDbfs: dbValue, samplePeakDbfs: dbValue, potentialClippedSamples: zod_1.z.number().int().nonnegative() });
|
|
76
|
+
exports.audioLevelsResultSchema = zod_1.z.object({ version: zod_1.z.literal(1), operation: zod_1.z.literal('measure_audio_levels'), source: audioSourceSchema,
|
|
77
|
+
status: zod_1.z.enum(['no_audio', 'measured']), coverage: audioCoverageSchema,
|
|
78
|
+
channels: zod_1.z.array(levelChannelSchema.extend({ truePeakDbtp: dbValue, sampleCount: zod_1.z.number().int(), intersampleOvershoot: zod_1.z.boolean() })),
|
|
79
|
+
windows: zod_1.z.array(intervalSchema.extend({ channels: zod_1.z.array(levelChannelSchema) })), silence: zod_1.z.array(intervalSchema), integratedLufs: dbValue, truePeakDbtp: dbValue,
|
|
80
|
+
loudnessTimeline: zod_1.z.array(intervalSchema.extend({ momentaryLufs: dbValue, shortTermLufs: dbValue })),
|
|
81
|
+
settings: zod_1.z.object({ windowMs: zod_1.z.number(), silenceThresholdDbfs: zod_1.z.number(), silenceMethod: zod_1.z.literal('all-channel-window-rms'), potentialClippingThreshold: zod_1.z.number(), channelPolicy: zod_1.z.literal('native-separate'), loudnessMethod: zod_1.z.literal('FFmpeg-ebur128-native-channels'), ffmpegVersion: zod_1.z.string() }),
|
|
82
|
+
warnings: zod_1.z.array(zod_1.z.string()), previewUrl: zod_1.z.string().url().optional(), manifestUrl: zod_1.z.string().url() });
|
|
83
|
+
const speechModelSchema = zod_1.z.object({ name: zod_1.z.string(), repository: zod_1.z.string(), revision: zod_1.z.string(), sha256: zod_1.z.record(zod_1.z.string()), runtime: zod_1.z.string(), device: zod_1.z.literal('cpu'), computeType: zod_1.z.literal('int8'), vad: zod_1.z.string(), beamSize: zod_1.z.number(), temperature: zod_1.z.number(), conditionOnPreviousText: zod_1.z.boolean() });
|
|
84
|
+
const estimatedWord = zod_1.z.object({ text: zod_1.z.string(), startMs: zod_1.z.number().finite(), endMs: zod_1.z.number().finite(), timing: zod_1.z.literal('estimated'), probability: zod_1.z.number() });
|
|
85
|
+
exports.audioTranscriptResultSchema = zod_1.z.object({ version: zod_1.z.literal(1), operation: zod_1.z.literal('transcribe_audio'), source: audioSourceSchema,
|
|
86
|
+
status: zod_1.z.enum(['no_audio', 'no_speech_detected', 'transcribed']), text: zod_1.z.string(), coverage: audioCoverageSchema, model: speechModelSchema,
|
|
87
|
+
segments: zod_1.z.array(zod_1.z.object({ index: zod_1.z.number().int(), text: zod_1.z.string(), startMs: zod_1.z.number().finite(), endMs: zod_1.z.number().finite(), timing: zod_1.z.literal('estimated'), avgLogProbability: zod_1.z.number(), noSpeechProbability: zod_1.z.number(), words: zod_1.z.array(estimatedWord) })),
|
|
88
|
+
language: zod_1.z.string().nullable(), languageProbability: zod_1.z.number().nullable(), segmentTiming: zod_1.z.enum(['estimated', 'unavailable']), wordTiming: zod_1.z.enum(['estimated', 'unavailable']), speakerLabels: zod_1.z.literal('unavailable'),
|
|
89
|
+
channelPolicy: zod_1.z.string(), warnings: zod_1.z.array(zod_1.z.string()), audioPreviewUrl: zod_1.z.string().url().optional(), manifestUrl: zod_1.z.string().url() });
|
|
90
|
+
exports.mediaAnalysisResultSchema = zod_1.z.discriminatedUnion('operation', [exports.framesResultSchema, exports.scenesResultSchema, exports.imageTextResultSchema, exports.videoTextResultSchema, exports.audioTranscriptResultSchema, exports.audioLevelsResultSchema]);
|
package/dist/media.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BaseClient } from './base';
|
|
2
|
-
import type { ExtractFramesParams, DetectScenesParams, ReadImageTextParams, ReadVideoTextParams, MediaAnalysisJob } from './media-analysis';
|
|
2
|
+
import type { TranscribeAudioParams, MeasureAudioLevelsParams, ExtractFramesParams, DetectScenesParams, ReadImageTextParams, ReadVideoTextParams, MediaAnalysisJob } from './media-analysis';
|
|
3
3
|
import type { ListProfilePostsParams, ListProfilePostsResult, DownloadSocialPostParams, DownloadSocialPostResult } from './social-acquisition';
|
|
4
4
|
import type { ApiResponse } from './types';
|
|
5
5
|
export interface UserMedia {
|
|
@@ -200,6 +200,10 @@ export interface OwnedUploadResponse {
|
|
|
200
200
|
* Client for managing media files
|
|
201
201
|
*/
|
|
202
202
|
export declare class MediaClient extends BaseClient {
|
|
203
|
+
/** Transcribe locally with explicit estimated segment/word timing. */
|
|
204
|
+
transcribeAudio(params: TranscribeAudioParams): Promise<ApiResponse<MediaAnalysisJob>>;
|
|
205
|
+
/** Measure native-channel loudness, RMS/peaks, silence and potential clipping. */
|
|
206
|
+
measureAudioLevels(params: MeasureAudioLevelsParams): Promise<ApiResponse<MediaAnalysisJob>>;
|
|
203
207
|
/** Read English text with source-coordinate polygons and an annotated preview. */
|
|
204
208
|
readImageText(params: ReadImageTextParams): Promise<ApiResponse<MediaAnalysisJob>>;
|
|
205
209
|
readVideoText(params: ReadVideoTextParams): Promise<ApiResponse<MediaAnalysisJob>>;
|
package/dist/media.js
CHANGED
|
@@ -6,6 +6,14 @@ const base_1 = require("./base");
|
|
|
6
6
|
* Client for managing media files
|
|
7
7
|
*/
|
|
8
8
|
class MediaClient extends base_1.BaseClient {
|
|
9
|
+
/** Transcribe locally with explicit estimated segment/word timing. */
|
|
10
|
+
async transcribeAudio(params) {
|
|
11
|
+
return this.waitForAnalysis(await this.post('/media/analysis/transcribe-audio', params));
|
|
12
|
+
}
|
|
13
|
+
/** Measure native-channel loudness, RMS/peaks, silence and potential clipping. */
|
|
14
|
+
async measureAudioLevels(params) {
|
|
15
|
+
return this.waitForAnalysis(await this.post('/media/analysis/measure-audio-levels', params));
|
|
16
|
+
}
|
|
9
17
|
/** Read English text with source-coordinate polygons and an annotated preview. */
|
|
10
18
|
async readImageText(params) {
|
|
11
19
|
return this.waitForAnalysis(await this.post('/media/analysis/read-image-text', params));
|
package/dist/tools/media.js
CHANGED
|
@@ -4,6 +4,8 @@ exports.mediaTools = void 0;
|
|
|
4
4
|
const media_analysis_1 = require("../media-analysis");
|
|
5
5
|
const zod_1 = require("zod");
|
|
6
6
|
exports.mediaTools = [
|
|
7
|
+
{ name: 'transcribe_audio', description: 'Transcribe audio/video using an owned local speech model. Returns text, source-relative milliseconds, estimated segment/word timings, model details and an audio preview. No forced alignment or speaker separation. Optional range <=120 seconds and channel 0/1; default averages channels. If pending, use get_media_analysis.', schema: media_analysis_1.transcribeAudioSchema, execute: async (client, params) => client.media.transcribeAudio(params) },
|
|
8
|
+
{ name: 'measure_audio_levels', description: 'Measure audio/video native-channel RMS and sample peaks, integrated/momentary/short-term loudness, estimated true peaks, window-based silence and possible clipping. Distinguishes missing audio from silence and sample peaks from intersample overshoot. Optional range <=120 seconds; default windows 100ms. If pending, use get_media_analysis.', schema: media_analysis_1.measureAudioLevelsSchema, execute: async (client, params) => client.media.measureAudioLevels(params) },
|
|
7
9
|
{ name: 'read_image_text', description: 'Read English image text with raw recognition, polygons in display-oriented source pixels, inferred lines/order and confidence. Includes annotated preview. Empty output does not prove no text. If pending, use get_media_analysis.', schema: media_analysis_1.readImageTextSchema, execute: async (client, params) => client.media.readImageText(params) },
|
|
8
10
|
{ name: 'read_video_text', description: 'Read English video text and positional changes. fast samples frames (default 1000ms); frame_scan inspects every decoded frame in range. Returns source PTS, observed text tracks and explicit uninspected gaps. At most 240 inspected frames and 120 seconds per request. Sampling cannot guarantee exact appearance/disappearance. If pending, use get_media_analysis.', schema: media_analysis_1.readVideoTextSchema, execute: async (client, params) => client.media.readVideoText(params) },
|
|
9
11
|
{ name: 'extract_frames', description: 'Extract video frames at timestampsMs or a range {startMs,endMs,intervalMs}; milliseconds relative to the first displayed frame. Returns actual decoded times and optional contact sheet. At most 48 samples. If pending, use get_media_analysis with jobId.', schema: media_analysis_1.extractFramesSchema, execute: async (client, params) => client.media.extractFrames(params) },
|
package/dist/types.d.ts
CHANGED
|
@@ -20,4 +20,4 @@ export interface ErrorResponse {
|
|
|
20
20
|
export type ApiResponse<T> = SuccessResponse<T> | ErrorResponse;
|
|
21
21
|
export type { PublicPostFailureCode, PublicPostRecovery, PublicPostNextAction, PublicPostFailure } from './post-failure';
|
|
22
22
|
export type { ListProfilePostsParams, ListProfilePostsResult, DownloadSocialPostParams, DownloadSocialPostResult, SocialReferencePost, SocialReferenceAsset } from './social-acquisition';
|
|
23
|
-
export type { ReadImageTextParams, ReadVideoTextParams, ImageTextResult, VideoTextResult, ExtractFramesParams, DetectScenesParams, FramesResult, ScenesResult, MediaAnalysisResult, MediaAnalysisJob } from "./media-analysis";
|
|
23
|
+
export type { TranscribeAudioParams, MeasureAudioLevelsParams, AudioTranscriptResult, AudioLevelsResult, ReadImageTextParams, ReadVideoTextParams, ImageTextResult, VideoTextResult, ExtractFramesParams, DetectScenesParams, FramesResult, ScenesResult, MediaAnalysisResult, MediaAnalysisJob } from "./media-analysis";
|