Compare commits

...

7 Commits

Author SHA1 Message Date
C4illin bca82c6edc wip 2025-03-06 17:35:59 +01:00
C4illin 3da6734e10 dcraw almost working 2025-02-18 22:05:19 +01:00
C4illin 67fef4edfb wip 2025-02-18 22:05:19 +01:00
C4illin fba5e212e8 fix: update libheif to 1.19.5
issue: #202
2025-02-18 21:24:54 +01:00
C4illin 62f44fb052 chore: print libheif version 2025-02-18 20:05:46 +01:00
Emrik Östling 6b9254047c Merge pull request #225 from C4illin/fix/#202/add-libheif
fix: add libheif
2025-02-16 23:04:35 +01:00
C4illin decfea5dc9 fix: add libheif
issue #202
2025-02-16 21:18:33 +01:00
6 changed files with 136 additions and 55 deletions
+52 -51
View File
@@ -1,51 +1,52 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# local env files
.env.local
.env.development.local
.env.test.local
.env.production.local
# vercel
.vercel
**/*.trace
**/*.zip
**/*.tar.gz
**/*.tgz
**/*.log
package-lock.json
**/*.bun
/src/uploads
/uploads
/mydb.sqlite
/output
/db
/data
/Bruno
/tsconfig.tsbuildinfo
/public/generated.css
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# local env files
.env.local
.env.development.local
.env.test.local
.env.production.local
# vercel
.vercel
**/*.trace
**/*.zip
**/*.tar.gz
**/*.tgz
**/*.log
package-lock.json
**/*.bun
/src/uploads
/uploads
/mydb.sqlite
/output
/db
/data
/Bruno
/tsconfig.tsbuildinfo
/public/generated.css
/dcraw
+15 -4
View File
@@ -14,12 +14,20 @@ RUN mkdir -p /temp/prod
COPY package.json bun.lock /temp/prod/
RUN cd /temp/prod && bun install --frozen-lockfile --production
FROM base AS builder
FROM base AS resvg
RUN apk --no-cache add curl gcc
ENV PATH=/root/.cargo/bin:$PATH
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
RUN cargo install resvg
FROM base AS dcraw
# build dcraw
RUN apk --no-cache add build-base wget tar jasper-dev jpeg-dev lcms2-dev libc6-compat gettext libintl gettext-dev gettext-libs gettext-lang gettext-static intltool linux-tools-dev
RUN mkdir -p /temp
WORKDIR /temp
RUN wget https://www.dechifro.org/dcraw/archive/dcraw-9.28.0.tar.gz ; \
tar -xzvf dcraw-*.tar.gz ; cd dcraw ; chmod 755 install ; ./install ;
# copy node_modules from temp directory
# then copy all (non-ignored) project files into the image
# will switch to alpine again when it works
@@ -37,6 +45,8 @@ LABEL maintainer="Emrik Östling (C4illin)"
LABEL description="ConvertX: self-hosted online file converter supporting 700+ file formats."
LABEL repo="https://github.com/C4illin/ConvertX"
RUN apk --no-cache add qt6-qtbase-private-dev libheif-tools --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community/
# install additional dependencies
RUN apk --no-cache add \
pandoc \
@@ -49,6 +59,8 @@ RUN apk --no-cache add \
vips-tools \
vips-poppler \
vips-jxl \
vips-heif \
vips-magick \
libjxl-tools \
assimp \
inkscape \
@@ -57,15 +69,14 @@ RUN apk --no-cache add \
libva-utils \
py3-numpy
RUN apk --no-cache add qt6-qtbase-private-dev --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community/
RUN apk --no-cache add calibre --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing/
# this might be needed for some latex use cases, will add it if needed.
# texmf-dist-fontsextra \
COPY --from=install /temp/prod/node_modules node_modules
COPY --from=builder /root/.cargo/bin/resvg /usr/local/bin/resvg
COPY --from=resvg /root/.cargo/bin/resvg /usr/local/bin/resvg
COPY --from=dcraw /usr/local/bin/dcraw /usr/local/bin/dcraw
COPY --from=prerelease /app/public/generated.css /app/public/
# COPY --from=prerelease /app/src/index.tsx /app/src/
# COPY --from=prerelease /app/package.json .
+1
View File
@@ -26,6 +26,7 @@ A self-hosted online file converter. Supports over a thousand different formats.
|------------------------------------------------------------------------------|---------------|---------------|-------------|
| [libjxl](https://github.com/libjxl/libjxl) | JPEG XL | 11 | 11 |
| [resvg](https://github.com/RazrFalcon/resvg) | SVG | 1 | 1 |
| [libheif](https://github.com/strukturag/libheif) | HEIF | 7 | 6 |
| [Vips](https://github.com/libvips/libvips) | Images | 45 | 23 |
| [XeLaTeX](https://tug.org/xetex/) | LaTeX | 1 | 1 |
| [Calibre](https://calibre-ebook.com/) | E-books | 26 | 19 |
+52
View File
@@ -0,0 +1,52 @@
import { execFile } from "child_process";
export const properties = {
from: {
images: [
"avci",
"avcs",
"avif",
"h264",
"heic",
"heics",
"heif",
"heifs",
"mkv",
"mp4",
],
},
to: {
images: ["jpeg", "png", "y4m"],
},
};
export function convert(
filePath: string,
fileType: string,
convertTo: string,
targetPath: string,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
options?: unknown,
): Promise<string> {
return new Promise((resolve, reject) => {
execFile(
"heif-convert",
[filePath, targetPath],
(error, stdout, stderr) => {
if (error) {
reject(`error: ${error}`);
}
if (stdout) {
console.log(`stdout: ${stdout}`);
}
if (stderr) {
console.error(`stderr: ${stderr}`);
}
resolve("Done");
},
);
});
}
+5
View File
@@ -9,6 +9,7 @@ import { convert as convertresvg, properties as propertiesresvg } from "./resvg"
import { convert as convertImage, properties as propertiesImage } from "./vips";
import { convert as convertxelatex, properties as propertiesxelatex } from "./xelatex";
import { convert as convertCalibre, properties as propertiesCalibre } from "./calibre";
import { convert as convertLibheif, properties as propertiesLibheif } from "./libheif";
// This should probably be reconstructed so that the functions are not imported instead the functions hook into this to make the converters more modular
@@ -49,6 +50,10 @@ const properties: Record<
properties: propertiesresvg,
converter: convertresvg,
},
libheif: {
properties: propertiesLibheif,
converter: convertLibheif,
},
vips: {
properties: propertiesImage,
converter: convertImage,
+11
View File
@@ -1,5 +1,6 @@
import { exec } from "node:child_process";
import { version } from "../../package.json";
console.log(`ConvertX v${version}`);
if (process.env.NODE_ENV === "production") {
@@ -113,6 +114,16 @@ if (process.env.NODE_ENV === "production") {
}
});
exec("heif-info -v", (error, stdout) => {
if (error) {
console.error("libheif is not installed");
}
if (stdout) {
console.log(`libheif v${stdout.split("\n")[0]}`);
}
});
exec("bun -v", (error, stdout) => {
if (error) {
console.error("Bun is not installed. wait what");