Browse Source

Clean document structure

pull/684/head
Hironsan 5 years ago
parent
commit
e386bfec25
41 changed files with 50 additions and 106 deletions
  1. 28
      README.md
  2. 35
      docs/advanced/aws_https_settings.md
  3. 7
      docs/advanced/oauth2_settings.md
  4. BIN
      docs/annotation.png
  5. BIN
      docs/create_project.png
  6. BIN
      docs/demo.png
  7. BIN
      docs/export_data.png
  8. 44
      docs/faq.md
  9. 4
      docs/getting-started.md
  10. 0
      docs/images/demo/demo.gif
  11. 0
      docs/images/demo/demo_ner.png
  12. 0
      docs/images/demo/demo_sa.png
  13. 0
      docs/images/demo/demo_translation.png
  14. 0
      docs/images/demo/demo_tts.png
  15. 0
      docs/images/demo/named_entity_annotation.gif
  16. 0
      docs/images/demo/text_classification.gif
  17. 0
      docs/images/demo/translation.gif
  18. BIN
      docs/images/faq/add_user.png
  19. 0
      docs/images/logo/doccano.png
  20. 0
      docs/images/logo/icon.png
  21. BIN
      docs/images/oauth/login_page.png
  22. BIN
      docs/images/oauth/oauth_apps.png
  23. 0
      docs/images/tutorial/annotation.png
  24. 0
      docs/images/tutorial/create_project.png
  25. 0
      docs/images/tutorial/define_labels.png
  26. 0
      docs/images/tutorial/export_dataset.png
  27. 0
      docs/images/tutorial/import_dataset.png
  28. 0
      docs/images/tutorial/signin.png
  29. 7
      docs/index.md
  30. BIN
      docs/label_editor.png
  31. BIN
      docs/login_form.png
  32. BIN
      docs/named_entity_recognition.png
  33. BIN
      docs/placeholder.png
  34. 1
      docs/project_structure.md
  35. BIN
      docs/projects.png
  36. 6
      docs/roadmap.md
  37. BIN
      docs/sentiment_analysis.png
  38. BIN
      docs/translation.png
  39. 24
      docs/tutorial.md
  40. BIN
      docs/upload.png
  41. BIN
      docs/user_page.png

28
README.md

@ -1,5 +1,5 @@
<div align="center">
<img src="./docs/doccano.png">
<img src="./docs/images/logo/doccano.png">
</div>
# doccano
@ -13,24 +13,23 @@ doccano is an open source text annotation tool for humans. It provides annotatio
You can try the [annotation demo](http://doccano.herokuapp.com).
![Named Entity Recognition](./docs/demo.gif)
![Demo image](./docs/images/demo/demo.gif)
## Features
- Collaborative annotation
- Multi-language support
- Mobile support
- Emoji :smile: support
- Dark theme
- RESTful API
- Collaborative annotation
- Multi-language support
- Mobile support
- Emoji :smile: support
- Dark theme
- RESTful API
## Usage
Two options to run doccano:
- (Recommended) Docker Compose
- Docker
- (Recommended) Docker Compose
- Docker
### Docker Compose
@ -42,13 +41,14 @@ $ docker-compose -f docker-compose.prod.yml up
Go to <http://0.0.0.0/>.
_Note the superuser account credentials located in the `docker-compose.prod.yml` file:_
Note the superuser account credentials located in the `docker-compose.prod.yml` file:
```yml
ADMIN_USERNAME: "admin"
ADMIN_PASSWORD: "password"
```
> Note: If you want to add annotators, see [Frequently Asked Questions](https://github.com/doccano/doccano/wiki/Frequently-Asked-Questions#i-want-to-add-annotators)
> Note: If you want to add annotators, see [Frequently Asked Questions](./docs/faq.md)
_Note for Windows developers: Be sure to configure git to correctly handle line endings or you may encounter `status code 127` errors while running the services in future steps. Running with the git config options below will ensure your git directory correctly handles line endings._
@ -112,7 +112,7 @@ Here are some tips might be helpful. [How to Contribute to Doccano Project](http
## Citation
```
```tex
@misc{doccano,
title={{doccano}: Text Annotation Tool for Human},
url={https://github.com/doccano/doccano},

35
docs/advanced/aws_https_settings.md

@ -1,27 +1,22 @@
# HTTPS settings for doccano in AWS
1. Create hosted zone in Route 53
2. Create certificate in ACM
3. Create EC2 instance
4. Create ELB
5. Create A record in Route 53
## Create hosted zone in Route 53
# Create hosted zone in Route 53
HTTPS need a domain name. If you don't have one, you can register it by the AWS Route 53 service, or you can get one from other domain seller.
HTTPS need a domain name. If you don't have one, you can register it by the AWS Route 53 service, or you can get one from other domain seller.
After you get a domain name, you can create Hosted Zone by Route 53.
If you register domain from Route 53, you can find it in the `Hosted Zone`.
If you register domain from Route 53, you can find it in the `Hosted Zone`.
![2B0FF02C-42DA-41D1-BFA1-31018BE006ED](https://camo.githubusercontent.com/998dab1eca0e9673ab98d92b65b199cb4e2f96ea/68747470733a2f2f7773332e73696e61696d672e636e2f6c617267652f303036744b665463677931673132397a346c3733726a333131783065673078332e6a7067)
# Create certificate in ACM
## Create certificate in ACM
![22F3520E-909A-4215-B73A-DBB452E3D4E2](https://camo.githubusercontent.com/e3e0a24d2265728072d9e65220a41d2ddd6b42bb/68747470733a2f2f7773322e73696e61696d672e636e2f6c617267652f303036744b6654636779316731326132653362306a6a3331666c3062683433312e6a7067)
@ -29,39 +24,29 @@ You should replace the domain name by yours.
![image-20190314145326046](https://camo.githubusercontent.com/faf83a9ee1774d92a01de9f69e48ed002c7a827e/68747470733a2f2f7773312e73696e61696d672e636e2f6c617267652f303036744b66546367793167313261336a356d33756a333166393066613077342e6a7067)
![image-20190314145344449](https://camo.githubusercontent.com/874362144a3547629383ad93e1f13831e35d0b82/68747470733a2f2f7773312e73696e61696d672e636e2f6c617267652f303036744b665463677931673132613375736232626a33306b6b3039626a73762e6a7067)
![4FC120A2-6DB5-4F03-A209-12C22EDD6097](https://camo.githubusercontent.com/b75bc07e8d96b796872c697de951ab44d74d04d3/68747470733a2f2f7773342e73696e61696d672e636e2f6c617267652f303036744b665463677931673132613873643730786a3331667630686637646d2e6a7067)
Don't forget to Create record in Route 53 in step 4.
Don't forget to Create record in Route 53 in step 4.
After you request a certificate, wait for a while, You should see the status become 'Issued'.
![3AAE20BC-FC34-4738-AED0-D7D67929F6FF](https://camo.githubusercontent.com/82528820652678c19ee46ff5a0f07dbfaba31f5e/68747470733a2f2f7773322e73696e61696d672e636e2f6c617267652f303036744b66546367793167313261356a776270726a333136743066387139622e6a7067)
# Create EC2 instance
## Create EC2 instance
In this part, you can just click the launch button to create a EC2 instance.
[![AWS CloudFormation Launch Stack SVG Button](https://cdn.rawgit.com/buildkite/cloudformation-launch-stack-button-svg/master/launch-stack.svg)](https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/create/review?templateURL=https://s3-external-1.amazonaws.com/cf-templates-10vry9l3mp71r-us-east-1/20190732wl-new.templatexloywxxyimi&stackName=doccano)
# Create ELB
## Create ELB
![image-20190314150439785](https://camo.githubusercontent.com/158c2fb2957546ed8bb82694497b60b9c7f38aa5/68747470733a2f2f7773332e73696e61696d672e636e2f6c617267652f303036744b6654636779316731326166376a676a746a3330663230337a3734742e6a7067)
Click the `Create Load Balancer` button and select `Application Load Balancer`.
Fill the name, change protocol to HTTPS, and do not forget add at least two availability zones. Make sure the zone that EC2 instance created is included.
Fill the name, change protocol to HTTPS, and do not forget add at least two availability zones. Make sure the zone that EC2 instance created is included.
![02BE83A7-4C43-48BE-BCF0-95D2DF7C603D](https://camo.githubusercontent.com/c4cc530aea78e66ea99eab905804cae66ab20a04/68747470733a2f2f7773342e73696e61696d672e636e2f6c617267652f303036744b665463677931673132616861756566736a3330796e306d6e6774732e6a7067)
@ -77,8 +62,6 @@ Or you can create a new one
![image-20190314151253917](https://camo.githubusercontent.com/e620c6738ff95f3311edf708b80a949f8b79f565/68747470733a2f2f7773312e73696e61696d672e636e2f6c617267652f303036744b665463677931673132616e736d3931706a333163313062646469652e6a7067)
Fill the target group name and leave others defualt.
![image-20190314151314109](https://camo.githubusercontent.com/f22b99c57ca9b8114683f1501942dcc3cc0874f1/68747470733a2f2f7773322e73696e61696d672e636e2f6c617267652f303036744b665463677931673132616f34797661746a3330716630666a74616d2e6a7067)
@ -89,7 +72,7 @@ Add the instance to registered.
Then review and create.
# Create A record in Route 53
## Create A record in Route 53
Back to route 53, and click `Create Record Set`. Fill the subname and the ELB name in the `Alias Target`.

7
docs/advanced/oauth2_settings.md

@ -1,5 +1,6 @@
This document aims to instruct how to setup OAuth for doccano. doccano now supports social login via GitHub and Active Directory by [#75](https://github.com/doccano/doccano/pull/75). In this document, we show GitHub OAuth as an example.
# How to use OAuth
This document aims to instruct how to setup OAuth for doccano. doccano now supports social login via GitHub and Active Directory by [#75](https://github.com/doccano/doccano/pull/75). In this document, we show GitHub OAuth as an example.
## Create OAuth App
@ -15,7 +16,7 @@ This document aims to instruct how to setup OAuth for doccano. doccano now suppo
## Set enviromental variables
Once the application is registered, your app's `Client ID` and `Client Secret` will be displayed on the following page:
![image](https://user-images.githubusercontent.com/6737785/51811605-1073d480-22f1-11e9-8be0-726a8ee5e832.png)
![image](../images/oauth/oauth_apps.png)
1. Copy the `Client ID` and `Client Secret` from the Developer Applications of your app on GitHub.
2. Set the `Client ID` and `Client Secret` to enviromental variables:
@ -33,4 +34,4 @@ python manage.py runserver
Go to login page:
![image](https://user-images.githubusercontent.com/6737785/51812454-e7edd980-22f4-11e9-80c6-2f18fbc49108.png)
![image](../images/oauth/login_page.png)

BIN
docs/annotation.png

Before After
Width: 2876  |  Height: 1368  |  Size: 431 KiB

BIN
docs/create_project.png

Before After
Width: 631  |  Height: 493  |  Size: 34 KiB

BIN
docs/demo.png

Before After
Width: 2432  |  Height: 1182  |  Size: 364 KiB

BIN
docs/export_data.png

Before After
Width: 2878  |  Height: 964  |  Size: 166 KiB

44
docs/faq.md

@ -1,40 +1,6 @@
## I can't install doccano.
# FAQ
Following list is ordered by from easy to hard. If you are not familiar with Python development, please consider easy setup.
1. [One click deployment to Cloud Service.](https://github.com/doccano/doccano#deployment)
* Only you have to do is create an account. Especially [Heroku](https://www.heroku.com/home) does not require your credit card (if free plan).
* [![Deploy to Azure](https://azuredeploy.net/deploybutton.svg)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fdoccano%2Fdoccano%2Fmaster%2Fazuredeploy.json)
* [![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy)
* [![AWS CloudFormation Launch Stack SVG Button](https://cdn.rawgit.com/buildkite/cloudformation-launch-stack-button-svg/master/launch-stack.svg)](https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/create/review?templateURL=https://s3-external-1.amazonaws.com/cf-templates-10vry9l3mp71r-us-east-1/20190732wl-new.templatexloywxxyimi&stackName=doccano)
* > Notice: (1) EC2 KeyPair cannot be created automatically, so make sure you have an existing EC2 KeyPair in one region. Or [create one yourself](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#having-ec2-create-your-key-pair). (2) If you want to access doccano via HTTPS in AWS, here is an [instruction](https://github.com/doccano/doccano/wiki/HTTPS-setting-for-doccano-in-AWS).
2. [Use Docker](https://docs.docker.com/install/)
* Docker doesn't bother you by the OS, Python version, etc problems. Because an environment for application is packed as a container.
* Get doccano's image: `docker pull doccano/doccano`
* Create & Run doccano container: `docker run -d --name doccano -p 8000:80 doccano/doccano`
* Create a user: `docker exec doccano tools/create-admin.sh "admin" "admin@example.com" "password"`
* Stop doccano container: `docker stop doccano`
* Re-Launch doccano container: `docker start doccano`
3. Install from source
* **I want to remember you that this is the hardest setup way. You have to install Python/Node.js and type many commands.**
* [Install Python](https://www.python.org/downloads/)
* [Install Node.js](https://nodejs.org/en/download/)
* Get the source code of doccano: `git clone https://github.com/doccano/doccano.git`
* Move to doccano directory: `cd doccano`
* Create environment for doccano: `virtualenv venv`
* Activate environment: `source venv/bin/activate`
* Install required packages: `pip install -r requirements.txt`
* Move server directory: `cd app/server`
* Build frontend library: `npm install`
* Build frontend source code: `npm run build`
* Back to server directory: `cd ../`
* Initialize doccano: `python manage.py migrate`
* Create user: `python manage.py createsuperuser`
* Run doccano: `python manage.py runserver`
* Stop doccano: Ctrl+C
* Re-Launch doccano: `python manage.py runserver` (Confirm you are at `app/server` directory and environment is active).
## I can't upload my data.
## I can't upload my data
Please check the following list.
@ -50,6 +16,8 @@ Please check the following list.
**You don't need your real & all data to validate file format. The picked data & masked data is suitable if your data is large or secret.**
## I want to add annotators.
## I want to add annotators
* You can create other annotators by [Django Admin site](https://djangobook.com/django-admin-site/).
1. Add a user from [Django Admin site](https://djangobook.com/django-admin-site/).
![Add a user](./images/faq/add_user.png)
2. Add the user to the project in the member page(`/projects/{project_id}/members`).

4
docs/getting-started.md

@ -4,8 +4,8 @@
Two options to run doccano:
- (Recommended) Docker Compose
- Docker
- (Recommended) Docker Compose
- Docker
### Docker Compose

docs/demo.gif → docs/images/demo/demo.gif

docs/demo_ner.png → docs/images/demo/demo_ner.png

docs/demo_sa.png → docs/images/demo/demo_sa.png

docs/demo_translation.png → docs/images/demo/demo_translation.png

docs/demo_tts.png → docs/images/demo/demo_tts.png

docs/named_entity_annotation.gif → docs/images/demo/named_entity_annotation.gif

docs/text_classification.gif → docs/images/demo/text_classification.gif

docs/translation.gif → docs/images/demo/translation.gif

BIN
docs/images/faq/add_user.png

Before After
Width: 1223  |  Height: 224  |  Size: 13 KiB

docs/doccano.png → docs/images/logo/doccano.png

docs/icon.png → docs/images/logo/icon.png

BIN
docs/images/oauth/login_page.png

Before After
Width: 2550  |  Height: 1342  |  Size: 107 KiB

BIN
docs/images/oauth/oauth_apps.png

Before After
Width: 2008  |  Height: 1080  |  Size: 179 KiB

docs/images/annotation.png → docs/images/tutorial/annotation.png

docs/images/create_project.png → docs/images/tutorial/create_project.png

docs/images/define_labels.png → docs/images/tutorial/define_labels.png

docs/images/export_dataset.png → docs/images/tutorial/export_dataset.png

docs/images/import_dataset.png → docs/images/tutorial/import_dataset.png

docs/images/signin.png → docs/images/tutorial/signin.png

7
docs/index.md

@ -4,7 +4,6 @@
doccano is an open source text annotation tool built for human beings. It provides annotation features for text classification, sequence labeling and sequence to sequence. So, you can create labeled data for sentiment analysis, named entity recognition, text summarization and so on. Just create project, upload your data and start annotating. You can build a dataset in hours.
## Demo
You can enjoy this [annotation demo](http://doccano.herokuapp.com).
@ -13,19 +12,19 @@ You can enjoy this [annotation demo](http://doccano.herokuapp.com).
First demo is one of the sequence labeling tasks, named-entity recognition. You just select text spans and annotate them. Since doccano supports shortcut keys, you can quickly annotate text spans.
![Named Entity Recognition](./named_entity_annotation.gif)
![Named Entity Recognition](./images/demo/named_entity_annotation.gif)
### [Sentiment analysis](https://doccano.herokuapp.com/demo/text-classification/)
Second demo is one of the text classification tasks, topic classification. Since there may be more than one category, you can annotate multi-labels.
![Text Classification](./text_classification.gif)
![Text Classification](./images/demo/text_classification.gif)
### [Machine translation](https://doccano.herokuapp.com/demo/translation/)
Final demo is one of the sequence to sequence tasks, machine translation. Since there may be more than one responses in sequence to sequence tasks, you can create multiple responses.
![Machine Translation](./translation.gif)
![Machine Translation](./images/demo/translation.gif)
## Quick Deployment

BIN
docs/label_editor.png

Before After
Width: 2866  |  Height: 1462  |  Size: 211 KiB

BIN
docs/login_form.png

Before After
Width: 698  |  Height: 560  |  Size: 32 KiB

BIN
docs/named_entity_recognition.png

Before After
Width: 2560  |  Height: 1398  |  Size: 415 KiB

BIN
docs/placeholder.png

Before After
Width: 500  |  Height: 300  |  Size: 1.2 KiB

1
docs/project_structure.md

@ -41,7 +41,6 @@ The directory structure of the frontend follows Nuxt.js one. See the Nuxt.js doc
- [Nuxt.js/Directory Structure](https://nuxtjs.org/guide/directory-structure/)
## Backend API
The directory structure of the backend api follows Django one. The important directories are as follows:

BIN
docs/projects.png

Before After
Width: 2050  |  Height: 1012  |  Size: 1.3 MiB

6
docs/roadmap.md

@ -38,7 +38,6 @@ This is a list of features on the short term roadmap and beyond:
* Implement RBAC and enable to assign a role to a user by project administrators.
* Enhance annotation statistics.
### Annotation
* Increase the number of annotation tasks such as relation extraction, entity linking, aspect-based sentiment analysis, visual question answering and so on.
@ -48,7 +47,6 @@ This is a list of features on the short term roadmap and beyond:
* Control sort order on the frontend.
* More documentation and tutorials.
### Upload and download
* Enable to import data from cloud storage like s3.
@ -63,8 +61,7 @@ This is a list of features on the short term roadmap and beyond:
* Enable to customize font and font-family.
* Enable to customize label color per user.
* Enable to customize site theme per user.
### Entire project
* Design Vue component and use it to implement frontend.
@ -82,4 +79,3 @@ This is a list of features on the short term roadmap and beyond:
* Gather and highlight novel doccano use cases.
Track the progress of these features in the GitHub project tracker.

BIN
docs/sentiment_analysis.png

Before After
Width: 2560  |  Height: 1404  |  Size: 380 KiB

BIN
docs/translation.png

Before After
Width: 2560  |  Height: 1402  |  Size: 266 KiB

24
docs/tutorial.md

@ -1,12 +1,10 @@
# Tutorial
## Dataset
Here we take an NER annotation task for science fictions to give you a brief tutorial on doccano.
## Dataset
Below is a JSON file containing lots of science fictions description with different languages. We need to annotate some entities like people name, book title, date and so on.
Here we take an NER annotation task for science fictions to give you a brief tutorial on doccano. Below is a JSON file named `books.json` containing lots of science fictions description with different languages. We need to annotate some entities like people name, book title, date and so on.
`books.json`
```JSON
```json
{"text": "The Hitchhiker's Guide to the Galaxy (sometimes referred to as HG2G, HHGTTGor H2G2) is a comedy science fiction series created by Douglas Adams. Originally a radio comedy broadcast on BBC Radio 4 in 1978, it was later adapted to other formats, including stage shows, novels, comic books, a 1981 TV series, a 1984 video game, and 2005 feature film."}
{"text": "《三体》是中国大陆作家刘慈欣于2006年5月至12月在《科幻世界》杂志上连载的一部长篇科幻小说,出版后成为中国大陆最畅销的科幻长篇小说之一。2008年,该书的单行本由重庆出版社出版。本书是三体系列(系列原名为:地球往事三部曲)的第一部,该系列的第二部《三体II:黑暗森林》已经于2008年5月出版。2010年11月,第三部《三体III:死神永生》出版发行。 2011年,“地球往事三部曲”在台湾陆续出版。小说的英文版获得美国科幻奇幻作家协会2014年度“星云奖”提名,并荣获2015年雨果奖最佳小说奖。"}
{"text": "『銀河英雄伝説』(ぎんがえいゆうでんせつ)は、田中芳樹によるSF小説。また、これを原作とするアニメ、漫画、コンピュータゲーム、朗読、オーディオブック等の関連作品。略称は『銀英伝』(ぎんえいでん)。原作は累計発行部数が1500万部を超えるベストセラー小説である。1982年から2009年6月までに複数の版で刊行され、発行部数を伸ばし続けている。"}
@ -16,18 +14,17 @@ Below is a JSON file containing lots of science fictions description with differ
We need to create a new project for this task. Logging in with the superuser account.
![Sign in as a superuser.](./images/signin.png)
![Sign in as a superuser.](./images/tutorial/signin.png)
To create your project, make sure you’re in the project list page and click `Create` button. As for this tutorial, we name the project as `sequence labeling for books`, write some description, choose the sequence labeling task type.
![Creating a project.](./images/create_project.png)
![Creating a project.](./images/tutorial/create_project.png)
## Import Data
After creating a project, we will see the `Dataset` page, and click `Import dataset` button in the `Actions` menu. We should see the following screen:
![Importing a dataset.](./images/import_dataset.png)
![Importing a dataset.](./images/tutorial/import_dataset.png)
We choose `JSON` and click `Select a file` button. Select `books.json` and it would be loaded automatically.
@ -35,7 +32,7 @@ We choose `JSON` and click `Select a file` button. Select `books.json` and it wo
Click `Labels` button in left bar to define our own labels. We should see the label editor page. In label editor page, you can create labels by specifying label text, shortcut key, background color and text color.
![Defining labels.](./images/define_labels.png)
![Defining labels.](./images/tutorial/define_labels.png)
As for the tutorial, we created some entities related to science fictions.
@ -43,18 +40,19 @@ As for the tutorial, we created some entities related to science fictions.
Next, we are ready to annotate the texts. Just click the `Start annotation` button in the navigation bar, we can start to annotate the documents.
![Annotating named entities.](./images/annotation.png)
![Annotating named entities.](./images/tutorial/annotation.png)
## Export Data
After the annotation step, we can download the annotated data. Go to the `Dataset` page and click the `Export dataset` button in the `Action` menu. After selecting an export format, click `Export`. You should see below screen:
![Exporting a dataset.](./images/export_dataset.png)
![Exporting a dataset.](./images/tutorial/export_dataset.png)
Here we choose JSONL file to download the data by clicking the button. Below is the annotated result for our tutorial project.
`sequence_labeling_for_books.json`
```JSON
```json
{"doc_id": 33,
"text": "The Hitchhiker's Guide to the Galaxy (sometimes referred to as HG2G, HHGTTGor H2G2) is a comedy science fiction series created by Douglas Adams. Originally a radio comedy broadcast on BBC Radio 4 in 1978, it was later adapted to other formats, including stage shows, novels, comic books, a 1981 TV series, a 1984 video game, and 2005 feature film.",
"labels": [[0, 36, "Title"], [63, 67, "Title"], [69, 75, "Title"], [78, 82, "Title"], [89, 111, "Genre"], [130, 143, "Person"], [158, 180, "Genre"], [184, 193, "Other"], [199, 203, "Date"], [254, 265, "Genre"], [267, 273, "Genre"], [275, 286, "Genre"], [290, 294, "Date"], [295, 304, "Genre"], [308, 312, "Date"], [313, 323, "Genre"], [329, 333, "Date"], [334, 346, "Genre"]],

BIN
docs/upload.png

Before After
Width: 2876  |  Height: 1034  |  Size: 194 KiB

BIN
docs/user_page.png

Before After
Width: 2566  |  Height: 1032  |  Size: 167 KiB
Loading…
Cancel
Save