Image upscaling using super resolution AI models.
import { Upscaler } from "upscalejs"
const upscaler = new Upscaler()
const result = await upscaler.upscale(bitmap)
const canvas = document.createElement("canvas")
canvas.width = result.width
canvas.height = result.height
canvas.getContext("2d")?.putImageData(result, 0, 0)
const fs = require("fs")
const { Upscaler, canvas } = require("upscalejs")
const upscaler = new Upscaler({
base: "./node_modules/upscalejs/dist/"
})
const upscale = async (input, output) => {
const img = await canvas.loadImage(input)
const result = await upscaler.upscale(img)
const write_stream = fs.createWriteStream(output)
const upscale_canvas = canvas.createCanvas(result.width, result.height)
upscale_canvas.getContext("2d").putImageData(result, 0, 0)
const jpeg_stream = upscale_canvas.createJPEGStream()
jpeg_stream.pipe(write_stream)
}
upscale("image.jpg", "upscaled.jpg")
You will need to copy the models and onnxruntime wasm files to your public folder e.g.:
const CopyPlugin = require("copy-webpack-plugin");
module.exports = {
chainWebpack: config => {
config
.plugin("copy-webpack-plugin")
.use(CopyPlugin)
.tap(() => {
return [{
patterns: [
{
from: "./node_modules/upscalejs/dist/js/ort-*.wasm",
to: "js/[name][ext]",
},
{
from: "./node_modules/upscalejs/dist/models/*.onnx",
to: "models/[name][ext]",
}
],
}]
})
}
}
Current available models were trained in anime images and are based on work done in the Real-CUGAN project.
npm install
npm run dev
npm run build
Lint with ESLint
npm run lint
Test with Vitest
npm run test