Skip to content

Commit

Permalink
Merge pull request #148 from Aymendje/feat-assimp
Browse files Browse the repository at this point in the history
  • Loading branch information
C4illin authored Sep 26, 2024
2 parents 413f5dc + 63a4328 commit 2b4b8f9
Show file tree
Hide file tree
Showing 5 changed files with 166 additions and 3 deletions.
3 changes: 2 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ RUN apk --no-cache add \
vips-tools \
vips-poppler \
vips-jxl \
libjxl-tools
libjxl-tools \
assimp

# this might be needed for some latex use cases, will add it if needed.
# texmf-dist-fontsextra \
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
![Docker container size](https://ghcr-badge.egpl.dev/c4illin/convertx/size?color=%230375b6&tag=latest&label=image+size&trim=)
![GitHub top language](https://img.shields.io/github/languages/top/C4illin/ConvertX)

A self-hosted online file converter. Supports 831 different formats. Written with TypeScript, Bun and Elysia.
A self-hosted online file converter. Supports over a thousand different formats. Written with TypeScript, Bun and Elysia.

## Features

Expand All @@ -23,6 +23,7 @@ A self-hosted online file converter. Supports 831 different formats. Written wit
| [libjxl](https://github.com/libjxl/libjxl) | JPEG XL | 11 | 11 |
| [resvg](https://github.com/RazrFalcon/resvg) | SVG | 1 | 1 |
| [Vips](https://github.com/libvips/libvips) | Images | 45 | 23 |
| [Assimp](https://github.com/assimp/assimp) | 3D Assets | 70 | 24 |
| [XeLaTeX](https://tug.org/xetex/) | LaTeX | 1 | 1 |
| [Pandoc](https://pandoc.org/) | Documents | 43 | 65 |
| [GraphicsMagick](http://www.graphicsmagick.org/) | Images | 166 | 133 |
Expand Down
139 changes: 139 additions & 0 deletions src/converters/assimp.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
import { exec } from "node:child_process";

// This could be done dynamically by running `ffmpeg -formats` and parsing the output
export const properties = {
from: {
muxer: [
"3d",
"3ds",
"3mf",
"ac",
"ac3d",
"acc",
"amf",
"ase",
"ask",
"assbin",
"b3d",
"blend",
"bsp",
"bvh",
"cob",
"csm",
"dae",
"dxf",
"enff",
"fbx",
"glb",
"gltf",
"hmp",
"ifc",
"ifczip",
"iqm",
"irr",
"irrmesh",
"lwo",
"lws",
"lxo",
"md2",
"md3",
"md5anim",
"md5camera",
"md5mesh",
"mdc",
"mdl",
"mesh",
"mesh.xml",
"mot",
"ms3d",
"ndo",
"nff",
"obj",
"off",
"ogex",
"pk3",
"ply",
"pmx",
"prj",
"q3o",
"q3s",
"raw",
"scn",
"sib",
"smd",
"step",
"stl",
"stp",
"ter",
"uc",
"vta",
"x",
"x3d",
"x3db",
"xgl",
"xml",
"zae",
"zgl",
],
},
to: {
muxer: [
"collada",
"x",
"stp",
"obj",
"objnomtl",
"stl",
"stlb",
"ply",
"plyb",
"3ds",
"gltf2",
"glb2",
"gltf",
"glb",
"assbin",
"assxml",
"x3d",
"fbx",
"fbxa",
"m3d",
"m3da",
"3mf",
"pbrt",
"assjson",
],
},
};

export async function convert(
filePath: string,
fileType: string,
convertTo: string,
targetPath: string,
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
options?: any,
): Promise<string> {
// let command = "ffmpeg";


const command = `assimp export "${filePath}" "${targetPath}"`;

return new Promise((resolve, reject) => {
exec(command, (error, stdout, stderr) => {
if (error) {
reject(`error: ${error}`);
}

if (stdout) {
console.log(`stdout: ${stdout}`);
}

if (stderr) {
console.error(`stderr: ${stderr}`);
}

resolve("success");
});
});
}
14 changes: 13 additions & 1 deletion src/converters/main.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import { convert as convertImage, properties as propertiesImage } from "./vips";
import {
convert as convertImage,
properties as propertiesImage
} from "./vips";

import {
convert as convertPandoc,
Expand Down Expand Up @@ -30,6 +33,11 @@ import {
properties as propertiesresvg,
} from "./resvg";

import {
convert as convertassimp,
properties as propertiesassimp,
} from "./assimp";

import { normalizeFiletype } from "../helpers/normalizeFiletype";

// This should probably be reconstructed so that the functions are not imported instead the functions hook into this to make the converters more modular
Expand Down Expand Up @@ -78,6 +86,10 @@ const properties: Record<string, {
properties: propertiesGraphicsmagick,
converter: convertGraphicsmagick,
},
assimp: {
properties: propertiesassimp,
converter: convertassimp,
},
ffmpeg: {
properties: propertiesFFmpeg,
converter: convertFFmpeg,
Expand Down
10 changes: 10 additions & 0 deletions src/helpers/printVersions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,16 @@ if (process.env.NODE_ENV === "production") {
}
});

exec("assimp version", (error, stdout) => {
if (error) {
console.error("assimp is not installed");
}

if (stdout) {
console.log(`assimp v${stdout.split("\n")[5]}`);
}
});

exec("bun -v", (error, stdout) => {
if (error) {
console.error("Bun is not installed. wait what");
Expand Down

0 comments on commit 2b4b8f9

Please sign in to comment.