@beeintel/batch-image 0.0.0-stage → 1.0.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/FONT-LICENSE.txt +93 -0
- package/README.md +181 -2
- package/dist/assets/11st-D7qGO5e4.webp +0 -0
- package/dist/assets/UPNG-CPfdwFSy.js +2298 -0
- package/dist/assets/adjust-card-B63b81iV.webp +0 -0
- package/dist/assets/adjust-final.worker-C2JbTvv5.js +6945 -0
- package/dist/assets/amazon-CjTtpZTq.webp +0 -0
- package/dist/assets/ascii_art-B4UGbtGs.webp +0 -0
- package/dist/assets/auction-j26eVUQO.webp +0 -0
- package/dist/assets/background-DGdZUdkL.webp +0 -0
- package/dist/assets/background-card-wK7DRpvM.png +0 -0
- package/dist/assets/body-CUFdRg8w.webp +0 -0
- package/dist/assets/bounded-cutout.worker-BZR6mbaI.js +9615 -0
- package/dist/assets/brand-mark-card-cFUeDeO2.webp +0 -0
- package/dist/assets/buyma-dAxYNjow.webp +0 -0
- package/dist/assets/codec.worker-7W6hmsm6.js +7349 -0
- package/dist/assets/contour_lines-C_CqrgV1.webp +0 -0
- package/dist/assets/creema-B1tWyCPx.webp +0 -0
- package/dist/assets/crop-final.worker-Owin7TvX.js +7035 -0
- package/dist/assets/cutout-CzMvV5An.webp +0 -0
- package/dist/assets/cutout-card-CN4gNFBz.png +0 -0
- package/dist/assets/cutout.worker-DyH6Prbn.js +3894 -0
- package/dist/assets/depop-CkVC5Fn1.webp +0 -0
- package/dist/assets/dewrinkle-kFzP6LqD.webp +0 -0
- package/dist/assets/dither-CcxmO2e6.webp +0 -0
- package/dist/assets/douyin-CP_HwBDF.webp +0 -0
- package/dist/assets/download.worker-DnGSB6P_.js +17779 -0
- package/dist/assets/duotone-Cdg_3fQf.webp +0 -0
- package/dist/assets/ebay-CxLfrRAf.webp +0 -0
- package/dist/assets/edit-Cv-txfZm.webp +0 -0
- package/dist/assets/effect.worker-qu1eCcII.js +9227 -0
- package/dist/assets/engraving-BENh1O2O.webp +0 -0
- package/dist/assets/etsy-CSvz9GpY.webp +0 -0
- package/dist/assets/expand-C60VE9nK.webp +0 -0
- package/dist/assets/facebook-Ca2nJJiQ.webp +0 -0
- package/dist/assets/film_stock-Bqauwcq4.webp +0 -0
- package/dist/assets/final.worker-BnzJ3N5C.js +7035 -0
- package/dist/assets/final.worker-Csc1zoYS.js +7054 -0
- package/dist/assets/final.worker-DzBFT9xk.js +6922 -0
- package/dist/assets/final.worker-XpgKnlaz.js +7217 -0
- package/dist/assets/flatlay-CPiVmlAa.webp +0 -0
- package/dist/assets/flatlay-fold-B-CRYy87.webp +0 -0
- package/dist/assets/flatlay-open-Dzas8okC.webp +0 -0
- package/dist/assets/g-market-DXuYK_JH.webp +0 -0
- package/dist/assets/ghost-BCEAx_Zx.webp +0 -0
- package/dist/assets/ghost-front-WFgA4sUo.webp +0 -0
- package/dist/assets/ghost-three-quarter-Rt8cXj34.webp +0 -0
- package/dist/assets/gif-CObOIITx.js +303 -0
- package/dist/assets/glass_tiles-3IXP-Hmg.webp +0 -0
- package/dist/assets/glitch_art-D1i3qben.webp +0 -0
- package/dist/assets/glitch_blur-C4q_9zyq.webp +0 -0
- package/dist/assets/glow-Bv9EHBU5.webp +0 -0
- package/dist/assets/gradient_map-BR-UVYMP.webp +0 -0
- package/dist/assets/halftone-CWdKu2_6.webp +0 -0
- package/dist/assets/holo_sticker-BQDikLg2.webp +0 -0
- package/dist/assets/idus-7diqRNPs.webp +0 -0
- package/dist/assets/imagetracer.worker-CgunQTPG.js +7096 -0
- package/dist/assets/instagram-Bf0IVidT.webp +0 -0
- package/dist/assets/kakao-talk-Df79L_Mv.webp +0 -0
- package/dist/assets/kaleidoscope-BxqMZuWo.webp +0 -0
- package/dist/assets/karrot-BXFPhDwt.webp +0 -0
- package/dist/assets/kaufland-BDDy6e0C.webp +0 -0
- package/dist/assets/lazada-ConR4e1O.webp +0 -0
- package/dist/assets/lens_flare-DgyiAv_j.webp +0 -0
- package/dist/assets/light_leak-kUdpoFuC.webp +0 -0
- package/dist/assets/line-Dr1j___B.webp +0 -0
- package/dist/assets/linkedin-4s_9Wh03.webp +0 -0
- package/dist/assets/lo_fi-DSdl3yY_.webp +0 -0
- package/dist/assets/logo-preparation.worker-D9oa7SME.js +420 -0
- package/dist/assets/mercado-libre-C8CskEiS.webp +0 -0
- package/dist/assets/mercari-jp-DHj7nz4O.webp +0 -0
- package/dist/assets/metadata.worker-B_9_BgN1.js +6456 -0
- package/dist/assets/mirror_collage-JtSKCeSh.webp +0 -0
- package/dist/assets/model-BbeF-fsf.webp +0 -0
- package/dist/assets/model-BjWhieit.webp +0 -0
- package/dist/assets/momo-BWXO_8Df.webp +0 -0
- package/dist/assets/motion_blur-B8YUHeSg.webp +0 -0
- package/dist/assets/naver-xQKL8lWg.webp +0 -0
- package/dist/assets/nuvemshop-DPt6rnA-.webp +0 -0
- package/dist/assets/olx-B87gp-Il.webp +0 -0
- package/dist/assets/orient-card-Da0ii6mX.webp +0 -0
- package/dist/assets/orient-final.worker-CdF5Y5zD.js +6909 -0
- package/dist/assets/orientation-preview.worker-B7uFzz3J.js +6865 -0
- package/dist/assets/ort.bundle.min-CreFV8V1.js +9311 -0
- package/dist/assets/ort.webgpu.bundle.min-CAudaHZO.js +9311 -0
- package/dist/assets/otto-market-DWZyNKJn.webp +0 -0
- package/dist/assets/paper_texture-CXphyIrs.webp +0 -0
- package/dist/assets/pinterest-ByZqih2J.webp +0 -0
- package/dist/assets/polish-DFy6LNG7.webp +0 -0
- package/dist/assets/poshmark-DnZi2vA1.webp +0 -0
- package/dist/assets/posterize-SpLVGq1s.webp +0 -0
- package/dist/assets/preview.worker-DcrCKKWl.js +380 -0
- package/dist/assets/qoo10-C1pq81Jx.webp +0 -0
- package/dist/assets/rakuten-ulYog1hL.webp +0 -0
- package/dist/assets/recolor-mBX7vdFT.webp +0 -0
- package/dist/assets/resize-DVEAl0Um.webp +0 -0
- package/dist/assets/runtime-0663b902fb3937883a34.wasm +0 -0
- package/dist/assets/runtime-355a5c80c7bfdf8737de.mjs +2817 -0
- package/dist/assets/runtime-49871f5a4409519797e1.wasm +0 -0
- package/dist/assets/runtime-74cf72f9a2b7befc115a.mjs +2817 -0
- package/dist/assets/shadow-card-DTZEH60r.png +0 -0
- package/dist/assets/shopee-Bxfei6sj.webp +0 -0
- package/dist/assets/shopify-wVaBafcF.webp +0 -0
- package/dist/assets/shopline-DMoaJ7Bh.webp +0 -0
- package/dist/assets/sparkle-CD5GSGip.webp +0 -0
- package/dist/assets/ssg-DQoFx5u5.webp +0 -0
- package/dist/assets/staging-CIc8pQJ6.webp +0 -0
- package/dist/assets/standard-cutout.worker-BYLzdpR-.js +1261 -0
- package/dist/assets/text-DQW2mBGp.webp +0 -0
- package/dist/assets/textured_glass-D2coxp7n.webp +0 -0
- package/dist/assets/tga-VGxWDes0.js +752 -0
- package/dist/assets/tilt_shift-BKs46yeX.webp +0 -0
- package/dist/assets/transformers.web-DB57cIO5.js +28891 -0
- package/dist/assets/tritone-CcR4qizk.webp +0 -0
- package/dist/assets/upscale-BrLadyUk.webp +0 -0
- package/dist/assets/upscale-creative-DnZnQufJ.webp +0 -0
- package/dist/assets/upscale-crisp-Ckdmbsnn.webp +0 -0
- package/dist/assets/vinted-1QDsxvC6.webp +0 -0
- package/dist/assets/watercolor-CV67zYNE.webp +0 -0
- package/dist/assets/watermark-CpPrxaT5.webp +0 -0
- package/dist/assets/wave_distortion-CV5jVfK4.webp +0 -0
- package/dist/assets/whatsapp-CWJxqzR6.webp +0 -0
- package/dist/assets/worker-DfrCFP3O.js +55 -0
- package/dist/assets/xerox_noise-CbbHY1S1.webp +0 -0
- package/dist/assets/youtube-DS12d5mi.webp +0 -0
- package/dist/assets/zalando-CenfWOwz.webp +0 -0
- package/dist/browser-adapter.d.ts +4 -0
- package/dist/browser-cutout-capability.d.ts +4 -0
- package/dist/browser-cutout-resources.d.ts +3 -0
- package/dist/browser-local-capabilities.d.ts +5 -0
- package/dist/capabilities.d.ts +18 -0
- package/dist/chunks/AdjustToolPanel-B6dtlFlj.js +195 -0
- package/dist/chunks/BackgroundToolPanel-C3Rr9d4S.js +41 -0
- package/dist/chunks/BatchMaterials-DDoJTaS5.js +806 -0
- package/dist/chunks/BatchModeChoices-DeBARgvY.js +111 -0
- package/dist/chunks/BatchOutputColorPicker-D7WIDS4_.js +75 -0
- package/dist/chunks/BatchReferenceFields-Cr5WgFRJ.js +316 -0
- package/dist/chunks/BeautifyToolPanel-DDZXDQKM.js +215 -0
- package/dist/chunks/BrandMarkToolPanel-vKobk_R3.js +1179 -0
- package/dist/chunks/ContentTrimControl-BKCJEst5.js +297 -0
- package/dist/chunks/CropToolPanel-C_sW5tWL.js +218 -0
- package/dist/chunks/CutoutToolPanel-B7ObmiWd.js +73 -0
- package/dist/chunks/DisclosureToolPanel-F3ccFJIF.js +76 -0
- package/dist/chunks/ExpandToolPanel-BKjj5UJA.js +67 -0
- package/dist/chunks/ImageEffectsToolPanel-CsDIBpT6.js +966 -0
- package/dist/chunks/IpAuditToolPanel-CduDfFh-.js +96 -0
- package/dist/chunks/ListingToolPanel-8pJ2_zvI.js +783 -0
- package/dist/chunks/MaterialSelectionPlate-CW7HaS6v.js +30 -0
- package/dist/chunks/MetadataToolPanel-C8XJOamN.js +104 -0
- package/dist/chunks/OrientToolPanel-C1AzQchm.js +161 -0
- package/dist/chunks/PluginActionFooter.vue_vue_type_script_setup_true_lang-BGe419qz.js +102 -0
- package/dist/chunks/ResizeToolPanel-DWikcj2G.js +1178 -0
- package/dist/chunks/RetouchToolPanel-B4eQKk2W.js +350 -0
- package/dist/chunks/ShadowToolPanel-Bbj76hQd.js +254 -0
- package/dist/chunks/SvgExportToolPanel-BRxpzd7q.js +219 -0
- package/dist/chunks/TranslationToolPanel-Bxv8U2WY.js +125 -0
- package/dist/chunks/UpscaleToolPanel-BRIgpszs.js +127 -0
- package/dist/chunks/engine-D-T-1RSx.js +69 -0
- package/dist/chunks/entry-CboOSe2r.js +42945 -0
- package/dist/chunks/gpu-CScw5MNG.js +231 -0
- package/dist/chunks/hosted-resources-COzZ7nZY.js +8196 -0
- package/dist/chunks/loader-circle-CylCgDqP.js +16 -0
- package/dist/chunks/motionFeatures-D67ghPG1.js +4405 -0
- package/dist/chunks/search-BwsDnulU.js +18 -0
- package/dist/chunks/standard-cutout-vPpP6xBc.js +45 -0
- package/dist/chunks/static-logo-2F9ORZWc.js +34 -0
- package/dist/config.d.ts +66 -0
- package/dist/contracts.d.ts +272 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +13 -0
- package/dist/node/catalog.mjs +45 -0
- package/dist/node/cli.mjs +11 -0
- package/dist/node/index.d.mts +20 -0
- package/dist/node/index.mjs +2 -0
- package/dist/node/prepare.mjs +114 -0
- package/dist/node/vite.mjs +46 -0
- package/dist/processing.d.ts +1 -0
- package/dist/processing.js +12105 -0
- package/dist/remote-contracts.d.ts +114 -0
- package/dist/resource-contracts.d.ts +40 -0
- package/dist/resources/cutout/9ae2e5375a34fa413530954dc20d085d175faffc86108c13619220d0557f80bf.json +1 -0
- package/dist/resources/cutout/f119dabecc64bc436d3d08425dde96ec2598fd40541eba97d8d53a4e8bbdcaea.json +1 -0
- package/dist/resources/cutout/resources.json +195 -0
- package/dist/resources/cutout/sources.json +294 -0
- package/dist/resources.json +1191 -0
- package/dist/service-contracts.d.ts +43 -0
- package/dist/slots.d.ts +21 -0
- package/dist/style.css +1 -0
- package/dist/types/batch/api.d.ts +89 -0
- package/dist/types/batch/cutout-output.d.ts +2 -0
- package/dist/types/batch/features/background/engine.d.mts +12 -0
- package/dist/types/batch/features/basic-edit/contracts.d.ts +87 -0
- package/dist/types/batch/features/basic-edit/engine.d.mts +96 -0
- package/dist/types/batch/features/brand-mark/contracts.d.ts +84 -0
- package/dist/types/batch/features/brand-mark/engine.d.mts +68 -0
- package/dist/types/batch/features/export-compression/contracts.d.ts +44 -0
- package/dist/types/batch/features/export-compression/gifenc.d.ts +33 -0
- package/dist/types/batch/features/export-compression/plan.d.ts +45 -0
- package/dist/types/batch/features/export-compression/presentation.d.ts +70 -0
- package/dist/types/batch/features/export-compression/upng.d.ts +6 -0
- package/dist/types/batch/features/final-image/resize.d.mts +15 -0
- package/dist/types/batch/features/image-effects/contracts.d.ts +58 -0
- package/dist/types/batch/features/image-effects/gpu-pixel-runtime.d.ts +15 -0
- package/dist/types/batch/features/image-effects/photo-audit.d.ts +21 -0
- package/dist/types/batch/features/image-effects/photo-v7-cpu.d.ts +9 -0
- package/dist/types/batch/features/image-effects/profiles-v4.d.ts +157 -0
- package/dist/types/batch/features/image-effects/profiles-v5.d.ts +20 -0
- package/dist/types/batch/features/image-effects/profiles-v6.d.ts +14 -0
- package/dist/types/batch/features/image-effects/profiles-v7.d.ts +53 -0
- package/dist/types/batch/features/image-effects/profiles-v8.d.ts +113 -0
- package/dist/types/batch/features/image-effects/profiles-v9.d.ts +20 -0
- package/dist/types/batch/features/image-translation/params.d.ts +257 -0
- package/dist/types/batch/features/listing-remake/transport.d.ts +21 -0
- package/dist/types/batch/features/metadata/bytes.d.mts +13 -0
- package/dist/types/batch/features/metadata/containers.d.mts +20 -0
- package/dist/types/batch/features/metadata/declaration.d.mts +5 -0
- package/dist/types/batch/features/metadata/engine.d.mts +9 -0
- package/dist/types/batch/features/metadata/exchange.d.mts +48 -0
- package/dist/types/batch/features/shadow/contracts.d.ts +43 -0
- package/dist/types/batch/features/shadow/engine.d.mts +33 -0
- package/dist/types/batch/features/svg-export/download-contract.d.ts +33 -0
- package/dist/types/batch/features/svg-export/download-prepare.d.ts +2 -0
- package/dist/types/batch/features/svg-export/download.d.ts +7 -0
- package/dist/types/batch/features/svg-export/imagetracer.d.ts +6 -0
- package/dist/types/batch/features/svg-export/optimizer.d.ts +2 -0
- package/dist/types/batch/ids.d.ts +1 -0
- package/dist/types/batch/model.d.ts +317 -0
- package/dist/types/batch/public/config.d.ts +66 -0
- package/dist/types/batch/public/contracts.d.ts +272 -0
- package/dist/types/batch/public/remote-contracts.d.ts +114 -0
- package/dist/types/batch/public/resource-contracts.d.ts +40 -0
- package/dist/types/batch/public/service-contracts.d.ts +43 -0
- package/dist/types/batch/queue.d.ts +34 -0
- package/dist/types/batch/receipts.d.ts +85 -0
- package/dist/types/batch/retention.d.ts +13 -0
- package/dist/types/onnxruntime-web.d.ts +5 -0
- package/dist/types/plugins/cutout/core/hosted-resources.d.ts +11 -0
- package/dist/types/processing.d.ts +18 -0
- package/dist/types/shared/svg-security.d.mts +4 -0
- package/dist/types/workspace-worker.d.ts +2 -0
- package/package.json +91 -3
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { type LirSegmentSubmission } from './features/listing-remake/transport';
|
|
2
|
+
import type { WorkspaceServices, WorkspaceTaskSubmission, WorkspaceServiceSource, WorkspaceUploadOptions } from './public/service-contracts';
|
|
3
|
+
export type TaskService = 'node' | 'python-ai';
|
|
4
|
+
export declare class ApiError extends Error {
|
|
5
|
+
code: string;
|
|
6
|
+
accepted: boolean | 'unknown';
|
|
7
|
+
retryAfterMs?: number;
|
|
8
|
+
constructor(code: string, message: string, accepted?: boolean | 'unknown', retryAfterMs?: number);
|
|
9
|
+
}
|
|
10
|
+
/** A separate immutable client is captured by every instance; there is no ambient transport. */
|
|
11
|
+
export declare function createWorkspaceServiceClient(services?: WorkspaceServices): {
|
|
12
|
+
getCapabilities: () => Promise<{
|
|
13
|
+
storage: "local" | "r2";
|
|
14
|
+
taskPersistence: "local_disk";
|
|
15
|
+
authentication: "loopback_only";
|
|
16
|
+
idempotencyRetention: "local_state_lifetime";
|
|
17
|
+
uploadStatus: boolean;
|
|
18
|
+
maxItems: number;
|
|
19
|
+
maxUploadBytes: number;
|
|
20
|
+
maxPixels: number;
|
|
21
|
+
tools: string[];
|
|
22
|
+
metadataExport: boolean;
|
|
23
|
+
assetRetentionHours: number;
|
|
24
|
+
}>;
|
|
25
|
+
getAiCapabilities: () => Promise<{
|
|
26
|
+
taskService: "python-ai";
|
|
27
|
+
queue: "sqlite-huey";
|
|
28
|
+
taskPersistence: "sqlite";
|
|
29
|
+
idempotencyRetention: "local_state_lifetime";
|
|
30
|
+
executor: "rembg" | "fixture";
|
|
31
|
+
tools: string[];
|
|
32
|
+
cutoutModels: string[];
|
|
33
|
+
retouchModes: string[];
|
|
34
|
+
upscaleModes: string[];
|
|
35
|
+
svgEngines: string[];
|
|
36
|
+
beautificationModes: string[];
|
|
37
|
+
lir: {
|
|
38
|
+
maxReferenceImages: number;
|
|
39
|
+
maxAcceptedTasks: number;
|
|
40
|
+
serviceEpoch: string;
|
|
41
|
+
};
|
|
42
|
+
}>;
|
|
43
|
+
uploadLocal: (blob: Blob, filename: string, options?: WorkspaceUploadOptions) => Promise<import("./model").Asset>;
|
|
44
|
+
resolveAsset: (assetId: string, versionId: string) => Promise<import("./model").Asset>;
|
|
45
|
+
submitTask: (submission: WorkspaceTaskSubmission) => Promise<import("./receipts").TaskResponse>;
|
|
46
|
+
queryOriginalTask: (taskId: string) => Promise<import("./receipts").TaskResponse>;
|
|
47
|
+
getTask: (taskId: string, service?: TaskService) => Promise<import("./receipts").TaskResponse>;
|
|
48
|
+
getTaskByRequest: (clientRequestId: string, service?: TaskService) => Promise<import("./receipts").TaskResponse>;
|
|
49
|
+
submitLirSegment: (body: LirSegmentSubmission) => Promise<{
|
|
50
|
+
segmentId: string;
|
|
51
|
+
tasks: import("./receipts").TaskResponse[];
|
|
52
|
+
}>;
|
|
53
|
+
exportDeclaredImage: (source: WorkspaceServiceSource, format: "png" | "jpeg", expectedSha256: string, service?: TaskService) => Promise<Blob>;
|
|
54
|
+
fetchExternalSource: (url: string, expectedSha256?: string, signal?: AbortSignal) => Promise<Blob>;
|
|
55
|
+
fetchExternalThumbnail: (url: string, expectedSha256?: string) => Promise<Blob>;
|
|
56
|
+
};
|
|
57
|
+
export declare const getCapabilities: () => Promise<{
|
|
58
|
+
storage: "local" | "r2";
|
|
59
|
+
taskPersistence: "local_disk";
|
|
60
|
+
authentication: "loopback_only";
|
|
61
|
+
idempotencyRetention: "local_state_lifetime";
|
|
62
|
+
uploadStatus: boolean;
|
|
63
|
+
maxItems: number;
|
|
64
|
+
maxUploadBytes: number;
|
|
65
|
+
maxPixels: number;
|
|
66
|
+
tools: string[];
|
|
67
|
+
metadataExport: boolean;
|
|
68
|
+
assetRetentionHours: number;
|
|
69
|
+
}>, getAiCapabilities: () => Promise<{
|
|
70
|
+
taskService: "python-ai";
|
|
71
|
+
queue: "sqlite-huey";
|
|
72
|
+
taskPersistence: "sqlite";
|
|
73
|
+
idempotencyRetention: "local_state_lifetime";
|
|
74
|
+
executor: "rembg" | "fixture";
|
|
75
|
+
tools: string[];
|
|
76
|
+
cutoutModels: string[];
|
|
77
|
+
retouchModes: string[];
|
|
78
|
+
upscaleModes: string[];
|
|
79
|
+
svgEngines: string[];
|
|
80
|
+
beautificationModes: string[];
|
|
81
|
+
lir: {
|
|
82
|
+
maxReferenceImages: number;
|
|
83
|
+
maxAcceptedTasks: number;
|
|
84
|
+
serviceEpoch: string;
|
|
85
|
+
};
|
|
86
|
+
}>, uploadLocal: (blob: Blob, filename: string, options?: WorkspaceUploadOptions) => Promise<import("./model").Asset>, resolveAsset: (assetId: string, versionId: string) => Promise<import("./model").Asset>, submitTask: (submission: WorkspaceTaskSubmission) => Promise<import("./receipts").TaskResponse>, submitLirSegment: (body: LirSegmentSubmission) => Promise<{
|
|
87
|
+
segmentId: string;
|
|
88
|
+
tasks: import("./receipts").TaskResponse[];
|
|
89
|
+
}>, getTask: (taskId: string, service?: TaskService) => Promise<import("./receipts").TaskResponse>, queryOriginalTask: (taskId: string) => Promise<import("./receipts").TaskResponse>, getTaskByRequest: (clientRequestId: string, service?: TaskService) => Promise<import("./receipts").TaskResponse>, exportDeclaredImage: (source: WorkspaceServiceSource, format: "png" | "jpeg", expectedSha256: string, service?: TaskService) => Promise<Blob>, fetchExternalSource: (url: string, expectedSha256?: string, signal?: AbortSignal) => Promise<Blob>, fetchExternalThumbnail: (url: string, expectedSha256?: string) => Promise<Blob>;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare function processCutoutResult(blob: Blob, params: Readonly<Record<string, unknown>>, signal?: AbortSignal): Promise<Blob>;
|
|
2
|
+
export declare function deriveCutoutCanvas(input: OffscreenCanvas, trimTransparent?: boolean, background?: string, padding?: number): OffscreenCanvas;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface BackgroundParams {
|
|
2
|
+
color: string;
|
|
3
|
+
}
|
|
4
|
+
export function validateBackground(value: unknown): BackgroundParams;
|
|
5
|
+
export function backgroundPixels(
|
|
6
|
+
rgba: Uint8ClampedArray,
|
|
7
|
+
width: number,
|
|
8
|
+
height: number,
|
|
9
|
+
params: BackgroundParams,
|
|
10
|
+
):
|
|
11
|
+
| { kind: 'image'; data: Uint8ClampedArray; width: number; height: number }
|
|
12
|
+
| { kind: 'analysis'; skipped: true; reason: string };
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export interface AdjustParams {
|
|
2
|
+
version: 1;
|
|
3
|
+
brightness: number;
|
|
4
|
+
contrast: number;
|
|
5
|
+
saturation: number;
|
|
6
|
+
vibrance: number;
|
|
7
|
+
temperature: number;
|
|
8
|
+
tint: number;
|
|
9
|
+
}
|
|
10
|
+
/** Numeric components are constrained to positive integers 1..4096 by validateCrop. */
|
|
11
|
+
export type CropRatio = 'original' | 'alpha-bounds' | `${number}:${number}`;
|
|
12
|
+
export type CropAnchor = 'top-left' | 'top' | 'top-right' | 'left' | 'center' | 'right' | 'bottom-left' | 'bottom' | 'bottom-right';
|
|
13
|
+
export interface CropParams {
|
|
14
|
+
version: 1;
|
|
15
|
+
ratio: CropRatio;
|
|
16
|
+
anchor: CropAnchor;
|
|
17
|
+
padding?: number;
|
|
18
|
+
paddingColor?: 'transparent' | `#${string}`;
|
|
19
|
+
}
|
|
20
|
+
export interface CropRect {
|
|
21
|
+
x: number;
|
|
22
|
+
y: number;
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
25
|
+
}
|
|
26
|
+
export type AlphaCropBounds = {
|
|
27
|
+
kind: 'crop';
|
|
28
|
+
rect: CropRect;
|
|
29
|
+
} | {
|
|
30
|
+
kind: 'skip';
|
|
31
|
+
reason: 'fully-transparent' | 'no-transparent-border';
|
|
32
|
+
};
|
|
33
|
+
export type AlphaTrimGeometry = {
|
|
34
|
+
kind: 'skip';
|
|
35
|
+
reason: 'fully-transparent' | 'no-transparent-border' | 'unchanged-padding';
|
|
36
|
+
} | {
|
|
37
|
+
kind: 'render';
|
|
38
|
+
sourceRect: CropRect;
|
|
39
|
+
width: number;
|
|
40
|
+
height: number;
|
|
41
|
+
padding: number;
|
|
42
|
+
};
|
|
43
|
+
export type AlphaTrimPixels = Extract<AlphaTrimGeometry, {
|
|
44
|
+
kind: 'skip';
|
|
45
|
+
}> | {
|
|
46
|
+
kind: 'image';
|
|
47
|
+
data: Uint8ClampedArray;
|
|
48
|
+
width: number;
|
|
49
|
+
height: number;
|
|
50
|
+
};
|
|
51
|
+
export type ResizeParams = {
|
|
52
|
+
original: true;
|
|
53
|
+
} | {
|
|
54
|
+
width: number;
|
|
55
|
+
height: number;
|
|
56
|
+
fit: 'contain' | 'cover';
|
|
57
|
+
background: 'transparent' | `#${string}`;
|
|
58
|
+
position?: CropAnchor;
|
|
59
|
+
allowEnlargement?: boolean;
|
|
60
|
+
kernel?: 'lanczos3' | 'mitchell' | 'cubic' | 'linear';
|
|
61
|
+
};
|
|
62
|
+
export interface ResizeGeometry {
|
|
63
|
+
width: number;
|
|
64
|
+
height: number;
|
|
65
|
+
/** Continuous scaled source rectangle on the output canvas, including cover overflow. */
|
|
66
|
+
imageRect: CropRect;
|
|
67
|
+
/** Enlargement was disabled and the requested fit would scale this source above 1. */
|
|
68
|
+
skipped?: true;
|
|
69
|
+
}
|
|
70
|
+
export interface OrientParams {
|
|
71
|
+
version: 1;
|
|
72
|
+
upright: boolean;
|
|
73
|
+
rotation: 0 | 90 | 180 | 270;
|
|
74
|
+
flipHorizontal: boolean;
|
|
75
|
+
flipVertical: boolean;
|
|
76
|
+
}
|
|
77
|
+
export interface OrientedPixels {
|
|
78
|
+
data: Uint8ClampedArray;
|
|
79
|
+
width: number;
|
|
80
|
+
height: number;
|
|
81
|
+
}
|
|
82
|
+
/** SVG coefficients: x'=a*x+c*y, y'=b*x+d*y, about image center. */
|
|
83
|
+
export interface OrientationDisplayTransform {
|
|
84
|
+
width: number;
|
|
85
|
+
height: number;
|
|
86
|
+
matrix: [number, number, number, number];
|
|
87
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AdjustParams,
|
|
3
|
+
CropParams,
|
|
4
|
+
CropRect,
|
|
5
|
+
AlphaCropBounds,
|
|
6
|
+
AlphaTrimGeometry,
|
|
7
|
+
AlphaTrimPixels,
|
|
8
|
+
OrientParams,
|
|
9
|
+
OrientedPixels,
|
|
10
|
+
OrientationDisplayTransform,
|
|
11
|
+
ResizeParams,
|
|
12
|
+
ResizeGeometry,
|
|
13
|
+
} from './contracts';
|
|
14
|
+
export type {
|
|
15
|
+
AdjustParams,
|
|
16
|
+
CropParams,
|
|
17
|
+
CropRect,
|
|
18
|
+
CropRatio,
|
|
19
|
+
CropAnchor,
|
|
20
|
+
OrientParams,
|
|
21
|
+
OrientedPixels,
|
|
22
|
+
OrientationDisplayTransform,
|
|
23
|
+
ResizeParams,
|
|
24
|
+
ResizeGeometry,
|
|
25
|
+
} from './contracts';
|
|
26
|
+
|
|
27
|
+
export const DEFAULT_ADJUST: Readonly<AdjustParams>;
|
|
28
|
+
export const DEFAULT_CROP: Readonly<CropParams>;
|
|
29
|
+
export function validateAdjust(value: unknown): AdjustParams;
|
|
30
|
+
export function validateCrop(value: unknown): CropParams;
|
|
31
|
+
export function validateTrimPadding(value: unknown): number;
|
|
32
|
+
export function alphaTrimGeometry(
|
|
33
|
+
bounds: AlphaCropBounds,
|
|
34
|
+
width: number,
|
|
35
|
+
height: number,
|
|
36
|
+
padding?: number,
|
|
37
|
+
): AlphaTrimGeometry;
|
|
38
|
+
export function trimAlphaPixels(
|
|
39
|
+
rgba: Uint8ClampedArray,
|
|
40
|
+
width: number,
|
|
41
|
+
height: number,
|
|
42
|
+
padding?: number,
|
|
43
|
+
paddingColor?: CropParams['paddingColor'],
|
|
44
|
+
): AlphaTrimPixels;
|
|
45
|
+
export function isNeutralAdjustment(params: AdjustParams): boolean;
|
|
46
|
+
export function adjustPixels(
|
|
47
|
+
rgba: Uint8ClampedArray,
|
|
48
|
+
width: number,
|
|
49
|
+
height: number,
|
|
50
|
+
params: AdjustParams,
|
|
51
|
+
): Uint8ClampedArray;
|
|
52
|
+
export function computeCropRect(width: number, height: number, params: CropParams): CropRect;
|
|
53
|
+
export function computeAlphaCropRect(
|
|
54
|
+
rgba: Uint8ClampedArray,
|
|
55
|
+
width: number,
|
|
56
|
+
height: number,
|
|
57
|
+
): AlphaCropBounds;
|
|
58
|
+
export function cropPixels(
|
|
59
|
+
rgba: Uint8ClampedArray,
|
|
60
|
+
width: number,
|
|
61
|
+
height: number,
|
|
62
|
+
rect: CropRect,
|
|
63
|
+
): Uint8ClampedArray;
|
|
64
|
+
export function validateResize(value: unknown): ResizeParams;
|
|
65
|
+
/** Continuous geometry; disabled required enlargement returns source identity with skipped:true. */
|
|
66
|
+
export function computeResizeGeometry(
|
|
67
|
+
sourceWidth: number,
|
|
68
|
+
sourceHeight: number,
|
|
69
|
+
params: ResizeParams,
|
|
70
|
+
): ResizeGeometry;
|
|
71
|
+
|
|
72
|
+
export const DEFAULT_ORIENT: Readonly<OrientParams>;
|
|
73
|
+
export function validateOrient(value: unknown): OrientParams;
|
|
74
|
+
/** Manual rotation/flip composition only; source EXIF is the decoder's responsibility. */
|
|
75
|
+
export function isNeutralOrient(params: OrientParams): boolean;
|
|
76
|
+
export function orientPixels(
|
|
77
|
+
rgba: Uint8ClampedArray,
|
|
78
|
+
width: number,
|
|
79
|
+
height: number,
|
|
80
|
+
params: OrientParams,
|
|
81
|
+
): OrientedPixels;
|
|
82
|
+
/** Raw decoded pixels from an EXIF-neutralized preview copy; apply EXIF/manual transforms once. */
|
|
83
|
+
export function orientRawPixels(
|
|
84
|
+
rgba: Uint8ClampedArray,
|
|
85
|
+
width: number,
|
|
86
|
+
height: number,
|
|
87
|
+
params: OrientParams,
|
|
88
|
+
sourceExifOrientation: number,
|
|
89
|
+
): OrientedPixels;
|
|
90
|
+
/** Input is an already upright DOM image; disabling upright requires EXIF 1–8. */
|
|
91
|
+
export function orientationDisplayTransform(
|
|
92
|
+
width: number,
|
|
93
|
+
height: number,
|
|
94
|
+
params: OrientParams,
|
|
95
|
+
sourceExifOrientation?: number,
|
|
96
|
+
): OrientationDisplayTransform;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { CropAnchor } from '../basic-edit/contracts';
|
|
2
|
+
export type BrandMarkAnchor = CropAnchor;
|
|
3
|
+
export interface BrandLogoIdentity {
|
|
4
|
+
assetId: string;
|
|
5
|
+
assetVersionId: string;
|
|
6
|
+
sha256: string;
|
|
7
|
+
}
|
|
8
|
+
export type BrandMarkMode = 'single' | 'tile';
|
|
9
|
+
export type BrandTileDensity = 'sparse' | 'standard' | 'dense';
|
|
10
|
+
export type BrandTileDirection = 'diagonal' | 'horizontal';
|
|
11
|
+
export interface SingleBrandMarkOptions {
|
|
12
|
+
version: 1;
|
|
13
|
+
anchor: BrandMarkAnchor;
|
|
14
|
+
sizePercent: number;
|
|
15
|
+
marginPercent: number;
|
|
16
|
+
opacity: number;
|
|
17
|
+
mode?: 'single';
|
|
18
|
+
}
|
|
19
|
+
export interface TileBrandMarkOptions {
|
|
20
|
+
version: 1;
|
|
21
|
+
mode: 'tile';
|
|
22
|
+
sizePercent: number;
|
|
23
|
+
opacity: number;
|
|
24
|
+
density: number;
|
|
25
|
+
angle: number;
|
|
26
|
+
anchor?: BrandMarkAnchor;
|
|
27
|
+
marginPercent?: number;
|
|
28
|
+
}
|
|
29
|
+
export interface LegacyTileBrandMarkOptions {
|
|
30
|
+
version: 1;
|
|
31
|
+
mode: 'tile';
|
|
32
|
+
sizePercent: number;
|
|
33
|
+
opacity: number;
|
|
34
|
+
density: BrandTileDensity;
|
|
35
|
+
direction: BrandTileDirection;
|
|
36
|
+
anchor?: BrandMarkAnchor;
|
|
37
|
+
marginPercent?: number;
|
|
38
|
+
}
|
|
39
|
+
export type BrandMarkOptions = SingleBrandMarkOptions | TileBrandMarkOptions | LegacyTileBrandMarkOptions;
|
|
40
|
+
export type BrandMarkParams = BrandMarkOptions & {
|
|
41
|
+
logo: BrandLogoIdentity;
|
|
42
|
+
};
|
|
43
|
+
export type NormalizedBrandMarkOptions = SingleBrandMarkOptions | TileBrandMarkOptions;
|
|
44
|
+
export type NormalizedBrandMarkParams = NormalizedBrandMarkOptions & {
|
|
45
|
+
logo: BrandLogoIdentity;
|
|
46
|
+
};
|
|
47
|
+
export interface BrandGeometry {
|
|
48
|
+
width: number;
|
|
49
|
+
height: number;
|
|
50
|
+
x: number;
|
|
51
|
+
y: number;
|
|
52
|
+
canvasWidth: number;
|
|
53
|
+
canvasHeight: number;
|
|
54
|
+
}
|
|
55
|
+
export interface BrandTileGeometry {
|
|
56
|
+
canvasWidth: number;
|
|
57
|
+
canvasHeight: number;
|
|
58
|
+
logoWidth: number;
|
|
59
|
+
logoHeight: number;
|
|
60
|
+
cellWidth: number;
|
|
61
|
+
cellHeight: number;
|
|
62
|
+
originX: number;
|
|
63
|
+
originY: number;
|
|
64
|
+
rotation: number;
|
|
65
|
+
logoX: number;
|
|
66
|
+
logoY: number;
|
|
67
|
+
}
|
|
68
|
+
export type BrandComposeResult = {
|
|
69
|
+
kind: 'image';
|
|
70
|
+
data: Uint8ClampedArray;
|
|
71
|
+
width: number;
|
|
72
|
+
height: number;
|
|
73
|
+
} | {
|
|
74
|
+
kind: 'analysis';
|
|
75
|
+
skipped: true;
|
|
76
|
+
reason: 'opacity_zero' | 'transparent_logo' | 'no_change';
|
|
77
|
+
width: number;
|
|
78
|
+
height: number;
|
|
79
|
+
};
|
|
80
|
+
export interface LogoBackgroundResult {
|
|
81
|
+
data: Uint8ClampedArray;
|
|
82
|
+
changed: boolean;
|
|
83
|
+
reason?: 'already_transparent';
|
|
84
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
SingleBrandMarkOptions,
|
|
3
|
+
BrandMarkParams,
|
|
4
|
+
NormalizedBrandMarkParams,
|
|
5
|
+
BrandGeometry,
|
|
6
|
+
BrandTileGeometry,
|
|
7
|
+
BrandComposeResult,
|
|
8
|
+
LogoBackgroundResult,
|
|
9
|
+
BrandTileDensity,
|
|
10
|
+
BrandTileDirection,
|
|
11
|
+
} from './contracts';
|
|
12
|
+
export type {
|
|
13
|
+
BrandMarkAnchor,
|
|
14
|
+
BrandLogoIdentity,
|
|
15
|
+
BrandMarkOptions,
|
|
16
|
+
SingleBrandMarkOptions,
|
|
17
|
+
TileBrandMarkOptions,
|
|
18
|
+
LegacyTileBrandMarkOptions,
|
|
19
|
+
NormalizedBrandMarkOptions,
|
|
20
|
+
NormalizedBrandMarkParams,
|
|
21
|
+
BrandMarkParams,
|
|
22
|
+
BrandMarkMode,
|
|
23
|
+
BrandTileDensity,
|
|
24
|
+
BrandTileDirection,
|
|
25
|
+
BrandGeometry,
|
|
26
|
+
BrandTileGeometry,
|
|
27
|
+
BrandComposeResult,
|
|
28
|
+
LogoBackgroundResult,
|
|
29
|
+
} from './contracts';
|
|
30
|
+
|
|
31
|
+
export const DEFAULT_BRAND_MARK: Readonly<SingleBrandMarkOptions>;
|
|
32
|
+
export const LEGACY_TILE_DENSITY: Readonly<Record<BrandTileDensity, number>>;
|
|
33
|
+
export const LEGACY_TILE_ANGLE: Readonly<Record<BrandTileDirection, number>>;
|
|
34
|
+
/** Before any browser preprocessing: 5MiB/static PNG/JPEG/WebP gate; actual decode remains caller-owned. */
|
|
35
|
+
export function assertStaticBrandLogo(bytes: Uint8Array): void;
|
|
36
|
+
export function validateBrandMark(value: unknown): NormalizedBrandMarkParams;
|
|
37
|
+
/** Original upright Logo dimensions, at most 4MP; output is integer geometry. */
|
|
38
|
+
export function computeBrandGeometry(
|
|
39
|
+
sourceWidth: number,
|
|
40
|
+
sourceHeight: number,
|
|
41
|
+
logoWidth: number,
|
|
42
|
+
logoHeight: number,
|
|
43
|
+
params: BrandMarkParams,
|
|
44
|
+
): BrandGeometry;
|
|
45
|
+
/** Center-anchored periodic field: local cell is [-cellWidth/2, -cellHeight/2]; transform is translate(origin) rotate(rotation). */
|
|
46
|
+
export function computeBrandTileGeometry(
|
|
47
|
+
sourceWidth: number,
|
|
48
|
+
sourceHeight: number,
|
|
49
|
+
logoWidth: number,
|
|
50
|
+
logoHeight: number,
|
|
51
|
+
params: BrandMarkParams,
|
|
52
|
+
): BrandTileGeometry;
|
|
53
|
+
/** Caller resizes Logo to computeBrandGeometry dimensions first; raw upload budget is checked upstream. */
|
|
54
|
+
export function composeBrandPixels(
|
|
55
|
+
source: Uint8ClampedArray,
|
|
56
|
+
width: number,
|
|
57
|
+
height: number,
|
|
58
|
+
resizedLogo: Uint8ClampedArray,
|
|
59
|
+
logoWidth: number,
|
|
60
|
+
logoHeight: number,
|
|
61
|
+
params: BrandMarkParams,
|
|
62
|
+
): BrandComposeResult;
|
|
63
|
+
/** Existing transparency is unchanged. Unclear backgrounds throw PROCESSING_FAILED with a reason and preserve input. */
|
|
64
|
+
export function removeSolidLogoBackground(
|
|
65
|
+
rgba: Uint8ClampedArray,
|
|
66
|
+
width: number,
|
|
67
|
+
height: number,
|
|
68
|
+
): LogoBackgroundResult;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export type ExportFormat = 'png' | 'jpeg' | 'webp' | 'gif' | 'tga';
|
|
2
|
+
export type PngCompression = 'lossless' | 'size';
|
|
3
|
+
export type ExportMime = 'image/png' | 'image/jpeg' | 'image/webp' | 'image/gif' | 'image/x-tga';
|
|
4
|
+
export interface EncodeOptions {
|
|
5
|
+
format: ExportFormat;
|
|
6
|
+
quality: number;
|
|
7
|
+
jpegBackground: string;
|
|
8
|
+
/** PNG-only encoder mode. Omitted keeps the pre-V1 lossless browser path. */
|
|
9
|
+
pngCompression?: PngCompression;
|
|
10
|
+
}
|
|
11
|
+
export interface EncodedImage {
|
|
12
|
+
blob: Blob;
|
|
13
|
+
mime: ExportMime | 'image/svg+xml';
|
|
14
|
+
width: number;
|
|
15
|
+
height: number;
|
|
16
|
+
/** The PNG export retained the source because compression did not make it smaller. */
|
|
17
|
+
preservedOriginal?: boolean;
|
|
18
|
+
previewBlob?: Blob;
|
|
19
|
+
}
|
|
20
|
+
export declare const MAX_IMAGE_BYTES: number;
|
|
21
|
+
export declare const MAX_IMAGE_PIXELS = 24000000;
|
|
22
|
+
export declare const EXPORT_MIME: Record<ExportFormat, ExportMime>;
|
|
23
|
+
export type ExportPhase = 'encoding' | 'metadata';
|
|
24
|
+
export type CodecRequest = {
|
|
25
|
+
id: number;
|
|
26
|
+
blob: Blob;
|
|
27
|
+
options: EncodeOptions;
|
|
28
|
+
mode?: 'codec';
|
|
29
|
+
} | {
|
|
30
|
+
id: number;
|
|
31
|
+
blob: Blob;
|
|
32
|
+
settings: import('./presentation').ExportSettings;
|
|
33
|
+
mode: 'export';
|
|
34
|
+
};
|
|
35
|
+
export type CodecReply = {
|
|
36
|
+
id: number;
|
|
37
|
+
result: EncodedImage;
|
|
38
|
+
} | {
|
|
39
|
+
id: number;
|
|
40
|
+
error: string;
|
|
41
|
+
} | {
|
|
42
|
+
id: number;
|
|
43
|
+
phase: ExportPhase;
|
|
44
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
declare module 'gifenc' {
|
|
2
|
+
export type GifPalette = number[][];
|
|
3
|
+
export type GifEncoder = {
|
|
4
|
+
writeFrame(
|
|
5
|
+
index: Uint8Array,
|
|
6
|
+
width: number,
|
|
7
|
+
height: number,
|
|
8
|
+
options: {
|
|
9
|
+
palette: GifPalette;
|
|
10
|
+
transparent?: boolean;
|
|
11
|
+
transparentIndex?: number;
|
|
12
|
+
colorDepth?: number;
|
|
13
|
+
},
|
|
14
|
+
): void;
|
|
15
|
+
finish(): void;
|
|
16
|
+
bytes(): Uint8Array;
|
|
17
|
+
};
|
|
18
|
+
export function quantize(
|
|
19
|
+
rgba: Uint8Array | Uint8ClampedArray,
|
|
20
|
+
maxColors: number,
|
|
21
|
+
options?: {
|
|
22
|
+
format?: 'rgb565' | 'rgb444' | 'rgba4444';
|
|
23
|
+
clearAlpha?: boolean;
|
|
24
|
+
oneBitAlpha?: boolean | number;
|
|
25
|
+
},
|
|
26
|
+
): GifPalette;
|
|
27
|
+
export function applyPalette(
|
|
28
|
+
rgba: Uint8Array | Uint8ClampedArray,
|
|
29
|
+
palette: GifPalette,
|
|
30
|
+
format?: 'rgb565' | 'rgb444' | 'rgba4444',
|
|
31
|
+
): Uint8Array;
|
|
32
|
+
export function GIFEncoder(options?: { initialCapacity?: number; auto?: boolean }): GifEncoder;
|
|
33
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type Batch, type Item } from '../../model';
|
|
2
|
+
import type { ExportSettings, ExportProgress, ExportReport, ExportArtifact } from './presentation';
|
|
3
|
+
import type { EncodedImage } from './contracts';
|
|
4
|
+
export declare const MAX_ZIP_BYTES: number;
|
|
5
|
+
/** Reserve payload plus local/central UTF8 headers before adding an irreversible ZIP member. */
|
|
6
|
+
export declare function reserveZipMember(reserved: number, bytes: number, name: string): number;
|
|
7
|
+
export declare const DEFAULT_EXPORT_SETTINGS: ExportSettings;
|
|
8
|
+
export type ExportEntry = {
|
|
9
|
+
item: Item;
|
|
10
|
+
group?: string;
|
|
11
|
+
};
|
|
12
|
+
export type ExportPlan = {
|
|
13
|
+
batchId: string;
|
|
14
|
+
entries: ExportEntry[];
|
|
15
|
+
excluded: ExportReport['excluded'];
|
|
16
|
+
settings: ExportSettings;
|
|
17
|
+
};
|
|
18
|
+
export type ExportEvent = {
|
|
19
|
+
stage: 'reading' | 'encoding' | 'metadata' | 'packing' | 'settled';
|
|
20
|
+
done: number;
|
|
21
|
+
total: number;
|
|
22
|
+
itemId?: string;
|
|
23
|
+
itemName?: string;
|
|
24
|
+
itemStatus?: 'exported' | 'excluded';
|
|
25
|
+
inputBytes?: number;
|
|
26
|
+
outputBytes?: number;
|
|
27
|
+
filename?: string;
|
|
28
|
+
preservedOriginal?: boolean;
|
|
29
|
+
};
|
|
30
|
+
export type ExportReadResult = {
|
|
31
|
+
blob: Blob;
|
|
32
|
+
sha256: string;
|
|
33
|
+
};
|
|
34
|
+
export type ExportDependencies = {
|
|
35
|
+
read: (entry: ExportEntry, signal?: AbortSignal) => Promise<ExportReadResult>;
|
|
36
|
+
render: (blob: Blob, settings: ExportSettings, signal?: AbortSignal, onPhase?: (phase: 'encoding' | 'metadata') => void) => Promise<EncodedImage>;
|
|
37
|
+
};
|
|
38
|
+
export declare function validateExportSettings(input: ExportSettings): ExportSettings;
|
|
39
|
+
export declare function createExportPlan(batch: Batch, ids: string[], settings: ExportSettings): ExportPlan;
|
|
40
|
+
export declare function checkExportAbort(signal?: AbortSignal): void;
|
|
41
|
+
export declare function runExportPlan(plan: ExportPlan, deps: ExportDependencies, signal?: AbortSignal, onProgress?: (p: ExportProgress) => void, onEvent?: (event: ExportEvent) => void, onArtifact?: (artifact: ExportArtifact) => void, onReport?: (report: ExportReport) => void): Promise<{
|
|
42
|
+
blob?: Blob;
|
|
43
|
+
filename: string;
|
|
44
|
+
report: ExportReport;
|
|
45
|
+
}>;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/** Presentation-only contract. Encoding, source validation and cancellation belong to the caller. */
|
|
2
|
+
import type { ExportFormat } from './contracts';
|
|
3
|
+
export type ExportSettings = {
|
|
4
|
+
format: 'original' | ExportFormat;
|
|
5
|
+
pngCompression: 'lossless' | 'size';
|
|
6
|
+
quality: number;
|
|
7
|
+
jpegBackground: string;
|
|
8
|
+
cleanPrivacy: boolean;
|
|
9
|
+
removeTime: boolean;
|
|
10
|
+
removeAuthorComments: boolean;
|
|
11
|
+
};
|
|
12
|
+
export type ExportCandidate = {
|
|
13
|
+
id: string;
|
|
14
|
+
name: string;
|
|
15
|
+
};
|
|
16
|
+
export type ExportPreview = {
|
|
17
|
+
sourceUrl: string;
|
|
18
|
+
resultUrl: string;
|
|
19
|
+
sourceBytes: number;
|
|
20
|
+
outputBytes: number;
|
|
21
|
+
width: number;
|
|
22
|
+
height: number;
|
|
23
|
+
mime: string;
|
|
24
|
+
};
|
|
25
|
+
export type ExportProgress = {
|
|
26
|
+
phase: 'reading' | 'encoding' | 'metadata' | 'packing' | 'ready';
|
|
27
|
+
done: number;
|
|
28
|
+
total: number;
|
|
29
|
+
name?: string;
|
|
30
|
+
};
|
|
31
|
+
export type ExportArtifact = {
|
|
32
|
+
itemId: string;
|
|
33
|
+
versionId: string;
|
|
34
|
+
inputSha256: string;
|
|
35
|
+
filename: string;
|
|
36
|
+
blob: Blob;
|
|
37
|
+
bytes: number;
|
|
38
|
+
mime: string;
|
|
39
|
+
outputSha256: string;
|
|
40
|
+
preservedOriginal: boolean;
|
|
41
|
+
};
|
|
42
|
+
export type ExportDownload = Omit<ExportArtifact, 'blob'> & {
|
|
43
|
+
url: string;
|
|
44
|
+
};
|
|
45
|
+
export type ExportReport = {
|
|
46
|
+
settings?: Readonly<ExportSettings>;
|
|
47
|
+
exported: number;
|
|
48
|
+
excluded: Array<{
|
|
49
|
+
item: string;
|
|
50
|
+
reason: string;
|
|
51
|
+
}>;
|
|
52
|
+
inputBytes: number;
|
|
53
|
+
outputBytes: number;
|
|
54
|
+
items?: Array<{
|
|
55
|
+
item: string;
|
|
56
|
+
itemId?: string;
|
|
57
|
+
versionId?: string;
|
|
58
|
+
inputSha256?: string;
|
|
59
|
+
outputSha256?: string;
|
|
60
|
+
status: 'exported' | 'excluded';
|
|
61
|
+
inputBytes?: number;
|
|
62
|
+
outputBytes?: number;
|
|
63
|
+
filename?: string;
|
|
64
|
+
preservedOriginal?: boolean;
|
|
65
|
+
reason?: string;
|
|
66
|
+
}>;
|
|
67
|
+
};
|
|
68
|
+
export declare function formatBytes(bytes: number): string;
|
|
69
|
+
export declare function byteChange(input: number, output: number): string;
|
|
70
|
+
export declare const progressLabels: Record<ExportProgress['phase'], string>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ResizeParams } from '../basic-edit/contracts';
|
|
2
|
+
export function resizePixels(
|
|
3
|
+
data: Uint8ClampedArray,
|
|
4
|
+
width: number,
|
|
5
|
+
height: number,
|
|
6
|
+
params: ResizeParams,
|
|
7
|
+
): { data: Uint8ClampedArray; width: number; height: number; skipped?: true };
|
|
8
|
+
export function resamplePixels(
|
|
9
|
+
data: Uint8ClampedArray,
|
|
10
|
+
width: number,
|
|
11
|
+
height: number,
|
|
12
|
+
targetWidth: number,
|
|
13
|
+
targetHeight: number,
|
|
14
|
+
kernel?: 'lanczos3' | 'mitchell' | 'cubic' | 'linear',
|
|
15
|
+
): { data: Uint8ClampedArray; width: number; height: number };
|