1
0
mirror of https://github.com/upscayl/upscayl.git synced 2024-11-23 23:21:05 +01:00

Merge with upstream/main

This commit is contained in:
abhishek-gaonkar 2024-11-17 11:52:19 +05:30
commit 47797e86cf
60 changed files with 6364 additions and 688 deletions

View File

@ -1,5 +1,5 @@
name: Documentation Issue name: Documentation Issue
description: "Issues with the docs, release notes, website, etc" description: "Issues with the docs, release notes, website, etc. Do NOT use for bugs within Upscayl the program itself; instead, file a bug report."
labels: documentation labels: documentation
body: body:
- type: checkboxes - type: checkboxes

View File

@ -1,26 +1,26 @@
export const MODELS = { export const MODELS = {
"realesrgan-x4plus": { "upscayl-standard-4x": {
id: "realesrgan-x4plus", id: "upscayl-standard-4x",
name: "Upscayl Standard", name: "Upscayl Standard",
}, },
"realesrgan-x4fast": { "upscayl-lite-4x": {
id: "realesrgan-x4fast", id: "upscayl-lite-4x",
name: "Upscayl Lite", name: "Upscayl Lite",
}, },
remacri: { remacri: {
id: "remacri", id: "remacri-4x",
name: "Remacri (Non-Commercial)", name: "Remacri (Non-Commercial)",
}, },
ultramix_balanced: { ultramix_balanced: {
id: "ultramix_balanced", id: "ultramix-balanced-4x",
name: "Ultramix (Non-Commercial)", name: "Ultramix (Non-Commercial)",
}, },
ultrasharp: { ultrasharp: {
id: "ultrasharp", id: "ultrasharp-4x",
name: "Ultrasharp (Non-Commercial)", name: "Ultrasharp (Non-Commercial)",
}, },
"realesrgan-x4plus-anime": { "digital-art-4x": {
id: "realesrgan-x4plus-anime", id: "digital-art-4x",
name: "Digital Art", name: "Digital Art",
}, },
}; };

5609
deno.lock Normal file

File diff suppressed because it is too large Load Diff

View File

@ -23,7 +23,7 @@ or even `0,1,2`
The logs appear in the Settings tab. The logs appear in the Settings tab.
<img src="https://github.com/upscayl/upscayl/assets/25067102/ae8975b9-39d3-43a7-8ab5-435b42a67e6e" height="500px" /> <img src="https://github.com/upscayl/upscayl/assets/25067102/ae8975b9-39d3-43a7-8ab5-435b42a67e6e" height="500px" />
To copy a log, you can press the COPY button and to paste it in the GitHub issue template for bug reports. To copy a log, you can press the COPY button and paste it in the GitHub issue template for bug reports.
## Custom Models ## Custom Models
Since Upscayl v2.5, you can load your own NCNN models into Upscayl. To convert models from PyTorch, see [🖥️ Model Conversion Guide](../%F0%9F%96%A5%EF%B8%8F-Model-Conversion-%E2%80%90-Create-more-AI-models!). You could also load Upscayl's official [Custom Models Repository](https://github.com/upscayl/custom-models). Since Upscayl v2.5, you can load your own NCNN models into Upscayl. To convert models from PyTorch, see [🖥️ Model Conversion Guide](../%F0%9F%96%A5%EF%B8%8F-Model-Conversion-%E2%80%90-Create-more-AI-models!). You could also load Upscayl's official [Custom Models Repository](https://github.com/upscayl/custom-models).
@ -39,4 +39,4 @@ To use your custom models, follow these steps:
## Scale Option ## Scale Option
Since v2.8, Upscayl emulates the scale option by Downscayling the x4 image for unsupported models. Since v2.8, Upscayl emulates the scale option by Downscayling the x4 image for unsupported models.
Not all models support x1, x2 and x3; all the default models only support x4. To use other scales as native model output, you can get the compatible models from the [Custom Models Repository](https://github.com/upscayl/custom-models). For example, with the `realesr-animevideov3-x2` model, you can use the scale x2; with `realesr-animevideov3-x3`, you can use the scale x3. Not all models support x1, x2 and x3; all the default models only support x4. To use other scales as native model output, you can get the compatible models from the [Custom Models Repository](https://github.com/upscayl/custom-models). For example, with the `realesr-animevideov3-x2` model, you can use the scale x2; with `realesr-animevideov3-x3`, you can use the scale x3.

View File

@ -1,14 +0,0 @@
# Welcome to the Upscayl wiki!
Here we're trying to build documentation around Upscayl for everyone. If you have any suggestions, please feel free to let us know! :)
## Contents
- [🙋 How to ask for help?](https://github.com/upscayl/upscayl/wiki/%F0%9F%99%8B-How-to-ask-for-help%3F)
- [🧩 Compatibility List](https://github.com/upscayl/upscayl/wiki/Compatibility-List)
- [📖 User Guide](https://github.com/upscayl/upscayl/wiki/Guide)
- [🔨 Troubleshooting](https://github.com/upscayl/upscayl/wiki/Troubleshooting)
- [🖥️ Model Conversion Guide](https://github.com/upscayl/upscayl/wiki/Model-Conversion-Guide)
- [🤫 Miscellaneous Configuration](https://github.com/upscayl/upscayl/wiki/Misc)
- [🤯 Using Upscayl on Windows and Linux with only a CPU](https://github.com/upscayl/upscayl/issues/390)
![alt text](image.png)

View File

@ -1,22 +0,0 @@
# How to Ask for Help on Upscayl's GitHub
> [!NOTE]
**If you're having issues with the Mac App Store version of Upscayl, please email [Nayam Amarshe](mailto:nayam.emikx@aleeas.com).**
> [!WARNING]
**Please do not Email or Telegram us for any bugs or issues that you encounter. You will not receive any replies. We only use GitHub issues for issue tracking.**
GitHub is a powerful platform that fosters collaboration and open-source development. If you're new to GitHub and need assistance with Upscayl, follow these steps to effectively ask for help:
### 1. Search for Similar Issues
Before posting a new issue, [search the repository's issue tracker](https://github.com/upscayl/upscayl/issues) to check if someone else has encountered a similar problem. Also [check the discussions tab](https://github.com/upscayl/upscayl/discussions) for any pre-existing discussions. This helps to avoid duplicate issues and ensures that you're not asking a question that has already been answered. You should also chech the [FAQ](https://github.com/upscayl/upscayl/tree/main#-faq).
### 2. Provide Logs and Context
- To create a new issue, go to the [Issues tab](https://github.com/upscayl/upscayl/issues) and click **'New Issue'**.
Make sure to provide detailed context about the problem you're facing. Include relevant information such as the logs, version of the software, the steps to reproduce the issue, and any error messages you've encountered. This will help others understand your problem better and provide more accurate assistance.
If you don't know how to copy/see the logs, [follow this link](https://github.com/upscayl/upscayl/wiki/Guide#logs).
### 3. Be Clear and Specific
Clearly articulate your issue or question in a concise manner. The title should clearly mention the problem. Avoid ambiguous language and provide specific details about what you're trying to achieve. This will make it easier for others to understand your problem and offer a targeted solution. Our default issue template provides a suggested, organized way to do this.

View File

View File

@ -1,40 +0,0 @@
If you run into problems with Upscayl, here are a few ways to fix it.
> [!IMPORTANT]
> You'll need a Vulkan compatible GPU to upscale images. Many CPU and iGPUs do not work but no harm in trying.
> Make sure to read [the FAQ](https://github.com/upscayl/upscayl#-faq) first to avoid getting rickrolled.
## General Fixes
- Uninstall and Reinstall the app.
- Restart your computer.
- Try setting your [GPU ID](https://github.com/upscayl/upscayl/wiki/Guide#gpu-id) to your discrete GPU.
## Linux Users
- Reinstall graphics drivers BUT Before doing that, run [VulkanCapsViewer](https://github.com/SaschaWillems/VulkanCapsViewer). If it reports Vulkan support, you might not need to do this.
## Mac Users
- Make sure you're using the latest MacOS update.
### If the app doesn't work, try deleting all its files and folders:
<img src="https://github.com/upscayl/upscayl/assets/25067102/22dab1e0-001f-4212-bb77-904fe36c9916" width="500px" />
1. Open Finder → Click **Go** in the menu bar → Select **Go to Folder** from the drop-down menu → In the window that appears, type **~/Library/** and press Enter.
2. Here, in the Library folder, find and remove all files which contain 'Upscayl'.
Here's a list of files and folders you can safely delete:
**NOTE: PLEASE DO NOT DELETE THE FOLDERS THAT DO NOT HAVE UPSCAYL IN THEIR NAME**
- **~/Library/Application Support/Upscayl**
- **~/Library/Saved Application State/org.upscayl.Upscayl.savedState/**
- **~/Library/Group Containers/W2T4W74X87.org.upscayl.Upscayl**
- **~/Library/Containers/Upscayl** (and other folders named Upscayl)
- **~/Library/Preferences/org.upscayl.Upscayl.plist/**
- **~/Library/Preferences/org.upscayl.Upscayl.helper.plist/**
## Windows Users
- [Set the app to performance mode](https://youtube.com/watch?v=sxvs6qYHJmc) and make sure you have the right redistributables.
- Try [DirectX repair](http://blog.csdn.net/vbcom/article/details/6962388).
- [Disable switchable graphics](https://nvidia.custhelp.com/app/answers/detail/a_id/5182/~/unable-to-launch-vulkan-apps%2Fgame-on-notebooks-with-amd-radeon-igpus) if you can. (thanks @[JZeravik](https://github.com/JZeravik)!)
- [Enable hardware-accelerated GPU scheduling](https://www.howtogeek.com/756935/how-to-enable-hardware-accelerated-gpu-scheduling-in-windows-11) if you can.
- Reinstall graphics drivers BUT Before doing that, run [VulkanCapsViewer](https://github.com/SaschaWillems/VulkanCapsViewer). If it reports Vulkan support, you might not need to do this.
# If all of the above fail, [Please click here to know how you can ask for help](https://github.com/upscayl/upscayl/wiki/%F0%9F%99%8B-How-to-ask-for-help%3F).

View File

@ -0,0 +1,3 @@
---
openapi: post /get-task-status
---

View File

@ -0,0 +1,3 @@
---
openapi: post /get-upload-url
---

View File

@ -0,0 +1,3 @@
---
openapi: post /get-upscayl-history
---

View File

@ -0,0 +1,3 @@
---
openapi: post /complete-multipart-upload
---

View File

@ -1,98 +0,0 @@
---
title: 'Development'
description: 'Learn how to preview changes locally'
---
<Info>
**Prerequisite** You should have installed Node.js (version 18.10.0 or
higher).
</Info>
Step 1. Install Mintlify on your OS:
<CodeGroup>
```bash npm
npm i -g mintlify
```
```bash yarn
yarn global add mintlify
```
</CodeGroup>
Step 2. Go to the docs are located (where you can find `mint.json`) and run the following command:
```bash
mintlify dev
```
The documentation website is now available at `http://localhost:3000`.
### Custom Ports
Mintlify uses port 3000 by default. You can use the `--port` flag to customize the port Mintlify runs on. For example, use this command to run in port 3333:
```bash
mintlify dev --port 3333
```
You will see an error like this if you try to run Mintlify in a port that's already taken:
```md
Error: listen EADDRINUSE: address already in use :::3000
```
## Mintlify Versions
Each CLI is linked to a specific version of Mintlify. Please update the CLI if your local website looks different than production.
<CodeGroup>
```bash npm
npm i -g mintlify@latest
```
```bash yarn
yarn global upgrade mintlify
```
</CodeGroup>
## Deployment
<Tip>
Unlimited editors available under the [Startup
Plan](https://mintlify.com/pricing)
</Tip>
You should see the following if the deploy successfully went through:
<Frame>
<img src="/images/checks-passed.png" style={{ borderRadius: '0.5rem' }} />
</Frame>
## Troubleshooting
Here's how to solve some common problems when working with the CLI.
<AccordionGroup>
<Accordion title="Mintlify is not loading">
Update to Node v18. Run `mintlify install` and try again.
</Accordion>
<Accordion title="No such file or directory on Windows">
Go to the `C:/Users/Username/.mintlify/` directory and remove the `mint`
folder. Then Open the Git Bash in this location and run `git clone
https://github.com/mintlify/mint.git`.
Repeat step 3.
</Accordion>
<Accordion title="Getting an unknown error">
Try navigating to the root of your device and delete the ~/.mintlify folder.
Then run `mintlify dev` again.
</Accordion>
</AccordionGroup>
Curious about what changed in a CLI version? [Check out the CLI changelog.](/changelog/command-line)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 KiB

View File

@ -1,161 +0,0 @@
<svg width="700" height="320" viewBox="0 0 700 320" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2862_30)">
<rect width="700" height="320" rx="16" fill="url(#paint0_linear_2862_30)"/>
<path d="M311.889 247.3C283.097 247.215 258.226 231.466 246.292 201.629C234.357 171.793 238.02 134.523 253.414 101.112C282.206 101.197 307.077 116.945 319.011 146.782C330.946 176.619 327.283 213.888 311.889 247.3Z" fill="white"/>
<path d="M311.889 247.3C283.097 247.215 258.226 231.466 246.292 201.629C234.357 171.793 238.02 134.523 253.414 101.112C282.206 101.197 307.077 116.945 319.011 146.782C330.946 176.619 327.283 213.888 311.889 247.3Z" fill="url(#paint1_radial_2862_30)"/>
<path d="M311.889 247.3C283.097 247.215 258.226 231.466 246.292 201.629C234.357 171.793 238.02 134.523 253.414 101.112C282.206 101.197 307.077 116.945 319.011 146.782C330.946 176.619 327.283 213.888 311.889 247.3Z" fill="black" fill-opacity="0.5" style="mix-blend-mode:hard-light"/>
<path d="M311.889 247.3C283.097 247.215 258.226 231.466 246.292 201.629C234.357 171.793 238.02 134.523 253.414 101.112C282.206 101.197 307.077 116.945 319.011 146.782C330.946 176.619 327.283 213.888 311.889 247.3Z" fill="url(#paint2_linear_2862_30)" fill-opacity="0.5" style="mix-blend-mode:hard-light"/>
<path d="M311.72 247.034C283.108 246.887 258.409 231.208 246.538 201.531C234.656 171.825 238.271 134.702 253.583 101.377C282.195 101.524 306.894 117.203 318.765 146.88C330.647 176.586 327.031 213.709 311.72 247.034Z" stroke="url(#paint3_linear_2862_30)" stroke-opacity="0.05" stroke-width="0.530516"/>
<path d="M305.839 247.174C343.92 237.419 377.154 210.619 393.585 171.64C410.017 132.661 405.98 90.1988 386.347 56.1934C348.266 65.9477 315.032 92.7486 298.601 131.728C282.169 170.706 286.206 213.168 305.839 247.174Z" fill="white"/>
<path d="M305.839 247.174C343.92 237.419 377.154 210.619 393.585 171.64C410.017 132.661 405.98 90.1988 386.347 56.1934C348.266 65.9477 315.032 92.7486 298.601 131.728C282.169 170.706 286.206 213.168 305.839 247.174Z" fill="url(#paint4_radial_2862_30)"/>
<path d="M393.341 171.537C376.971 210.369 343.89 237.091 305.969 246.867C286.462 212.959 282.476 170.663 298.845 131.831C315.215 92.9978 348.295 66.2765 386.217 56.5004C405.724 90.4077 409.71 132.704 393.341 171.537Z" stroke="url(#paint5_linear_2862_30)" stroke-opacity="0.05" stroke-width="0.530516"/>
<path d="M305.686 246.995C329.749 266.114 361.965 272.832 393.67 262.129C425.376 251.426 449.499 225.691 461.03 194.556C436.967 175.437 404.751 168.719 373.045 179.422C341.34 190.125 317.217 215.86 305.686 246.995Z" fill="white"/>
<path d="M305.686 246.995C329.749 266.114 361.965 272.832 393.67 262.129C425.376 251.426 449.499 225.691 461.03 194.556C436.967 175.437 404.751 168.719 373.045 179.422C341.34 190.125 317.217 215.86 305.686 246.995Z" fill="url(#paint6_radial_2862_30)"/>
<path d="M305.686 246.995C329.749 266.114 361.965 272.832 393.67 262.129C425.376 251.426 449.499 225.691 461.03 194.556C436.967 175.437 404.751 168.719 373.045 179.422C341.34 190.125 317.217 215.86 305.686 246.995Z" fill="black" fill-opacity="0.2" style="mix-blend-mode:hard-light"/>
<path d="M305.686 246.995C329.749 266.114 361.965 272.832 393.67 262.129C425.376 251.426 449.499 225.691 461.03 194.556C436.967 175.437 404.751 168.719 373.045 179.422C341.34 190.125 317.217 215.86 305.686 246.995Z" fill="url(#paint7_linear_2862_30)" fill-opacity="0.5" style="mix-blend-mode:hard-light"/>
<path d="M393.586 261.878C362.034 272.529 329.98 265.88 306.002 246.907C317.534 215.919 341.57 190.327 373.13 179.673C404.681 169.023 436.735 175.671 460.714 194.644C449.181 225.632 425.145 251.224 393.586 261.878Z" stroke="url(#paint8_linear_2862_30)" stroke-opacity="0.05" stroke-width="0.530516"/>
<g opacity="0.8" filter="url(#filter0_f_2862_30)">
<circle cx="660" cy="-60" r="160" fill="#18E244" fill-opacity="0.4"/>
</g>
<g opacity="0.8" filter="url(#filter1_f_2862_30)">
<circle cx="20" cy="213" r="160" fill="#18CAE2" fill-opacity="0.33"/>
</g>
<g opacity="0.8" filter="url(#filter2_f_2862_30)">
<circle cx="660" cy="480" r="160" fill="#18E2B2" fill-opacity="0.52"/>
</g>
<g opacity="0.8" filter="url(#filter3_f_2862_30)">
<circle cx="20" cy="413" r="160" fill="#4018E2" fill-opacity="0.22"/>
</g>
<path opacity="0.2" d="M0 50H700" stroke="url(#paint9_radial_2862_30)" stroke-dasharray="4 4"/>
<path opacity="0.1" d="M0 82H700" stroke="url(#paint10_radial_2862_30)" stroke-dasharray="4 4"/>
<path opacity="0.2" d="M239 0L239 320" stroke="url(#paint11_radial_2862_30)" stroke-dasharray="4 4"/>
<path opacity="0.1" d="M271 0L271 320" stroke="url(#paint12_radial_2862_30)" stroke-dasharray="4 4"/>
<path opacity="0.2" d="M461 0L461 320" stroke="url(#paint13_radial_2862_30)" stroke-dasharray="4 4"/>
<path opacity="0.1" d="M429 0L429 320" stroke="url(#paint14_radial_2862_30)" stroke-dasharray="4 4"/>
<path opacity="0.2" d="M0 271H700" stroke="url(#paint15_radial_2862_30)" stroke-dasharray="4 4"/>
<path opacity="0.1" d="M0 239H700" stroke="url(#paint16_radial_2862_30)" stroke-dasharray="4 4"/>
<g style="mix-blend-mode:overlay" opacity="0.1">
<path d="M0 160H700" stroke="url(#paint17_linear_2862_30)"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.2">
<path d="M511 -1L189 321" stroke="url(#paint18_linear_2862_30)"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.2">
<path d="M511 321L189 -1" stroke="url(#paint19_linear_2862_30)"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.1">
<circle cx="350" cy="160" r="111" stroke="white"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.1">
<circle cx="350" cy="160" r="79" stroke="white"/>
</g>
</g>
<defs>
<filter id="filter0_f_2862_30" x="260" y="-460" width="800" height="800" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="120" result="effect1_foregroundBlur_2862_30"/>
</filter>
<filter id="filter1_f_2862_30" x="-380" y="-187" width="800" height="800" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="120" result="effect1_foregroundBlur_2862_30"/>
</filter>
<filter id="filter2_f_2862_30" x="260" y="80" width="800" height="800" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="120" result="effect1_foregroundBlur_2862_30"/>
</filter>
<filter id="filter3_f_2862_30" x="-380" y="13" width="800" height="800" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="120" result="effect1_foregroundBlur_2862_30"/>
</filter>
<linearGradient id="paint0_linear_2862_30" x1="1.04308e-05" y1="320" x2="710.784" y2="26.0793" gradientUnits="userSpaceOnUse">
<stop stop-color="#18E299" stop-opacity="0.09"/>
<stop offset="0.729167" stop-color="#0D9373" stop-opacity="0.08"/>
</linearGradient>
<radialGradient id="paint1_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(208.697 189.703) rotate(-10.029) scale(169.097 167.466)">
<stop stop-color="#00B0BB"/>
<stop offset="1" stop-color="#00DB65"/>
</radialGradient>
<linearGradient id="paint2_linear_2862_30" x1="306.587" y1="93.5598" x2="252.341" y2="224.228" gradientUnits="userSpaceOnUse">
<stop stop-color="#18E299"/>
<stop offset="1"/>
</linearGradient>
<linearGradient id="paint3_linear_2862_30" x1="311.84" y1="123.717" x2="253.579" y2="224.761" gradientUnits="userSpaceOnUse">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
<radialGradient id="paint4_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(313.407 243.64) rotate(-75.7542) scale(203.632 223.902)">
<stop stop-color="#00BBBB"/>
<stop offset="0.712616" stop-color="#00DB65"/>
</radialGradient>
<linearGradient id="paint5_linear_2862_30" x1="308.586" y1="102.284" x2="383.487" y2="201.169" gradientUnits="userSpaceOnUse">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
<radialGradient id="paint6_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(311.446 249.925) rotate(-20.3524) scale(174.776 163.096)">
<stop stop-color="#00B0BB"/>
<stop offset="1" stop-color="#00DB65"/>
</radialGradient>
<linearGradient id="paint7_linear_2862_30" x1="395.842" y1="169.781" x2="332.121" y2="263.82" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B1BC"/>
<stop offset="1"/>
</linearGradient>
<linearGradient id="paint8_linear_2862_30" x1="395.842" y1="169.781" x2="370.99" y2="271.799" gradientUnits="userSpaceOnUse">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
<radialGradient id="paint9_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(350 50) scale(398.125 182)">
<stop offset="0.348958" stop-color="#84FFD3"/>
<stop offset="0.880208" stop-color="#18E299" stop-opacity="0"/>
</radialGradient>
<radialGradient id="paint10_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(350 82) scale(398.125 182)">
<stop offset="0.348958" stop-color="#84FFD3"/>
<stop offset="0.880208" stop-color="#18E299" stop-opacity="0"/>
</radialGradient>
<radialGradient id="paint11_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(239 160) rotate(90) scale(182 182)">
<stop offset="0.348958" stop-color="#84FFD3"/>
<stop offset="0.880208" stop-color="#18E299" stop-opacity="0"/>
</radialGradient>
<radialGradient id="paint12_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(271 160) rotate(90) scale(182 182)">
<stop offset="0.348958" stop-color="#84FFD3"/>
<stop offset="0.880208" stop-color="#18E299" stop-opacity="0"/>
</radialGradient>
<radialGradient id="paint13_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(461 160) rotate(90) scale(182 182)">
<stop offset="0.348958" stop-color="#84FFD3"/>
<stop offset="0.880208" stop-color="#18E299" stop-opacity="0"/>
</radialGradient>
<radialGradient id="paint14_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(429 160) rotate(90) scale(182 182)">
<stop offset="0.348958" stop-color="#84FFD3"/>
<stop offset="0.880208" stop-color="#18E299" stop-opacity="0"/>
</radialGradient>
<radialGradient id="paint15_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(350 271) scale(398.125 182)">
<stop offset="0.348958" stop-color="#84FFD3"/>
<stop offset="0.880208" stop-color="#18E299" stop-opacity="0"/>
</radialGradient>
<radialGradient id="paint16_radial_2862_30" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(350 239) scale(398.125 182)">
<stop offset="0.348958" stop-color="#84FFD3"/>
<stop offset="0.880208" stop-color="#18E299" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint17_linear_2862_30" x1="0" y1="160" x2="700" y2="160" gradientUnits="userSpaceOnUse">
<stop stop-color="white" stop-opacity="0.1"/>
<stop offset="0.5" stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0.1"/>
</linearGradient>
<linearGradient id="paint18_linear_2862_30" x1="511" y1="-1" x2="189" y2="321" gradientUnits="userSpaceOnUse">
<stop stop-color="white" stop-opacity="0.1"/>
<stop offset="0.5" stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0.1"/>
</linearGradient>
<linearGradient id="paint19_linear_2862_30" x1="511" y1="321" x2="189" y2="-0.999997" gradientUnits="userSpaceOnUse">
<stop stop-color="white" stop-opacity="0.1"/>
<stop offset="0.5" stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0.1"/>
</linearGradient>
<clipPath id="clip0_2862_30">
<rect width="700" height="320" rx="16" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1,155 +0,0 @@
<svg width="700" height="320" viewBox="0 0 700 320" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2862_278)">
<rect width="700" height="320" rx="16" fill="url(#paint0_linear_2862_278)"/>
<path d="M311.889 247.3C283.097 247.215 258.226 231.466 246.292 201.629C234.357 171.793 238.02 134.523 253.414 101.112C282.206 101.197 307.077 116.945 319.011 146.782C330.946 176.619 327.283 213.888 311.889 247.3Z" fill="white"/>
<path d="M311.889 247.3C283.097 247.215 258.226 231.466 246.292 201.629C234.357 171.793 238.02 134.523 253.414 101.112C282.206 101.197 307.077 116.945 319.011 146.782C330.946 176.619 327.283 213.888 311.889 247.3Z" fill="url(#paint1_radial_2862_278)"/>
<path d="M311.889 247.3C283.097 247.215 258.226 231.466 246.292 201.629C234.357 171.793 238.02 134.523 253.414 101.112C282.206 101.197 307.077 116.945 319.011 146.782C330.946 176.619 327.283 213.888 311.889 247.3Z" fill="black" fill-opacity="0.5" style="mix-blend-mode:hard-light"/>
<path d="M311.889 247.3C283.097 247.215 258.226 231.466 246.292 201.629C234.357 171.793 238.02 134.523 253.414 101.112C282.206 101.197 307.077 116.945 319.011 146.782C330.946 176.619 327.283 213.888 311.889 247.3Z" fill="url(#paint2_linear_2862_278)" fill-opacity="0.5" style="mix-blend-mode:hard-light"/>
<path d="M311.72 247.034C283.108 246.887 258.409 231.208 246.538 201.531C234.656 171.825 238.271 134.702 253.583 101.377C282.195 101.524 306.894 117.203 318.765 146.88C330.647 176.586 327.031 213.709 311.72 247.034Z" stroke="url(#paint3_linear_2862_278)" stroke-opacity="0.05" stroke-width="0.530516"/>
<path d="M305.839 247.174C343.92 237.419 377.154 210.619 393.585 171.64C410.017 132.661 405.98 90.1988 386.347 56.1934C348.266 65.9477 315.032 92.7486 298.601 131.728C282.169 170.706 286.206 213.168 305.839 247.174Z" fill="white"/>
<path d="M305.839 247.174C343.92 237.419 377.154 210.619 393.585 171.64C410.017 132.661 405.98 90.1988 386.347 56.1934C348.266 65.9477 315.032 92.7486 298.601 131.728C282.169 170.706 286.206 213.168 305.839 247.174Z" fill="url(#paint4_radial_2862_278)"/>
<path d="M393.341 171.537C376.971 210.369 343.89 237.091 305.969 246.867C286.462 212.959 282.476 170.663 298.845 131.831C315.215 92.9978 348.295 66.2765 386.217 56.5004C405.724 90.4077 409.71 132.704 393.341 171.537Z" stroke="url(#paint5_linear_2862_278)" stroke-opacity="0.05" stroke-width="0.530516"/>
<path d="M305.686 246.995C329.75 266.114 361.965 272.832 393.671 262.129C425.376 251.426 449.499 225.691 461.03 194.556C436.967 175.437 404.751 168.719 373.046 179.422C341.34 190.125 317.217 215.86 305.686 246.995Z" fill="white"/>
<path d="M305.686 246.995C329.75 266.114 361.965 272.832 393.671 262.129C425.376 251.426 449.499 225.691 461.03 194.556C436.967 175.437 404.751 168.719 373.046 179.422C341.34 190.125 317.217 215.86 305.686 246.995Z" fill="url(#paint6_radial_2862_278)"/>
<path d="M305.686 246.995C329.75 266.114 361.965 272.832 393.671 262.129C425.376 251.426 449.499 225.691 461.03 194.556C436.967 175.437 404.751 168.719 373.046 179.422C341.34 190.125 317.217 215.86 305.686 246.995Z" fill="black" fill-opacity="0.2" style="mix-blend-mode:hard-light"/>
<path d="M305.686 246.995C329.75 266.114 361.965 272.832 393.671 262.129C425.376 251.426 449.499 225.691 461.03 194.556C436.967 175.437 404.751 168.719 373.046 179.422C341.34 190.125 317.217 215.86 305.686 246.995Z" fill="url(#paint7_linear_2862_278)" fill-opacity="0.5" style="mix-blend-mode:hard-light"/>
<path d="M393.586 261.878C362.035 272.529 329.981 265.88 306.002 246.907C317.535 215.919 341.571 190.327 373.13 179.673C404.682 169.023 436.736 175.671 460.715 194.644C449.182 225.632 425.146 251.224 393.586 261.878Z" stroke="url(#paint8_linear_2862_278)" stroke-opacity="0.05" stroke-width="0.530516"/>
<g opacity="0.8" filter="url(#filter0_f_2862_278)">
<circle cx="660" cy="-60" r="160" fill="#18E299" fill-opacity="0.4"/>
</g>
<g opacity="0.8" filter="url(#filter1_f_2862_278)">
<circle cx="20" cy="213" r="160" fill="#18E299" fill-opacity="0.33"/>
</g>
<g opacity="0.8" filter="url(#filter2_f_2862_278)">
<circle cx="660" cy="480" r="160" fill="#18E299" fill-opacity="0.52"/>
</g>
<g opacity="0.8" filter="url(#filter3_f_2862_278)">
<circle cx="20" cy="413" r="160" fill="#18E299" fill-opacity="0.22"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.1">
<path d="M0 50H700" stroke="black" stroke-dasharray="4 4"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.1">
<path d="M0 82H700" stroke="black" stroke-dasharray="4 4"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.1">
<path d="M239 0L239 320" stroke="black" stroke-dasharray="4 4"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.1">
<path d="M271 0L271 320" stroke="black" stroke-dasharray="4 4"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.1">
<path d="M461 0L461 320" stroke="black" stroke-dasharray="4 4"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.1">
<path d="M350 0L350 320" stroke="url(#paint9_linear_2862_278)"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.1">
<path d="M429 0L429 320" stroke="black" stroke-dasharray="4 4"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.1">
<path d="M0 271H700" stroke="black" stroke-dasharray="4 4"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.1">
<path d="M0 239H700" stroke="black" stroke-dasharray="4 4"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.1">
<path d="M0 160H700" stroke="url(#paint10_linear_2862_278)"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.1">
<path d="M511 -1L189 321" stroke="url(#paint11_linear_2862_278)"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.1">
<path d="M511 321L189 -1" stroke="url(#paint12_linear_2862_278)"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.05">
<circle cx="350" cy="160" r="111" stroke="black"/>
</g>
<g style="mix-blend-mode:overlay" opacity="0.05">
<circle cx="350" cy="160" r="79" stroke="black"/>
</g>
</g>
<defs>
<filter id="filter0_f_2862_278" x="260" y="-460" width="800" height="800" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="120" result="effect1_foregroundBlur_2862_278"/>
</filter>
<filter id="filter1_f_2862_278" x="-380" y="-187" width="800" height="800" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="120" result="effect1_foregroundBlur_2862_278"/>
</filter>
<filter id="filter2_f_2862_278" x="260" y="80" width="800" height="800" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="120" result="effect1_foregroundBlur_2862_278"/>
</filter>
<filter id="filter3_f_2862_278" x="-380" y="13" width="800" height="800" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="120" result="effect1_foregroundBlur_2862_278"/>
</filter>
<linearGradient id="paint0_linear_2862_278" x1="1.04308e-05" y1="320" x2="710.784" y2="26.0793" gradientUnits="userSpaceOnUse">
<stop stop-color="#18E299" stop-opacity="0.09"/>
<stop offset="0.729167" stop-color="#0D9373" stop-opacity="0.08"/>
</linearGradient>
<radialGradient id="paint1_radial_2862_278" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(208.697 189.703) rotate(-10.029) scale(169.097 167.466)">
<stop stop-color="#00B0BB"/>
<stop offset="1" stop-color="#00DB65"/>
</radialGradient>
<linearGradient id="paint2_linear_2862_278" x1="306.587" y1="93.5598" x2="252.341" y2="224.228" gradientUnits="userSpaceOnUse">
<stop stop-color="#18E299"/>
<stop offset="1"/>
</linearGradient>
<linearGradient id="paint3_linear_2862_278" x1="311.84" y1="123.717" x2="253.579" y2="224.761" gradientUnits="userSpaceOnUse">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
<radialGradient id="paint4_radial_2862_278" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(313.407 243.64) rotate(-75.7542) scale(203.632 223.902)">
<stop stop-color="#00BBBB"/>
<stop offset="0.712616" stop-color="#00DB65"/>
</radialGradient>
<linearGradient id="paint5_linear_2862_278" x1="308.586" y1="102.284" x2="383.487" y2="201.169" gradientUnits="userSpaceOnUse">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
<radialGradient id="paint6_radial_2862_278" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(311.447 249.925) rotate(-20.3524) scale(174.776 163.096)">
<stop stop-color="#00B0BB"/>
<stop offset="1" stop-color="#00DB65"/>
</radialGradient>
<linearGradient id="paint7_linear_2862_278" x1="395.843" y1="169.781" x2="332.121" y2="263.82" gradientUnits="userSpaceOnUse">
<stop stop-color="#00B1BC"/>
<stop offset="1"/>
</linearGradient>
<linearGradient id="paint8_linear_2862_278" x1="395.843" y1="169.781" x2="370.991" y2="271.799" gradientUnits="userSpaceOnUse">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint9_linear_2862_278" x1="350" y1="0" x2="350" y2="320" gradientUnits="userSpaceOnUse">
<stop stop-opacity="0"/>
<stop offset="0.0001" stop-opacity="0.3"/>
<stop offset="0.333333"/>
<stop offset="0.666667"/>
<stop offset="1" stop-opacity="0.3"/>
</linearGradient>
<linearGradient id="paint10_linear_2862_278" x1="0" y1="160" x2="700" y2="160" gradientUnits="userSpaceOnUse">
<stop stop-opacity="0.1"/>
<stop offset="0.5"/>
<stop offset="1" stop-opacity="0.1"/>
</linearGradient>
<linearGradient id="paint11_linear_2862_278" x1="511" y1="-1" x2="189" y2="321" gradientUnits="userSpaceOnUse">
<stop stop-opacity="0.1"/>
<stop offset="0.5"/>
<stop offset="1" stop-opacity="0.1"/>
</linearGradient>
<linearGradient id="paint12_linear_2862_278" x1="511" y1="321" x2="189" y2="-0.999997" gradientUnits="userSpaceOnUse">
<stop stop-opacity="0.1"/>
<stop offset="0.5"/>
<stop offset="1" stop-opacity="0.1"/>
</linearGradient>
<clipPath id="clip0_2862_278">
<rect width="700" height="320" rx="16" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 10 KiB

BIN
docs/images/mac-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

View File

@ -1,6 +1,6 @@
--- ---
title: Introduction title: Introduction
description: 'Welcome to Upscayl Documentation! 🎉' description: "Welcome to Upscayl Documentation! 🎉"
--- ---
Here we're trying to build documentation around Upscayl for everyone. Here we're trying to build documentation around Upscayl for everyone.
@ -10,47 +10,46 @@ This guide will continue to grow as we add more content. If you have any suggest
### Contents ### Contents
<CardGroup cols={2}> <CardGroup cols={2}>
<Card <Card
title="🙋 How to ask for help?" title="🙋 How to ask for help?"
href="https://github.com/upscayl/upscayl/wiki/%F0%9F%99%8B-How-to-ask-for-help%3F" href="https://github.com/upscayl/upscayl/wiki/%F0%9F%99%8B-How-to-ask-for-help%3F"
> >
Read this guide to learn how to ask for help on Upscayl's GitHub. Read this guide to learn how to ask for help on Upscayl's GitHub.
</Card> </Card>
<Card <Card
title="🧩 Compatibility List" title="🧩 Compatibility List"
href="https://github.com/upscayl/upscayl/wiki/Compatibility-List" href="https://github.com/upscayl/upscayl/wiki/Compatibility-List"
> >
Check if your GPU is compatible with Upscayl. Check if your GPU is compatible with Upscayl.
</Card> </Card>
<Card <Card
title="📖 User Guide" title="📖 User Guide"
href="https://github.com/upscayl/upscayl/wiki/Guide" href="https://github.com/upscayl/upscayl/wiki/Guide"
> >
Learn the various confusing features of Upscayl. Learn the various confusing features of Upscayl.
</Card> </Card>
<Card <Card
title="🔨 Troubleshooting" title="🔨 Troubleshooting"
href="https://github.com/upscayl/upscayl/wiki/Troubleshooting" href="/troubleshooting"
> >
Learn how to troubleshoot common issues with Upscayl. Learn how to troubleshoot common issues with Upscayl.
</Card> </Card>
<Card <Card
title="🖥️ Model Conversion Guide" title="🖥️ Model Conversion Guide"
href="https://github.com/upscayl/upscayl/wiki/Model-Conversion-Guide" href="https://github.com/upscayl/upscayl/wiki/Model-Conversion-Guide"
> >
Learn how to convert PyTorch models to NCNN models for Upscayl. Learn how to convert PyTorch models to NCNN models for Upscayl.
</Card> </Card>
<Card <Card
title="🤫 Miscellaneous Configuration" title="🤫 Miscellaneous Configuration"
href="https://github.com/upscayl/upscayl/wiki/Misc" href="https://github.com/upscayl/upscayl/wiki/Misc"
> >
Learn about the miscellaneous configurations in Upscayl. Learn about the miscellaneous configurations in Upscayl.
</Card> </Card>
<Card <Card
title="🤯 Using Upscayl on Windows and Linux with only a CPU" title="🤯 Using Upscayl on Windows and Linux with only a CPU"
href="https://github.com/upscayl/upscayl/issues/390" href="https://github.com/upscayl/upscayl/issues/390"
> >
Learn how to use Upscayl on Windows and Linux without a graphics card. Learn how to use Upscayl on Windows and Linux without a graphics card.
</Card> </Card>
</CardGroup> </CardGroup>

View File

@ -46,6 +46,31 @@
{ {
"group": "Get Started", "group": "Get Started",
"pages": ["introduction"] "pages": ["introduction"]
},
{
"group": "Troubleshooting",
"pages": [
{
"group": "Introduction",
"pages": [
"troubleshooting/general-fixes",
"troubleshooting/linux",
"troubleshooting/mac",
"troubleshooting/windows"
]
},
"troubleshooting/logs"
]
},
{
"group": "API Reference",
"pages": [
"get-task-status",
"get-upload-url",
"complete-a-multipart-upload",
"get-upscayl-history",
"start-a-new-task"
]
} }
], ],
"footerSocials": { "footerSocials": {

547
docs/openapi.yaml Normal file
View File

@ -0,0 +1,547 @@
---
openapi: 3.0.0
info:
title: Upscayl Cloud API Documentation
version: 1.0.0
paths:
/get-upload-url:
post:
operationId: getUploadUrl
summary: Get upload URL
requestBody:
content:
application/json:
schema:
type: object
properties:
originalFileName:
type: string
description: The original file name
example: file.jpeg
fileType:
type: string
description: The file type
example: image/jpeg
fileSize:
type: number
description: The file size in bytes
example: 123456
responses:
"200":
description: Successful operation
content:
application/json:
schema:
type: object
properties:
status:
type: string
example: success
data:
type: object
properties:
uploadURL:
type: string
example: http://example.com/upload
fileName:
type: string
example: example.jpg
fileType:
type: string
example: image/jpeg
fileSize:
type: number
example: 12345
originalFileName:
type: string
example: original.jpg
createdAt:
type: number
example: 1633024800000
expiresAt:
type: number
example: 1654560800000
"400":
description: Bad request
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
examples:
InvalidFileType:
value:
error: InvalidFileType
message: "Bad Request: Invalid File Type"
MissingUserID:
value:
error: MissingUserID
message: "Bad Request: Missing User ID"
MissingOriginalFileName:
value:
error: MissingOriginalFileName
message: "Bad Request: Missing Original File Name"
"500":
description: Internal server error
content:
text/plain:
schema:
type: string
example: Internal Server Error
/get-upscayl-history:
post:
operationId: getUpscaylHistory
summary: Get Upscayl History
requestBody:
content:
application/json:
schema:
type: object
properties:
timestampOffset:
type: number
description: The timestamp offset
example: 1633024800000
batch:
type: boolean
description: The batch mode status
example: true
failed:
type: boolean
description: The failed status
example: false
limit:
type: number
description: The limit for the number of records to retrieve
example: 10
processed:
type: string
description: The processed status
example: processing
responses:
"200":
description: Successful operation
content:
application/json:
schema:
type: object
properties:
status:
type: string
example: "success"
data:
type: array
items:
type: object
properties:
batchMode:
type: boolean
enhanceFace:
type: boolean
error:
type: string
files:
type: array
items:
type: object
properties:
fileName:
type: string
fileType:
type: string
path:
type: string
createdAt:
type: number
expiresAt:
type: number
originalFileName:
type: string
fileSize:
type: number
downloadLink:
type: string
thumbnailLink:
type: string
finalFileSize:
type: number
processedFileName:
type: string
dimensions:
type: object
properties:
width:
type: number
height:
type: number
model:
type: string
progress:
type: string
scale:
type: string
status:
type: string
saveImageAs:
type: string
enum: ["png", "jpg", "webp"]
compression:
type: number
creditsDeducted:
type: boolean
"400":
description: Bad request
content:
text/plain:
schema:
type: string
example: "Bad Request: Missing User ID"
"204":
description: No content
content:
text/plain:
schema:
type: string
example: "No data found"
"500":
description: Internal server error
content:
text/plain:
schema:
type: string
example: "Error getting data"
/get-task-status:
post:
operationId: getTaskStatus
summary: Get Task Status
requestBody:
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
taskId:
type: string
description: The task ID
example: 30a89e69-c702-4247-9905-f0a53dfa45ab
responses:
"200":
description: Successful operation
content:
application/json:
schema:
type: object
properties:
status:
type: string
example: "success"
data:
type: object
properties:
batchMode:
type: boolean
description: Indicates if batch mode is enabled
enhanceFace:
type: boolean
description: Indicates if face enhancement is enabled
error:
type: string
description: Error message if any
files:
type: array
items:
type: object
properties:
fileName:
type: string
fileType:
type: string
path:
type: string
createdAt:
type: number
expiresAt:
type: number
originalFileName:
type: string
fileSize:
type: number
downloadLink:
type: string
thumbnailLink:
type: string
finalFileSize:
type: number
processedFileName:
type: string
dimensions:
type: object
properties:
width:
type: number
height:
type: number
model:
type: string
description: The model used for the task
progress:
type: string
description: The progress of the task
scale:
type: string
description: The scale of the task
status:
type: string
description: The status of the task
saveImageAs:
type: string
enum: ["png", "jpg", "webp"]
description: The format to save the image as
compression:
type: number
description: The compression level
creditsDeducted:
type: boolean
description: Indicates if credits were deducted
deductedCredits:
type: number
description: The number of credits deducted
"400":
description: Bad request
content:
text/plain:
schema:
type: string
example: "Bad Request: Missing User ID or Task ID"
"404":
description: Not found
content:
text/plain:
schema:
type: string
examples:
noDocument:
value: "No such document"
noFiles:
value: "No files found"
noUser:
value: "User not found"
"500":
description: Internal server error
content:
text/plain:
schema:
type: string
examples:
genericError:
value: "Error getting data"
linkGenerationError:
value: "Error generating links for images"
/start-task:
post:
operationId: startTask
summary: Start a new task
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
files:
type: array
items:
type: object
properties:
fileName:
description: The file name or the URL of the file
type: string
fileType:
description: The file type
type: string
fileSize:
description: The file size in bytes
type: integer
originalFileName:
description: The original file name
type: string
createdAt:
description: The timestamp when the file was created
type: number
format: float
expiresAt:
description: The timestamp when the file expires
type: number
format: float
description: (Optional) The files to process. Optional if the file is not manually provided in the file property
file:
type: string
format: binary
description: (Optional) A single file to upload, used when startTask is being used to upload the file, not needed if already uploaded s3 files or file links are passed in files array
enhanceFace:
type: boolean
description: Whether to enhance faces in the image
example: false
model:
type: string
description: The model to use for the task
example: digital-art
scale:
type: string
description: The scale factor for the task
example: "4"
compression:
type: number
description: The compression level
example: 0
saveImageAs:
type: string
enum: ["png", "jpg", "webp"]
description: The format to save the image as
example: jpg
responses:
"200":
description: Successful operation
content:
application/json:
schema:
type: object
properties:
status:
type: string
example: "success"
data:
type: object
properties:
message:
type: string
example: "Task request sent successfully"
taskId:
type: string
example: "30a89e69-c702-4247-9905-f0a53dfa45ab"
"400":
description: Bad request
content:
text/plain:
schema:
type: string
examples:
missingUserId:
value: "Bad Request: Missing User ID"
missingFiles:
value: "Bad Request: Missing Files"
missingModelName:
value: "Bad Request: Missing Model Name"
missingScale:
value: "Bad Request: Missing Scale"
missingImageOptions:
value: "Bad Request: Missing Image Options"
"402":
description: Payment required
content:
text/plain:
schema:
type: string
example: "Insufficient credits"
"500":
description: Internal server error
content:
text/plain:
schema:
type: string
example: "Error contacting the server"
/complete-multipart-upload:
post:
operationId: completeMultipartUpload
summary: Complete a multipart upload
requestBody:
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
uploadId:
type: string
description: The upload ID
example: "exampleUploadId"
key:
type: string
description: The object key
example: "exampleKey"
parts:
type: array
items:
type: object
properties:
ETag:
type: string
description: The entity tag for the part
example: "exampleETag"
PartNumber:
type: integer
description: The part number
example: 1
required:
- uploadId
- key
- parts
responses:
"200":
description: Successful operation
content:
application/json:
schema:
type: object
properties:
status:
type: string
example: "success"
data:
type: object
properties:
status:
type: string
example: "success"
# Uncomment and add these properties if needed
# location:
# type: string
# example: "http://example.com/location"
# bucket:
# type: string
# example: "exampleBucket"
# key:
# type: string
# example: "exampleKey"
# eTag:
# type: string
# example: "exampleETag"
"400":
description: Bad request
content:
text/plain:
schema:
type: string
example: "Bad Request: Missing required parameters"
"401":
description: Unauthorized
content:
text/plain:
schema:
type: string
example: "Unauthorized: Invalid API key"
"500":
description: Internal server error
content:
text/plain:
schema:
type: string
example: "Internal Server Error: Error completing multipart upload"

View File

@ -1,86 +0,0 @@
---
title: 'Quickstart'
description: 'Start building awesome documentation in under 5 minutes'
---
## Setup your development
Learn how to update your docs locally and and deploy them to the public.
### Edit and preview
<AccordionGroup>
<Accordion icon="github" title="Clone your docs locally">
During the onboarding process, we created a repository on your Github with
your docs content. You can find this repository on our
[dashboard](https://dashboard.mintlify.com). To clone the repository
locally, follow these
[instructions](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository)
in your terminal.
</Accordion>
<Accordion icon="rectangle-terminal" title="Preview changes">
Previewing helps you make sure your changes look as intended. We built a
command line interface to render these changes locally. 1. Install the
[Mintlify CLI](https://www.npmjs.com/package/mintlify) to preview the
documentation changes locally with this command: ``` npm i -g mintlify ```
2. Run the following command at the root of your documentation (where
`mint.json` is): ``` mintlify dev ```
</Accordion>
</AccordionGroup>
### Deploy your changes
<AccordionGroup>
<Accordion icon="message-bot" title="Install our Github app">
Our Github app automatically deploys your changes to your docs site, so you
don't need to manage deployments yourself. You can find the link to install on
your [dashboard](https://dashboard.mintlify.com). Once the bot has been
successfully installed, there should be a check mark next to the commit hash
of the repo.
</Accordion>
<Accordion icon="rocket" title="Push your changes">
[Commit and push your changes to
Git](https://docs.github.com/en/get-started/using-git/pushing-commits-to-a-remote-repository#about-git-push)
for your changes to update in your docs site. If you push and don't see that
the Github app successfully deployed your changes, you can also manually
update your docs through our [dashboard](https://dashboard.mintlify.com).
</Accordion>
</AccordionGroup>
## Update your docs
Add content directly in your files with MDX syntax and React components. You can use any of our components, or even build your own.
<CardGroup>
<Card title="Style Your Docs" icon="paintbrush" href="/settings/global">
Add flair to your docs with personalized branding.
</Card>
<Card
title="Add API Endpoints"
icon="square-code"
href="/api-playground/configuration"
>
Implement your OpenAPI spec and enable API user interaction.
</Card>
<Card
title="Integrate Analytics"
icon="chart-mixed"
href="/analytics/supported-integrations"
>
Draw insights from user interactions with your documentation.
</Card>
<Card
title="Host on a Custom Domain"
icon="browser"
href="/settings/custom-domain/subdomain"
>
Keep your docs on your own website's subdomain.
</Card>
</CardGroup>

View File

@ -0,0 +1,3 @@
---
openapi: post /start-task
---

View File

@ -0,0 +1,17 @@
---
title: General Fixes
description: "Troubleshooting common issues with Upscayl"
---
If you run into problems with Upscayl, here are a few ways to fix it.
<Note>
You'll need a Vulkan compatible GPU to upscale images. Many CPU and iGPUs do not work but no harm in trying. Make sure to read [the FAQ](https://github.com/upscayl/upscayl#-faq) first to avoid getting rickrolled 😁
</Note>
- Uninstall and Reinstall the app.
- Restart your computer.
- Try setting your [GPU ID](https://github.com/upscayl/upscayl/wiki/Guide#gpu-id) to your discrete GPU.
<Warning>If all of the above fail, [Please click here to know how you can ask for help](https://github.com/upscayl/upscayl/wiki/%F0%9F%99%8B-How-to-ask-for-help%3F).</Warning>

View File

@ -0,0 +1,6 @@
---
title: Linux Troubleshooting
description: "Troubleshooting common issues with Upscayl on Linux"
---
1. Run [VulkanCapsViewer](https://github.com/SaschaWillems/VulkanCapsViewer). See if your GPU supports Vulkan.
2. Reinstall graphics drivers.

View File

@ -0,0 +1,14 @@
---
title: Logs
description: "How to view and share logs in Upscayl"
---
## Steps
To view logs in Upscayl, you can use the following methods:
1. Open the Upscayl app.
2. Click on the `Settings` tab.
3. Under the `LOGS` section, you can view the logs in real-time.
4. To share the logs, click on the `COPY LOGS 📋` button to copy the logs to your clipboard.
5. To share the logs with the Upscayl team, go to [LogPasta](https://logpasta.com/) and paste the logs there.
6. Share the LogPasta link with the Upscayl team.

View File

@ -0,0 +1,24 @@
---
title: MacOS Troubleshooting
description: "Troubleshooting common issues with Upscayl on MacOS"
---
<Warning>
If you have MacOS Monterey, you may face issues with the app (empty black screen). This is because Monterey had issues with electron apps, this isn't something we can fix as this is an OS level bug. We recommend upgrading to the latest version of MacOS that your device supports.
</Warning>
1. Make sure you're using the latest MacOS update.
2. If the app doesn't work, try deleting all its files and folders:
1. Open Finder → Click **Go** in the menu bar → Select **Go to Folder** from the drop-down menu → In the window that appears, type **~/Library/** and press Enter. ![Finder Go To](images/mac-1.png)
2. Here, in the `Library` folder, find and remove all files which contain `upscayl`.
3. Here's a list of files and folders you can safely delete:
<Note>
Please do not delete the folders that do not have `upscayl` in their name
</Note>
- ``~/Library/Application Support/Upscayl``
- ``~/Library/Saved Application State/org.upscayl.Upscayl.savedState/``
- ``~/Library/Group Containers/W2T4W74X87.org.upscayl.Upscayl``
- ``~/Library/Containers/Upscayl`` and other folders there that have `upscayl` in their name.
- ``~/Library/Preferences/org.upscayl.Upscayl.plist/``
- ``~/Library/Preferences/org.upscayl.Upscayl.helper.plist/``

View File

@ -0,0 +1,13 @@
---
title: Windows Troubleshooting
description: "Troubleshooting common issues with Upscayl on Windows"
---
- [Set the app to performance mode](https://youtube.com/watch?v=sxvs6qYHJmc) and make sure you have the right redistributables.
- Try [DirectX repair](http://blog.csdn.net/vbcom/article/details/6962388).
- [Disable switchable graphics](https://nvidia.custhelp.com/app/answers/detail/a_id/5182/~/unable-to-launch-vulkan-apps%2Fgame-on-notebooks-with-amd-radeon-igpus) if you can.
- [Enable hardware-accelerated GPU scheduling](https://www.howtogeek.com/756935/how-to-enable-hardware-accelerated-gpu-scheduling-in-windows-11) if you can.
- Run [VulkanCapsViewer](https://github.com/SaschaWillems/VulkanCapsViewer). See if your GPU supports Vulkan.
- Reinstall graphics drivers.
#### Credits
Thanks to @[JZeravik](https://github.com/JZeravik) for the switchable graphics tip.

View File

@ -10,9 +10,9 @@ export const customModelsPathAtom = atomWithStorage<string | null>(
export const selectedModelIdAtom = atomWithStorage<ModelId | string>( export const selectedModelIdAtom = atomWithStorage<ModelId | string>(
"selectedModelId", "selectedModelId",
"realesrgan-x4plus", "upscayl-standard-4x",
); );
export const doubleUpscaylAtom = atomWithStorage("selectedModelId", false); export const doubleUpscaylAtom = atomWithStorage("doubleUpscayl", false);
export const gpuIdAtom = atomWithStorage("gpuId", ""); export const gpuIdAtom = atomWithStorage("gpuId", "");
export const saveImageAsAtom = atomWithStorage<ImageFormat>( export const saveImageAsAtom = atomWithStorage<ImageFormat>(
"saveImageAs", "saveImageAs",

View File

@ -1,31 +1,5 @@
import React, { useRef, useState } from "react"; import React, { useRef, useState } from "react";
const LensImage = ({
src,
alt,
lensPosition,
zoomAmount,
}: {
src: string;
alt: string;
lensPosition: { x: number; y: number };
zoomAmount: number;
}) => (
<div className="h-full w-full overflow-hidden">
<img
src={src}
alt={alt}
className="h-full w-full"
style={{
objectFit: "contain",
objectPosition: `${-lensPosition.x}px ${-lensPosition.y}px`,
transform: `scale(${zoomAmount / 100})`,
transformOrigin: "top left",
}}
/>
</div>
);
const LensViewer = ({ const LensViewer = ({
zoomAmount, zoomAmount,
lensSize, lensSize,
@ -37,64 +11,75 @@ const LensViewer = ({
sanitizedImagePath: string; sanitizedImagePath: string;
sanitizedUpscaledImagePath: string; sanitizedUpscaledImagePath: string;
}) => { }) => {
const upscaledImageRef = useRef<HTMLImageElement>(null); const [hoverPosition, setHoverPosition] = useState({ x: 0, y: 0 });
const zoomLevel = 4; // Adjust zoom level as needed
const [lensPosition, setLensPosition] = useState({ x: 0, y: 0 }); const handleMouseMove = (e: React.MouseEvent) => {
const { left, top, width, height } =
e.currentTarget.getBoundingClientRect();
const x = ((e.clientX - left) / width) * 100;
const y = ((e.clientY - top) / height) * 100;
const handleMouseMoveCompare = (e: React.MouseEvent) => { setHoverPosition({ x, y });
if (upscaledImageRef.current) {
const { left, top, width, height } =
upscaledImageRef.current.getBoundingClientRect();
const x = e.clientX - left;
const y = e.clientY - top;
setLensPosition({
x: Math.max(0, Math.min(x - lensSize, width - lensSize * 2)),
y: Math.max(0, Math.min(y - lensSize / 2, height - lensSize)),
});
}
}; };
const originalImage = "file:///" + sanitizedImagePath;
const upscaledImage = "file:///" + sanitizedUpscaledImagePath;
return ( return (
<div <div className="group relative flex h-screen flex-col items-center">
className="group relative h-full w-full overflow-hidden" {/* Main image container */}
onMouseMove={handleMouseMoveCompare}
>
{/* UPSCALED IMAGE */}
<img
className="h-full w-full object-contain"
src={"file:///" + sanitizedUpscaledImagePath}
alt="Upscaled"
ref={upscaledImageRef}
/>
{/* LENS */}
<div <div
className="pointer-events-none absolute opacity-0 transition-opacity before:absolute before:left-1/2 before:h-full before:w-[2px] before:bg-white group-hover:opacity-100" className="relative h-full w-full cursor-crosshair bg-cover bg-no-repeat"
onMouseMove={handleMouseMove}
>
<img
src={originalImage}
alt="Original"
className="h-full w-full object-contain"
/>
<div
className="pointer-events-none absolute hidden h-12 w-12 border-2 border-white group-hover:block"
style={{
left: `${hoverPosition.x}%`,
top: `${hoverPosition.y}%`,
transform: "translate(-50%, -50%)",
}}
/>
</div>
{/* Enlarged views for original and upscaled images */}
<div
className="pointer-events-none absolute hidden gap-4 group-hover:flex "
style={{ style={{
left: `${lensPosition.x}px`, left: `${hoverPosition.x}%`,
top: `${lensPosition.y}px`, top: `${hoverPosition.y}%`, // Position below the cursor
width: lensSize * 2, transform: "translate(-50%, 0)",
height: lensSize,
border: "2px solid white",
boxShadow: "0 0 0 9999px rgba(0, 0, 0, 0.5)",
}} }}
> >
<div className="flex h-full w-full"> <div
<LensImage className="relative h-48 w-48 border border-gray-300 bg-cover bg-no-repeat"
src={"file:///" + sanitizedImagePath} style={{
alt="Original" backgroundImage: `url(${originalImage})`,
lensPosition={lensPosition} backgroundPosition: `${hoverPosition.x}% ${hoverPosition.y}%`,
zoomAmount={parseInt(zoomAmount)} backgroundSize: `${100 * zoomLevel}%`, // Increase zoom level to match the white box
/> }}
<LensImage >
src={"file:///" + sanitizedUpscaledImagePath} <span className="absolute bottom-1 left-1 rounded bg-black bg-opacity-60 px-2 py-1 text-sm text-white">
alt="Upscaled" Original
lensPosition={lensPosition} </span>
zoomAmount={parseInt(zoomAmount)}
/>
</div> </div>
<div className="absolute bottom-0 left-0 flex w-full items-center justify-around bg-black bg-opacity-50 p-1 px-2 text-center text-xs text-white backdrop-blur-sm"> <div
<span>Original</span> className="relative h-48 w-48 border border-gray-300 bg-cover bg-no-repeat"
<span>Upscayl</span> style={{
backgroundImage: `url(${upscaledImage})`,
backgroundPosition: `${hoverPosition.x}% ${hoverPosition.y}%`,
backgroundSize: `${100 * zoomLevel}%`, // Increase zoom level to match the white box
}}
>
<span className="absolute bottom-1 left-1 rounded bg-black bg-opacity-60 px-2 py-1 text-sm text-white">
AI Upscaled
</span>
</div> </div>
</div> </div>
</div> </div>

View File

@ -28,10 +28,10 @@ import {
import { useToast } from "@/components/ui/use-toast"; import { useToast } from "@/components/ui/use-toast";
import UpscaylSteps from "./upscayl-tab/upscayl-steps"; import UpscaylSteps from "./upscayl-tab/upscayl-steps";
import SettingsTab from "./settings-tab"; import SettingsTab from "./settings-tab";
import Footer from "../Footer"; import Footer from "../footer";
import { NewsModal } from "../news-modal"; import { NewsModal } from "../news-modal";
import Tabs from "../Tabs"; import Tabs from "../tabs";
import Header from "../Header"; import Header from "../header";
import { ChevronLeftIcon } from "lucide-react"; import { ChevronLeftIcon } from "lucide-react";
import { logAtom } from "@/atoms/log-atom"; import { logAtom } from "@/atoms/log-atom";
import { ELECTRON_COMMANDS } from "@common/electron-commands"; import { ELECTRON_COMMANDS } from "@common/electron-commands";
@ -90,15 +90,6 @@ const Sidebar = ({
const tileSize = useAtomValue(tileSizeAtom); const tileSize = useAtomValue(tileSizeAtom);
const [showSidebar, setShowSidebar] = useAtom(showSidebarAtom); const [showSidebar, setShowSidebar] = useAtom(showSidebarAtom);
const handleModelChange = (e: any) => {
setSelectedModelId(e.value);
logit("🔀 Model changed: ", e.value);
localStorage.setItem(
"model",
JSON.stringify({ label: e.label, value: e.value }),
);
};
const upscaylHandler = async () => { const upscaylHandler = async () => {
logit("🔄 Resetting Upscaled Image Path"); logit("🔄 Resetting Upscaled Image Path");
setUpscaledImagePath(""); setUpscaledImagePath("");

View File

@ -18,11 +18,15 @@ import { customModelIdsAtom } from "@/atoms/models-list-atom";
export default function SelectModel() { export default function SelectModel() {
const [selectedModelId, setSelectedModelId] = useAtom(selectedModelIdAtom); const [selectedModelId, setSelectedModelId] = useAtom(selectedModelIdAtom);
console.log("🚀 => selectedModelId:", selectedModelId);
const customModelIds = useAtomValue(customModelIdsAtom); const customModelIds = useAtomValue(customModelIdsAtom);
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
const [zoomedModel, setZoomedModel] = useState<ModelId | null>(null); const [zoomedModel, setZoomedModel] = useState<ModelId | null>(null);
const handleModelSelect = (model: ModelId | string) => { const handleModelSelect = (model: ModelId | string) => {
console.log("🚀 => model:", model);
setSelectedModelId(model); setSelectedModelId(model);
setOpen(false); setOpen(false);
}; };

View File

@ -176,7 +176,7 @@ function UpscaylSteps({
<p <p
className="cursor-pointer text-sm" className="cursor-pointer text-sm"
onClick={(e) => { onClick={(e) => {
setDoubleUpscayl(!doubleUpscayl); setDoubleUpscayl((prev) => !prev);
}} }}
> >
{t("APP.DOUBLE_UPSCAYL.TITLE")} {t("APP.DOUBLE_UPSCAYL.TITLE")}

View File

@ -284,7 +284,10 @@ const Home = () => {
} }
return ( return (
<div className="flex h-screen w-screen flex-row overflow-hidden bg-base-300"> <div
className="flex h-screen w-screen flex-row overflow-hidden bg-base-300"
onPaste={(e) => console.log(e)}
>
<Sidebar <Sidebar
imagePath={imagePath} imagePath={imagePath}
dimensions={dimensions} dimensions={dimensions}

View File

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 98 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 718 KiB

After

Width:  |  Height:  |  Size: 718 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 718 KiB

After

Width:  |  Height:  |  Size: 718 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 718 KiB

After

Width:  |  Height:  |  Size: 718 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 718 KiB

After

Width:  |  Height:  |  Size: 718 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 718 KiB

After

Width:  |  Height:  |  Size: 718 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB