Merge with upstream/main
2
.github/ISSUE_TEMPLATE/doc_issue.yml
vendored
@ -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
|
||||||
|
@ -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",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -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.
|
||||||
|
14
docs/Home.md
@ -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)
|
|
@ -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.
|
|
@ -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).
|
|
3
docs/api/get-task-status.mdx
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
openapi: post /get-task-status
|
||||||
|
---
|
3
docs/api/get-upload-url.mdx
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
openapi: post /get-upload-url
|
||||||
|
---
|
3
docs/api/get-upscayl-history.mdx
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
openapi: post /get-upscayl-history
|
||||||
|
---
|
3
docs/complete-a-multipart-upload.mdx
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
openapi: post /complete-multipart-upload
|
||||||
|
---
|
@ -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)
|
|
Before Width: | Height: | Size: 157 KiB |
@ -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 |
@ -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
After Width: | Height: | Size: 118 KiB |
@ -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>
|
||||||
|
|
||||||
|
@ -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
@ -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"
|
@ -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>
|
|
3
docs/start-a-new-task.mdx
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
openapi: post /start-task
|
||||||
|
---
|
17
docs/troubleshooting/general-fixes.mdx
Normal 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>
|
||||||
|
|
6
docs/troubleshooting/linux.mdx
Normal 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.
|
14
docs/troubleshooting/logs.mdx
Normal 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.
|
24
docs/troubleshooting/mac.mdx
Normal 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/``
|
13
docs/troubleshooting/windows.mdx
Normal 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.
|
@ -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",
|
||||||
|
@ -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>
|
||||||
|
@ -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("");
|
||||||
|
@ -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);
|
||||||
};
|
};
|
||||||
|
@ -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")}
|
||||||
|
@ -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}
|
||||||
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 718 KiB After Width: | Height: | Size: 718 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 718 KiB After Width: | Height: | Size: 718 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 718 KiB After Width: | Height: | Size: 718 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 718 KiB After Width: | Height: | Size: 718 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 718 KiB After Width: | Height: | Size: 718 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |