@life-palette/media 0.2.1

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.
@@ -0,0 +1,135 @@
1
+ //#region src/analyze.d.ts
2
+ /**
3
+ * Browser-side media analysis:
4
+ * - images: blurhash / arthash / dominant colors / EXIF
5
+ * - videos: mediainfo metadata + EXIF
6
+ */
7
+ export declare const MEDIA_ANALYSIS_SCHEMA_VERSION: 1;
8
+ export declare const ARTHASH_CODEC: "rect-v64";
9
+ export interface MediaColor {
10
+ b: number;
11
+ g: number;
12
+ hex: string;
13
+ is_primary: boolean;
14
+ percentage: number;
15
+ r: number;
16
+ rank: number;
17
+ }
18
+ export interface ImageExif {
19
+ altitude?: number;
20
+ device_make?: string;
21
+ device_model?: string;
22
+ exposure_time?: string;
23
+ f_number?: string;
24
+ focal_length?: string;
25
+ iso?: number;
26
+ lat?: number;
27
+ lens_model?: string;
28
+ lng?: number;
29
+ orientation?: number;
30
+ raw?: Record<string, unknown>;
31
+ taken_at?: string;
32
+ }
33
+ export interface ImageMediaAnalysis {
34
+ arthash?: string;
35
+ arthash_codec?: typeof ARTHASH_CODEC;
36
+ blurhash?: string;
37
+ colors: MediaColor[];
38
+ exif: ImageExif;
39
+ }
40
+ export interface VideoMediaAnalysis {
41
+ bitrate?: number;
42
+ codec?: string;
43
+ creation_time?: string;
44
+ duration?: number;
45
+ exif?: ImageExif;
46
+ frame_rate?: number;
47
+ height?: number;
48
+ metadata?: Record<string, unknown>;
49
+ width?: number;
50
+ }
51
+ export interface MediaAnalysisResult {
52
+ basic: {
53
+ name: string;
54
+ type: string;
55
+ extension: string;
56
+ size: number;
57
+ md5: string;
58
+ width?: number;
59
+ height?: number;
60
+ };
61
+ image?: ImageMediaAnalysis;
62
+ schema_version: typeof MEDIA_ANALYSIS_SCHEMA_VERSION;
63
+ video?: VideoMediaAnalysis;
64
+ }
65
+ export interface AnalyzeMediaOptions {
66
+ /** Maximum dimension used for browser-side image analysis. */
67
+ analysisMaxDimension?: number;
68
+ /** BlurHash horizontal component count. */
69
+ blurhashComponentX?: number;
70
+ /** BlurHash vertical component count. */
71
+ blurhashComponentY?: number;
72
+ /** Number of dominant colors to return. Defaults to the backend's current five-color contract. */
73
+ colorCount?: number;
74
+ /** Include the complete parsed EXIF/XMP object. Disabled by default for privacy and payload size. */
75
+ includeRawExif?: boolean;
76
+ onProgress?: (progress: {
77
+ stage: "md5" | "decode" | "analyze";
78
+ percent: number;
79
+ }) => void;
80
+ }
81
+ export declare function analyzeMedia(file: File, options?: AnalyzeMediaOptions): Promise<MediaAnalysisResult>;
82
+ //#endregion
83
+ //#region src/hash.d.ts
84
+ /**
85
+ * Browser-side MD5 hashing (lazy-loaded).
86
+ *
87
+ * spark-md5 是纯 JS 实现,体积小;动态导入让 bundler 不把它打进 dist,
88
+ * consumer 必须把它列为 `peerDependency` 或 `optionalDependencies`。
89
+ */
90
+ export interface HashProgress {
91
+ loaded: number;
92
+ percent: number;
93
+ total: number;
94
+ }
95
+ /**
96
+ * 计算 Blob/File 的 MD5 摘要(hex string)。
97
+ * 静态方法,便于在 Worker / OffscreenCanvas 等环境调用。
98
+ */
99
+ export declare function hashBlob(blob: Blob, onProgress?: (progress: HashProgress) => void): Promise<string>;
100
+ //#endregion
101
+ //#region src/video-metadata.d.ts
102
+ export interface VideoExifMetadata {
103
+ altitude?: number;
104
+ device_make?: string;
105
+ device_model?: string;
106
+ exposure_time?: string;
107
+ f_number?: string;
108
+ focal_length?: string;
109
+ iso?: number;
110
+ lat?: number;
111
+ lens_model?: string;
112
+ lng?: number;
113
+ taken_at?: string;
114
+ }
115
+ export interface VideoTechnicalMetadata {
116
+ bitrate?: number;
117
+ codec?: string;
118
+ creation_time?: string;
119
+ duration?: number;
120
+ exif?: VideoExifMetadata;
121
+ frame_rate?: number;
122
+ height?: number;
123
+ metadata?: Record<string, unknown>;
124
+ width?: number;
125
+ }
126
+ /** Compatibility mapper for callers that still provide the old MediaInfo shape. */
127
+ export declare function mapMediaInfoResult(input: {
128
+ media?: {
129
+ track?: Record<string, unknown>[];
130
+ };
131
+ }): VideoTechnicalMetadata;
132
+ export declare function loadMediaInfoVideoMetadata(file: Blob & {
133
+ name?: string;
134
+ }): Promise<VideoTechnicalMetadata>;
135
+ //#endregion
@@ -0,0 +1,135 @@
1
+ //#region src/analyze.d.ts
2
+ /**
3
+ * Browser-side media analysis:
4
+ * - images: blurhash / arthash / dominant colors / EXIF
5
+ * - videos: mediainfo metadata + EXIF
6
+ */
7
+ export declare const MEDIA_ANALYSIS_SCHEMA_VERSION: 1;
8
+ export declare const ARTHASH_CODEC: "rect-v64";
9
+ export interface MediaColor {
10
+ b: number;
11
+ g: number;
12
+ hex: string;
13
+ is_primary: boolean;
14
+ percentage: number;
15
+ r: number;
16
+ rank: number;
17
+ }
18
+ export interface ImageExif {
19
+ altitude?: number;
20
+ device_make?: string;
21
+ device_model?: string;
22
+ exposure_time?: string;
23
+ f_number?: string;
24
+ focal_length?: string;
25
+ iso?: number;
26
+ lat?: number;
27
+ lens_model?: string;
28
+ lng?: number;
29
+ orientation?: number;
30
+ raw?: Record<string, unknown>;
31
+ taken_at?: string;
32
+ }
33
+ export interface ImageMediaAnalysis {
34
+ arthash?: string;
35
+ arthash_codec?: typeof ARTHASH_CODEC;
36
+ blurhash?: string;
37
+ colors: MediaColor[];
38
+ exif: ImageExif;
39
+ }
40
+ export interface VideoMediaAnalysis {
41
+ bitrate?: number;
42
+ codec?: string;
43
+ creation_time?: string;
44
+ duration?: number;
45
+ exif?: ImageExif;
46
+ frame_rate?: number;
47
+ height?: number;
48
+ metadata?: Record<string, unknown>;
49
+ width?: number;
50
+ }
51
+ export interface MediaAnalysisResult {
52
+ basic: {
53
+ name: string;
54
+ type: string;
55
+ extension: string;
56
+ size: number;
57
+ md5: string;
58
+ width?: number;
59
+ height?: number;
60
+ };
61
+ image?: ImageMediaAnalysis;
62
+ schema_version: typeof MEDIA_ANALYSIS_SCHEMA_VERSION;
63
+ video?: VideoMediaAnalysis;
64
+ }
65
+ export interface AnalyzeMediaOptions {
66
+ /** Maximum dimension used for browser-side image analysis. */
67
+ analysisMaxDimension?: number;
68
+ /** BlurHash horizontal component count. */
69
+ blurhashComponentX?: number;
70
+ /** BlurHash vertical component count. */
71
+ blurhashComponentY?: number;
72
+ /** Number of dominant colors to return. Defaults to the backend's current five-color contract. */
73
+ colorCount?: number;
74
+ /** Include the complete parsed EXIF/XMP object. Disabled by default for privacy and payload size. */
75
+ includeRawExif?: boolean;
76
+ onProgress?: (progress: {
77
+ stage: "md5" | "decode" | "analyze";
78
+ percent: number;
79
+ }) => void;
80
+ }
81
+ export declare function analyzeMedia(file: File, options?: AnalyzeMediaOptions): Promise<MediaAnalysisResult>;
82
+ //#endregion
83
+ //#region src/hash.d.ts
84
+ /**
85
+ * Browser-side MD5 hashing (lazy-loaded).
86
+ *
87
+ * spark-md5 是纯 JS 实现,体积小;动态导入让 bundler 不把它打进 dist,
88
+ * consumer 必须把它列为 `peerDependency` 或 `optionalDependencies`。
89
+ */
90
+ export interface HashProgress {
91
+ loaded: number;
92
+ percent: number;
93
+ total: number;
94
+ }
95
+ /**
96
+ * 计算 Blob/File 的 MD5 摘要(hex string)。
97
+ * 静态方法,便于在 Worker / OffscreenCanvas 等环境调用。
98
+ */
99
+ export declare function hashBlob(blob: Blob, onProgress?: (progress: HashProgress) => void): Promise<string>;
100
+ //#endregion
101
+ //#region src/video-metadata.d.ts
102
+ export interface VideoExifMetadata {
103
+ altitude?: number;
104
+ device_make?: string;
105
+ device_model?: string;
106
+ exposure_time?: string;
107
+ f_number?: string;
108
+ focal_length?: string;
109
+ iso?: number;
110
+ lat?: number;
111
+ lens_model?: string;
112
+ lng?: number;
113
+ taken_at?: string;
114
+ }
115
+ export interface VideoTechnicalMetadata {
116
+ bitrate?: number;
117
+ codec?: string;
118
+ creation_time?: string;
119
+ duration?: number;
120
+ exif?: VideoExifMetadata;
121
+ frame_rate?: number;
122
+ height?: number;
123
+ metadata?: Record<string, unknown>;
124
+ width?: number;
125
+ }
126
+ /** Compatibility mapper for callers that still provide the old MediaInfo shape. */
127
+ export declare function mapMediaInfoResult(input: {
128
+ media?: {
129
+ track?: Record<string, unknown>[];
130
+ };
131
+ }): VideoTechnicalMetadata;
132
+ export declare function loadMediaInfoVideoMetadata(file: Blob & {
133
+ name?: string;
134
+ }): Promise<VideoTechnicalMetadata>;
135
+ //#endregion