@realsee/equirect-toolbox 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/README.md +184 -0
- package/configs/schema/cube.schema.json +40 -0
- package/configs/schema/rectlinear.schema.json +105 -0
- package/configs/templates/cube.json +8 -0
- package/configs/templates/rectlinear-euler.json +12 -0
- package/configs/templates/rectlinear-matrix.json +10 -0
- package/configs/templates/rectlinear-quaternion.json +15 -0
- package/dist/cli.d.ts +5 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +116 -0
- package/dist/cli.js.map +1 -0
- package/dist/cube2equirect.d.ts +7 -0
- package/dist/cube2equirect.d.ts.map +1 -0
- package/dist/cube2equirect.js +77 -0
- package/dist/cube2equirect.js.map +1 -0
- package/dist/equirect2cube.d.ts +7 -0
- package/dist/equirect2cube.d.ts.map +1 -0
- package/dist/equirect2cube.js +63 -0
- package/dist/equirect2cube.js.map +1 -0
- package/dist/lib/create-webgl-canvas.d.ts +58 -0
- package/dist/lib/create-webgl-canvas.d.ts.map +1 -0
- package/dist/lib/create-webgl-canvas.js +191 -0
- package/dist/lib/create-webgl-canvas.js.map +1 -0
- package/dist/lib/cube-manifest.d.ts +11 -0
- package/dist/lib/cube-manifest.d.ts.map +1 -0
- package/dist/lib/cube-manifest.js +94 -0
- package/dist/lib/cube-manifest.js.map +1 -0
- package/dist/lib/cube-output.d.ts +9 -0
- package/dist/lib/cube-output.d.ts.map +1 -0
- package/dist/lib/cube-output.js +23 -0
- package/dist/lib/cube-output.js.map +1 -0
- package/dist/lib/headless-three.d.ts +8 -0
- package/dist/lib/headless-three.d.ts.map +1 -0
- package/dist/lib/headless-three.js +24 -0
- package/dist/lib/headless-three.js.map +1 -0
- package/dist/rectlinear.d.ts +36 -0
- package/dist/rectlinear.d.ts.map +1 -0
- package/dist/rectlinear.js +128 -0
- package/dist/rectlinear.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { dirname, extname, resolve } from "path";
|
|
2
|
+
import { fileURLToPath } from "url";
|
|
3
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
4
|
+
import { loadImage } from "@napi-rs/canvas";
|
|
5
|
+
import { Ajv2020 } from "ajv/dist/2020.js";
|
|
6
|
+
import * as THREE from "three";
|
|
7
|
+
import { createHeadlessRenderer } from "./lib/headless-three.js";
|
|
8
|
+
const templateNames = {
|
|
9
|
+
euler: "rectlinear-euler.json",
|
|
10
|
+
matrix: "rectlinear-matrix.json",
|
|
11
|
+
quaternion: "rectlinear-quaternion.json",
|
|
12
|
+
};
|
|
13
|
+
export async function renderRectlinear(options) {
|
|
14
|
+
const config = readRectlinearConfig(options.config);
|
|
15
|
+
const outputFormat = getOutputFormat(options.output);
|
|
16
|
+
const quality = options.quality ?? 95;
|
|
17
|
+
const image = await loadImage(resolve(options.input));
|
|
18
|
+
const { canvas, renderer } = await createHeadlessRenderer(config.viewport.width, config.viewport.height);
|
|
19
|
+
try {
|
|
20
|
+
const texture = new THREE.Texture(image);
|
|
21
|
+
texture.minFilter = THREE.LinearFilter;
|
|
22
|
+
texture.magFilter = THREE.LinearFilter;
|
|
23
|
+
texture.needsUpdate = true;
|
|
24
|
+
const geometry = new THREE.SphereGeometry(10, 64, 40);
|
|
25
|
+
geometry.scale(-1, 1, 1);
|
|
26
|
+
const material = new THREE.MeshBasicMaterial({ map: texture });
|
|
27
|
+
const mesh = new THREE.Mesh(geometry, material);
|
|
28
|
+
const scene = new THREE.Scene();
|
|
29
|
+
scene.add(mesh);
|
|
30
|
+
const camera = new THREE.PerspectiveCamera(config.camera.vfov, config.viewport.width / config.viewport.height, 0.1, 100);
|
|
31
|
+
applyCameraPose(camera, config);
|
|
32
|
+
renderer.setSize(config.viewport.width, config.viewport.height, false);
|
|
33
|
+
renderer.render(scene, camera);
|
|
34
|
+
const buffer = outputFormat === "image/jpeg"
|
|
35
|
+
? canvas.toBuffer(outputFormat, quality)
|
|
36
|
+
: canvas.toBuffer(outputFormat);
|
|
37
|
+
mkdirSync(dirname(resolve(options.output)), { recursive: true });
|
|
38
|
+
writeFileSync(resolve(options.output), buffer);
|
|
39
|
+
texture.dispose();
|
|
40
|
+
material.dispose();
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
renderer.dispose();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export function initializeRectlinearConfig(type, output) {
|
|
47
|
+
if (!isRectlinearPoseType(type)) {
|
|
48
|
+
throw new Error(`Unknown rectlinear config type: ${type}. Expected euler, matrix, or quaternion.`);
|
|
49
|
+
}
|
|
50
|
+
const templatePath = findTemplate(templateNames[type]);
|
|
51
|
+
const template = readFileSync(templatePath, "utf8");
|
|
52
|
+
mkdirSync(dirname(resolve(output)), { recursive: true });
|
|
53
|
+
writeFileSync(resolve(output), template.endsWith("\n") ? template : `${template}\n`, "utf8");
|
|
54
|
+
}
|
|
55
|
+
function readRectlinearConfig(path) {
|
|
56
|
+
let config;
|
|
57
|
+
try {
|
|
58
|
+
config = JSON.parse(readFileSync(resolve(path), "utf8"));
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
throw new Error(`Unable to read rectlinear config ${path}: ${getErrorMessage(error)}`);
|
|
62
|
+
}
|
|
63
|
+
validateRectlinearConfig(config);
|
|
64
|
+
return config;
|
|
65
|
+
}
|
|
66
|
+
export function validateRectlinearConfig(value) {
|
|
67
|
+
let schema;
|
|
68
|
+
try {
|
|
69
|
+
schema = JSON.parse(readFileSync(findSchema(), "utf8"));
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
throw new Error(`Unable to read rectlinear schema: ${getErrorMessage(error)}`);
|
|
73
|
+
}
|
|
74
|
+
const ajv = new Ajv2020({ allErrors: true, strict: true });
|
|
75
|
+
const validate = ajv.compile(schema);
|
|
76
|
+
if (!validate(value)) {
|
|
77
|
+
throw new Error(`Invalid rectlinear config:\n${ajv.errorsText(validate.errors, { separator: "\n" })}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function applyCameraPose(camera, config) {
|
|
81
|
+
const { camera: pose } = config;
|
|
82
|
+
if ("yaw" in pose) {
|
|
83
|
+
camera.rotation.set(degreesToRadians(pose.pitch), degreesToRadians(pose.yaw), degreesToRadians(pose.roll), "YXZ");
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if ("matrix" in pose) {
|
|
87
|
+
const matrix = pose.matrix;
|
|
88
|
+
camera.rotation.setFromRotationMatrix(new THREE.Matrix4().set(matrix[0], matrix[1], matrix[2], 0, matrix[3], matrix[4], matrix[5], 0, matrix[6], matrix[7], matrix[8], 0, 0, 0, 0, 1));
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
camera.quaternion.set(pose.quaternion.x, pose.quaternion.y, pose.quaternion.z, pose.quaternion.w);
|
|
92
|
+
}
|
|
93
|
+
function getOutputFormat(output) {
|
|
94
|
+
const extension = extname(output).toLowerCase();
|
|
95
|
+
if (extension === ".jpg" || extension === ".jpeg")
|
|
96
|
+
return "image/jpeg";
|
|
97
|
+
if (extension === ".png")
|
|
98
|
+
return "image/png";
|
|
99
|
+
throw new Error(`Unsupported output format ${extension || "(missing extension)"}. Use .jpg, .jpeg, or .png.`);
|
|
100
|
+
}
|
|
101
|
+
function findTemplate(name) {
|
|
102
|
+
const moduleRootTemplate = resolve(dirname(fileURLToPath(import.meta.url)), "../configs/templates", name);
|
|
103
|
+
if (existsSync(moduleRootTemplate))
|
|
104
|
+
return moduleRootTemplate;
|
|
105
|
+
const workingDirectoryTemplate = resolve(process.cwd(), "configs/templates", name);
|
|
106
|
+
if (existsSync(workingDirectoryTemplate))
|
|
107
|
+
return workingDirectoryTemplate;
|
|
108
|
+
throw new Error(`Rectlinear template not found: ${name}`);
|
|
109
|
+
}
|
|
110
|
+
function findSchema() {
|
|
111
|
+
const moduleRootSchema = resolve(dirname(fileURLToPath(import.meta.url)), "../configs/schema/rectlinear.schema.json");
|
|
112
|
+
if (existsSync(moduleRootSchema))
|
|
113
|
+
return moduleRootSchema;
|
|
114
|
+
const workingDirectorySchema = resolve(process.cwd(), "configs/schema/rectlinear.schema.json");
|
|
115
|
+
if (existsSync(workingDirectorySchema))
|
|
116
|
+
return workingDirectorySchema;
|
|
117
|
+
throw new Error("Rectlinear schema not found: configs/schema/rectlinear.schema.json");
|
|
118
|
+
}
|
|
119
|
+
function isRectlinearPoseType(value) {
|
|
120
|
+
return value === "euler" || value === "matrix" || value === "quaternion";
|
|
121
|
+
}
|
|
122
|
+
function degreesToRadians(value) {
|
|
123
|
+
return (value * Math.PI) / 180;
|
|
124
|
+
}
|
|
125
|
+
function getErrorMessage(error) {
|
|
126
|
+
return error instanceof Error ? error.message : String(error);
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=rectlinear.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rectlinear.js","sourceRoot":"","sources":["../src/rectlinear.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@realsee/equirect-toolbox",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Node.js CLI tools for rectlinear screenshots and equirectangular-to-cubemap conversion.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"cli",
|
|
7
|
+
"cube-map",
|
|
8
|
+
"cubemap",
|
|
9
|
+
"equirectangular",
|
|
10
|
+
"panorama",
|
|
11
|
+
"rectlinear",
|
|
12
|
+
"three.js"
|
|
13
|
+
],
|
|
14
|
+
"bin": {
|
|
15
|
+
"equirect-toolbox": "dist/cli.js"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"configs"
|
|
20
|
+
],
|
|
21
|
+
"type": "module",
|
|
22
|
+
"main": "dist/cli.js",
|
|
23
|
+
"types": "dist/cli.d.ts",
|
|
24
|
+
"exports": {
|
|
25
|
+
"./rectlinear": {
|
|
26
|
+
"types": "./dist/rectlinear.d.ts",
|
|
27
|
+
"import": "./dist/rectlinear.js",
|
|
28
|
+
"default": "./dist/rectlinear.js"
|
|
29
|
+
},
|
|
30
|
+
"./cube2equirect": {
|
|
31
|
+
"types": "./dist/cube2equirect.d.ts",
|
|
32
|
+
"import": "./dist/cube2equirect.js",
|
|
33
|
+
"default": "./dist/cube2equirect.js"
|
|
34
|
+
},
|
|
35
|
+
"./equirect2cube": {
|
|
36
|
+
"types": "./dist/equirect2cube.d.ts",
|
|
37
|
+
"import": "./dist/equirect2cube.js",
|
|
38
|
+
"default": "./dist/equirect2cube.js"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"publishConfig": {
|
|
42
|
+
"access": "public"
|
|
43
|
+
},
|
|
44
|
+
"scripts": {
|
|
45
|
+
"build": "tsc -p tsconfig.build.json",
|
|
46
|
+
"typecheck": "tsc --noEmit",
|
|
47
|
+
"lint": "oxlint",
|
|
48
|
+
"format": "oxfmt",
|
|
49
|
+
"format:check": "oxfmt --check",
|
|
50
|
+
"prepack": "npm run build",
|
|
51
|
+
"prepublishOnly": "npm run format:check && npm run typecheck && npm run lint",
|
|
52
|
+
"pack:check": "npm pack --dry-run"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@napi-rs/canvas": "^0.1.78",
|
|
56
|
+
"ajv": "8.17.1",
|
|
57
|
+
"commander": "^15.0.0",
|
|
58
|
+
"gl": "^8.1.6",
|
|
59
|
+
"three": "0.149.0"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@types/node": "^22.20.1",
|
|
63
|
+
"@types/three": "0.149.0",
|
|
64
|
+
"oxfmt": "^0.64.0",
|
|
65
|
+
"oxlint": "^1.79.0",
|
|
66
|
+
"tsx": "^4.19.0",
|
|
67
|
+
"typescript": "^5.6.0"
|
|
68
|
+
},
|
|
69
|
+
"engines": {
|
|
70
|
+
"node": "^20 || ^22"
|
|
71
|
+
}
|
|
72
|
+
}
|