diff --git a/MANIFEST.in b/MANIFEST.in
index b3852007925f..b9345c685761 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,5 +1,6 @@
include label_studio/examples/*/*.xml
recursive-include label_studio/static *
+include label_studio/templates/includes/*.html
include label_studio/templates/*.html
include label_studio/utils/schema/*.json
include label_studio/logger.json
diff --git a/README.md b/README.md
index 53fc6377f51a..13a8d0840013 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
-> **NEW** Release 0.6.0: Nested & Per-Region Labeling, Filtering & Cueing the active labels, read the [release notes](https://labelstud.io/blog/release-060-nested-data-labeling.html).
+> **NEW** Release 0.7.0 - Cloud Storage Enablement: read the [release notes](https://labelstud.io/blog/release-070-cloud-storage-enablement.html).
**Label Studio is a swiss army knife of data labeling and annotation tools :v:**
@@ -203,13 +203,14 @@ Label Studio for Teams is our enterprise edition (cloud & on-prem), that include
```tex
@misc{Label Studio,
- title={{Label Studio}: A Swiss Army Knife of Data Labeling and Annotation Tools},
+ title={{Label Studio}: Data labeling software},
url={https://github.com/heartexlabs/label-studio},
note={Open source software available from https://github.com/heartexlabs/label-studio},
author={
Maxim Tkachenko and
Mikhail Malyuk and
Nikita Shevchenko and
+ Andrey Holmanyuk
Nikolai Liubimov},
year={2020},
}
diff --git a/docs/source/blog/index.html b/docs/source/blog/index.html
index b7e4ce506fa6..b95010e8da2f 100644
--- a/docs/source/blog/index.html
+++ b/docs/source/blog/index.html
@@ -131,16 +131,16 @@
-
+
@@ -157,6 +157,20 @@
+
+
+
+
diff --git a/docs/source/blog/release-070-cloud-storage-enablement.md b/docs/source/blog/release-070-cloud-storage-enablement.md
new file mode 100644
index 000000000000..f0b6226800b6
--- /dev/null
+++ b/docs/source/blog/release-070-cloud-storage-enablement.md
@@ -0,0 +1,56 @@
+---
+title: Label Studio Release Notes 0.7.0 - Cloud Storage Enablement
+type: blog
+order: 100
+---
+
+Just a couple of weeks after our 0.6.0 release, we’re happy to announce a new big release. We’ve started the discussion about the cloud months ago, and as the first step in simplifying the integration, we’re happy to introduce cloud storage connectors, like AWS S3.
+
+We’re also very interested to learn more from you about your ML pipelines, if you’re interested in having a conversation, please ping us on [Slack](https://join.slack.com/t/label-studio/shared_invite/zt-cr8b7ygm-6L45z7biEBw4HXa5A2b5pw).
+
+
+
+
+## Connecting cloud storage
+
+You can configure label studio to synchronize labeling tasks with your s3 or gcp bucket, potentially filtering by a specific prefix or a file extension. Label Studio will take that list and generate pre-signed URLs each time the task is shown to the annotator.
+
+
+
+
+There are several ways how label studio can load the file, either as a URL or as a blob therefore, you can store the list of tasks or the assets themselves and load that.
+
+
+
+
+You can configure it to store the results back to s3/gcp, making Label Studio a part of your data processing pipeline. Read more about the configuration in the docs [here](/guide/storage.html).
+
+## Frontend package updates
+
+Finally with a lot of [work](https://github.com/heartexlabs/label-studio-frontend/pull/75) from [Andrew](https://github.com/hlomzik) there is an implementation of frontend testing. This will make sure that we don’t break things when we introduce new features. Along with that another Important part — improved building and publishing process, configured CI. Now the npm frontend package will be published along with the pip package.
+
+## Labeling Paragraphs and Dialogues
+
+Introducing a new object tag called “Paragraphs”. A paragraph is a piece of text with potentially additional metadata like the author and the timestamp. With this tag we’re also experimenting now with an idea of providing predefined layouts. For example to label the dialogue you can use the following config: ``
+
+
+
+
+This feature is available in the [enterprise version](https://heartex.ai/) only
+
+## Different shapes on the same image
+
+One limitation label studio had was the ability to use only one shape on the same image, for example, you were able to put either bounding boxes or polygons. Now this limitation is waived and you can define different label groups and connect those to the same image.
+
+
+
+
+## maxUsages
+
+There are a couple of ways how you can make sure that the annotation is being performed in full. One of these concepts is a `required` flag, and we’ve created a new one called `maxUsages`. For some datasets you know how much objects of a particular type there is, therefore you can limit the usage of specific labels.
+
+## Bugfixes and Enhancements
+- Allow different types of shapes to be used in the same image. For example you can label the same image using both rectangles and ellipses.
+- Fixing double text deserialization https://github.com/heartexlabs/label-studio-frontend/pull/85
+- Fix bug with groups of required choices https://github.com/heartexlabs/label-studio-frontend/pull/74
+- Several fixes for NER labeling — empty captured text, double clicks, labels appearance
diff --git a/docs/source/guide/storage.md b/docs/source/guide/storage.md
new file mode 100644
index 000000000000..f2e3032eb569
--- /dev/null
+++ b/docs/source/guide/storage.md
@@ -0,0 +1,125 @@
+---
+title: Cloud storages
+type: guide
+order: 101
+---
+
+You can integrate the popular cloud storage with Label Studio, collect new tasks uploaded to your buckets, and sync back annotation results to use them in your machine learning pipelines.
+
+Cloud storage type and bucket need to be configured during the start of the server, and further configured during the runtime via UI.
+
+You can configure one or both:
+
+- _source storage_ (where tasks are stored)
+- _target storage_ (where completions are stored)
+
+The connection to both storages is synced, so you can see new tasks after uploading them to the bucket without restarting Label Studio.
+
+The parameters like prefix or matching filename regex could be changed any time from the webapp interface.
+
+## Amazon S3
+
+To connect your [S3](https://aws.amazon.com/s3) bucket with Label Studio, be sure you have programmatic access enabled. [Check this link](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration) to learn more how to set up access to your S3 bucket.
+
+### Create connection on startup
+
+The following commands launch Label Studio, configure the connection to your S3 bucket, scan for existing tasks, and load them into the labeling app.
+
+#### Read bucket with JSON-formatted tasks
+
+```bash
+label-studio start --init --source s3 --source-path my-s3-bucket
+```
+
+
+#### Write completions to bucket
+
+```bash
+label-studio start --init --target s3-completions --target-path my-s3-bucket
+```
+
+### Working with Binary Large OBjects (BLOBs)
+
+When you are storing BLOBs in your S3 bucket (like images or audio files), you might want to use then as is, by generating URLs pointing to those objects (e.g. `gs://my-s3-bucket/image.jpg`)
+Label Studio allows you to generate input tasks with corresponding URLs automatically on-the-fly. You can to this either specifying `--source-params` when launching app:
+
+```bash
+label-studio start --init --source s3 --source-path my-s3-bucket --source-params "{\"data_key\": \"my-object-tag-$value\", \"use_blob_urls\": true}"
+```
+
+You can leave `"data_key"` empty (or skip it at all) then LS generates it automatically with the first task key from label config (it's useful when you have only one object tag exposed).
+
+
+### Optional parameters
+
+You can specify additional parameters with the command line escaped JSON string via `--source-params` / `--target-params` or from UI.
+
+#### prefix
+
+Bucket prefix (typically used to specify internal folder/container)
+
+#### regex
+
+A regular expression for filtering bucket objects
+
+#### create_local_copy
+
+If set true, the local copy of the remote storage will be created.
+
+#### use_blob_urls
+
+Generate task data with URLs pointed to your bucket objects(for resources like jpg, mp3, etc). If not selected, bucket objects will be interpreted as tasks in Label Studio JSON format, one object per task.
+
+
+## Google Cloud Storage
+
+To connect your [GCS](https://cloud.google.com/storage) bucket with Label Studio, be sure you have enabled programmatic access. [Check this link](https://cloud.google.com/storage/docs/reference/libraries) to learn more about how to set up access to your GCS bucket.
+
+
+### Create connection on startup
+
+The following commands launch Label Studio, configure the connection to your GCS bucket, scan for existing tasks, and load them into the app for the labeling.
+
+#### Read bucket with JSON-formatted tasks
+
+```bash
+label-studio start --init --source gcs --source-path my-gcs-bucket
+```
+
+#### Write completions to bucket
+
+```bash
+label-studio start --init --target gcs-completions --source-path my-gcs-bucket
+```
+
+### Working with Binary Large OBjects (BLOBs)
+
+When you are storing BLOBs in your GCS bucket (like images or audio files), you might want to use then as is, by generating URLs pointing to those objects (e.g. `gs://my-gcs-bucket/image.jpg`)
+Label Studio allows you to generate input tasks with corresponding URLs automatically on-the-fly. You can to this either specifying `--source-params` when launching app:
+
+```bash
+label-studio start --init --source gcs --source-path my-gcs-bucket --source-params "{\"data_key\": \"my-object-tag-$value\", \"use_blob_urls\": true}"
+```
+
+You can leave `"data_key"` empty (or skip it at all) then LS generates it automatically with the first task key from label config (it's useful when you have only one object tag exposed).
+
+
+### Optional parameters
+
+You can specify additional parameters with the command line escaped JSON string via `--source-params` / `--target-params` or from UI.
+
+#### prefix
+
+Bucket prefix (typically used to specify internal folder/container)
+
+#### regex
+
+A regular expression for filtering bucket objects
+
+#### create_local_copy
+
+If set true, the local copy of the remote storage will be created.
+
+#### use_blob_urls
+
+Generate task data with URLs pointed to your bucket objects(for resources like jpg, mp3, etc). If not selected, bucket objects will be interpreted as tasks in Label Studio JSON format, one object per task.
diff --git a/docs/themes/htx/layout/layout.ejs b/docs/themes/htx/layout/layout.ejs
index cdebd9e4eb70..b0d9de4f2842 100644
--- a/docs/themes/htx/layout/layout.ejs
+++ b/docs/themes/htx/layout/layout.ejs
@@ -45,6 +45,9 @@
<%- css(isIndex ? 'css/index' : 'css/page') %>
<%- css('css/search') %>
+
+
<% if (page.type === "playground") { %>
<%- css('css/codemirror') %>
@@ -56,7 +59,7 @@
-
+
>
@@ -73,5 +76,23 @@
<%- partial('partials/google_analytics') %>
+
diff --git a/docs/themes/htx/layout/partials/header.ejs b/docs/themes/htx/layout/partials/header.ejs
index 5b069904e5e4..9071823726ef 100644
--- a/docs/themes/htx/layout/partials/header.ejs
+++ b/docs/themes/htx/layout/partials/header.ejs
@@ -1,11 +1,16 @@
diff --git a/docs/themes/htx/layout/partials/index.ejs b/docs/themes/htx/layout/partials/index.ejs
index 2ab4f3dfa421..fbdf029a56ed 100644
--- a/docs/themes/htx/layout/partials/index.ejs
+++ b/docs/themes/htx/layout/partials/index.ejs
@@ -1,342 +1,420 @@
-
+<%- partial('partials/header') %>
+