diff --git a/docs/amazon-s3.md b/docs/amazon-s3.md index 8752b75..4ed2f00 100644 --- a/docs/amazon-s3.md +++ b/docs/amazon-s3.md @@ -1,108 +1,117 @@ --- layout: markdown -title: Amazon S3 guide +title: Amazon S3 Guide --- -## How to configure Amazon S3 and use it in ShareX +## How to Configure Amazon S3 and Use It in ShareX -### Get AWS account +### Create an AWS Account -* Sign-in or register for an Amazon Web Services account: [aws.amazon.com](https://aws.amazon.com) +* Sign in or register for an Amazon Web Services account: [aws.amazon.com](https://aws.amazon.com) -### Create policy +### Create a Policy -We are going to create this policy to increase our security by giving only PutObject permission which is used when uploading files. +We'll create a policy that limits permissions to only `PutObject`, which is used for uploading files. -* Open [policies page](https://console.aws.amazon.com/iam/home?#/policies) -* Press `Create policy` -* Click `Service`, type `S3` and then select `S3` -* Click `Actions`, type `PutObject` and then select both `PutObject` and `PutObjectAcl` to give only put object permission -* Click `Resources`, make sure `Specific` is selected and then click the `Add ARN` link -* Select `Any` to give access to all your buckets +* Open the [Policies page](https://console.aws.amazon.com/iam/home?#/policies) +* Click `Create policy` +* Click `Service`, type `S3`, and select `S3` +* Click `Actions`, type `PutObject`, and select both `PutObject` and `PutObjectAcl` to grant only upload-related permissions +* Click `Resources`, ensure `Specific` is selected, then click `Add ARN` +* Choose `Any` to allow access to all your buckets -**Note:** You can uncheck `Any` later if you prefer to use a specific bucket name instead. -* Select `Any` also for object name -* Press `Add` in `Add ARN(s)` dialog -* Press `Review policy` -* Give a name for the policy, for example `ShareX_PutObject` -* Press `Create policy` +**Note:** You can later uncheck `Any` and specify a particular bucket name for tighter security. +* Also select `Any` for object name +* Click `Add` in the ARN dialog +* Click `Review policy` +* Name the policy, for example: `ShareX_PutObject` +* Click `Create policy` -### Create group +### Create a Group -* Open [groups page](https://console.aws.amazon.com/iam/home?#/groups) -* Press `Create New Group` -* Give a name for the group, for example `ShareX` -* Press `Next Step` -* Click `Policy Type` dropdown filter and select `Customer Managed` -* Click the checkbox of your recently created policy which should be named `ShareX_PutObject` if you used that example name -* Press `Next Step` -* Press `Create Group` +* Open the [Groups page](https://console.aws.amazon.com/iam/home?#/groups) +* Click `Create New Group` +* Name the group, for example: `ShareX` +* Click `Next Step` +* Filter policies by selecting `Customer Managed` +* Check the box for your recently created policy (e.g., `ShareX_PutObject`) +* Click `Next Step` +* Click `Create Group` -### Create user +### Create a User -* Open [users page](https://console.aws.amazon.com/iam/home?#/users) -* Press `Add user` -* Type the username you want -* In the access type section, click the check box of `Programmatic access` +* Open the [Users page](https://console.aws.amazon.com/iam/home?#/users) +* Click `Add user` +* Enter a username of your choice +* Under access type, check `Programmatic access` * Click `Next: Permissions` -* Click the checkbox of your recently created group which should be named `ShareX` if you used that example name -* Press `Next: Tags` -* Press `Next: Review` -* Press `Create user` +* Check the box for your recently created group (e.g., `ShareX`) +* Click `Next: Tags` +* Click `Next: Review` +* Click `Create user` -**Important:** In this page, either make a record of `Access key ID` and `Secret access key` somewhere or press `Download .csv` to save them as a file. We need these later in ShareX. -* Press `Close` +**Important:** On the final page, make sure to either copy the `Access key ID` and `Secret access key` or download the `.csv` file. You’ll need these later in ShareX. +* Click `Close` -### [Optional] Secure your account +### [Optional] Secure Your Account -You don't need to do these but it is suggested to keep your account secure. +These steps are optional but recommended to enhance account security. -* Open [Identity and Access Management page (Dashboard)](https://console.aws.amazon.com/iam/home) -* Make sure all security status items are checked as green on this page +* Open the [IAM Dashboard](https://console.aws.amazon.com/iam/home) +* Ensure all security status indicators are green -You may need to activate multi-factor authentication and create a password policy which should be easy. +You may need to enable multi-factor authentication (MFA) and define a password policy. -### Create S3 bucket +### Create an S3 Bucket The bucket is where your uploaded files will be stored. -* Open [S3 Management Console](https://s3.console.aws.amazon.com/s3/home) -* Press `Create bucket` +* Open the [S3 Management Console](https://s3.console.aws.amazon.com/s3/home) +* Click `Create bucket` -**Important:** If you are going to use your own domain with S3 then the bucket name should be the same as your CNAME. For example, if you want to use this URL: `https://i.example.com/image.png` then bucket name should be `i.example.com`. [Click here for more info.](http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingCustomURLs) -* Type the bucket name you want -* Select the region you want the bucket to be hosted in +**Important:** If you plan to use your own domain with S3, the bucket name must match your CNAME. +For example, to use `https://i.example.com/image.png`, the bucket name should be `i.example.com`. +[Learn more here.](http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingCustomURLs) -**Tip:** You can use this website to check ping of regions: [cloudping.info](https://www.cloudping.info) -* If you want your uploaded files to be accessible by URL then make sure `Block all public access` option is unchecked -* Press `Create bucket` +* Enter your desired bucket name +* Select a region to host the bucket -### [Optional] Configure DNS for custom domain +**Tip:** Use [cloudping.info](https://www.cloudping.info) to find the region with the lowest latency. +* To make uploaded files publicly accessible via URL, uncheck the `Block all public access` option +* Click `Create bucket` -If you are going to use your own domain then you must configure DNS. +### [Optional] Configure DNS for a Custom Domain -For example, assume that you are using [Cloudflare](https://www.cloudflare.com/), your bucket name is `i.example.com` and it is stored in `EU (Frankfurt)` region. Your DNS settings will then be: +If you're using your own domain, you’ll need to configure your DNS accordingly. + +Assuming you use [Cloudflare](https://www.cloudflare.com/), and your bucket name is `i.example.com`, stored in the `EU (Frankfurt)` region, your DNS settings should be: * Type: `CNAME` * Name: `i` * Target: `i.example.com.s3.eu-central-1.amazonaws.com` -You can find a list of region endpoints from `ShareX main window -> Destinations -> Destination settings -> Amazon S3 tab -> Endpoints`. +You can find a full list of region endpoints in: +`ShareX main window -> Destinations -> Destination settings -> Amazon S3 tab -> Endpoints` So the target should be `{bucketname}.{endpoint}` -[Check here for more information.](http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingCustomURLs) -### Configure ShareX Amazon S3 settings +[More info here.](http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingCustomURLs) + +### Configure ShareX for Amazon S3 + +* Open ShareX +* Go to `Destinations -> Destination settings` +* Select the `Amazon S3` tab +* Enter the `Access key ID` and `Secret access key` you recorded earlier +* Choose the correct region (must match the one used when creating the bucket) +* Enter the bucket name exactly as you created it +* For the upload path, using `%y/%mo` is recommended — this creates subfolders like `2025/08` +* If using a custom domain, check `Use custom domain` and enter it, e.g., `https://i.example.com` +* Close the destination settings window +* Ensure Amazon S3 is selected as the destination for image, text, and file uploads in the main window + +--- -* From ShareX main window, open `Destinations -> Destination settings` -* Select `Amazon S3` tab -* Use `access key ID` and `secret access key` which you noted down previously -* For the endpoints section select the region that you choose while creating the bucket -* Fill bucket name same as which you created -* For the upload path it is recommended to use `%y/%mo` which creates sub-folders such as `2020/04` -* If you are using your own domain then check `Use custom domain` and fill the text box for example: `https://i.example.com` -* You can now close the destination settings window -* In main window make sure to select Amazon S3 as destination for image uploader, text uploader and file uploader +Now you're ready to use [Amazon S3](https://aws.amazon.com/s3/) with ShareX! -Now you are ready to use [Amazon S3](https://aws.amazon.com/s3/) in ShareX! diff --git a/docs/cloudflare-r2.md b/docs/cloudflare-r2.md index 5bb8cc3..1e44d99 100644 --- a/docs/cloudflare-r2.md +++ b/docs/cloudflare-r2.md @@ -3,49 +3,49 @@ layout: markdown title: Cloudflare R2 guide --- -## How to configure Cloudflare R2 and use it in ShareX +## How to Configure Cloudflare R2 and use it in ShareX -Make an account for [Cloudflare](https://cloudflare.com). +Create an account on [Cloudflare](https://cloudflare.com). -Ensure that your domain is [added](https://developers.cloudflare.com/fundamentals/get-started/setup/add-site/) onto Cloudflare and verified with NS (Name Server) records on your domain registrar. Your domain has to be hosted through Cloudflare otherwise this won't work at all, and you will be unable to use R2 / Cloudflare CDN to host your images. +Ensure your domain is [added](https://developers.cloudflare.com/fundamentals/get-started/setup/add-site/) to Cloudflare and verified using NS (Name Server) records on your domain registrar. Your domain **must** be hosted through Cloudflare; otherwise, this will not work, and you won't be able to use R2 or the Cloudflare CDN to host your images. -While R2 is not free, it does have a generous free tier. The full pricing is available to see [here](https://developers.cloudflare.com/r2/platform/pricing/). +While R2 is not entirely free, it offers a generous free tier. You can view the full pricing details [here](https://developers.cloudflare.com/r2/platform/pricing/). -### To create a bucket: +### Create a Bucket 1. Open [R2](https://dash.cloudflare.com/?to=/:account/r2). -2. Select `Create bucket`. -3. Type in your bucket name of choice, and click `Create Bucket`. -4. Select `Settings`. -5. Scroll to `Domain Access` and select `Connect Domain`. -6. Type in your domain and select `Continue`. -7. Select `Connect domain`. - -This will connect your domain to the R2 bucket, and will allow any objects inside of that bucket to be accessible by the selected domain. - -### To create an API token: - -1. Open [R2](https://dash.cloudflare.com/?to=/:account/r2). -2. Select `Manage R2 API Tokens` on the right top side of the dashboard. -3. Select `Create API token`. -4. Select the pencil icon or `R2 Token` text to edit your API token name. -5. Under `Permissions`, select `Read` or `Edit` for your token. -6. Select `Create API Token`. -7. Save a copy of your `Access Key ID` and `Secret access key` for the next step. - -### To configure uploading with ShareX: - -1. In `Destinations`, select `Destination Settings`. -2. Scroll down to `Amazon S3` and select it. -3. Using the `Access Key ID` & `Secret access key` fill in the two top boxes. -4. Select "`Endpoint:`" and type `.r2.cloudflarestorage.com`. (you can find your account ID on the right hand side of your [Dashboard](https://dash.cloudflare.com/?to=/:account/r2)) -5. Set `Region:` to `auto`. -6. Fill `Bucket name:` with the Bucket Name you picked on Cloudflare. -7. Change `Upload path:` to your preference. -8. Update `Use custom domain:` to the domain that you selected in the first step. -9. Untick "Set public-read ACL on file". -10. Ignore the rest of the settings. -11. In `Destinations`, select `Image uploader:` and change it to `File Uploader -> Amazon S3`. -12. Take a screenshot, and ensure that it uploads correctly. - -Now you are ready to use [Cloudflare R2](https://www.cloudflare.com/products/r2) in ShareX! \ No newline at end of file +2. Click `Create bucket`. +3. Enter your desired bucket name and click `Create Bucket`. +4. Go to the `Settings` tab. +5. Scroll to the `Domain Access` section and click `Connect Domain`. +6. Enter your domain name and click `Continue`. +7. Click `Connect domain`. + +This will connect your domain to the R2 bucket, allowing any objects stored in it to be accessed through the specified domain. + +### Create an API Token + +1. Open [R2](https://dash.cloudflare.com/?to=/:account/r2). +2. Click `Manage R2 API Tokens` in the top-right corner of the dashboard. +3. Click `Create API token`. +4. Click the pencil icon or `R2 Token` text to rename your API token. +5. Under `Permissions`, select `Read` or `Edit`, depending on your needs. +6. Click `Create API Token`. +7. Save your `Access Key ID` and `Secret Access Key`. You will need them in the next step. + +### Configure Uploading with ShareX + +1. In ShareX, go to `Destinations -> Destination Settings`. +2. Scroll down and select `Amazon S3`. +3. Enter your `Access Key ID` and `Secret Access Key` in the appropriate fields. +4. In the `Endpoint:` field, enter `.r2.cloudflarestorage.com`. (You can find your account ID on the right-hand side of your [dashboard](https://dash.cloudflare.com/?to=/:account/r2).) +5. Set the `Region:` field to `auto`. +6. Enter your bucket name in the `Bucket name:` field. +7. Set the `Upload path:` to your preferred structure (e.g., `%y/%mo`). +8. In `Use custom domain:`, enter the domain you configured earlier (e.g., `https://cdn.example.com`). +9. Uncheck `Set public-read ACL on file`. +10. Leave the other settings as-is. +11. Go to `Destinations -> Image uploader:` and set it to `File Uploader -> Amazon S3`. +12. Take a screenshot and verify that the upload works correctly. + +Now you're ready to use [Cloudflare R2](https://www.cloudflare.com/products/r2) with ShareX! diff --git a/docs/custom-uploader.md b/docs/custom-uploader.md index 0f45a50..17187cc 100644 --- a/docs/custom-uploader.md +++ b/docs/custom-uploader.md @@ -3,29 +3,29 @@ layout: markdown title: Custom uploader --- -## What is custom uploader? +## What is a custom uploader? -Custom uploader system in ShareX let users to upload image/text/file to hosting services or shorten/share URL. This feature is mainly used by users who host their own hosting services. +The custom uploader system in ShareX lets users upload images, text, or files to hosting services or shorten/share URLs. This feature is mainly used by users who host their own hosting services. ## Export / Import -You can export your custom uploader with `.sxcu` extension which allows users to just double click that file to be able to use custom uploader. +You can export your custom uploader with a `.sxcu` extension, which allows users to just double-click that file to use the custom uploader. -If destination type is configured then ShareX can also set this custom uploader as selected custom uploader and change current destination to this custom uploader, so users won't need any additional configuration to use it. +If the destination type is configured, ShareX can also set this custom uploader as the selected custom uploader and change the current destination to this custom uploader, so users won't need any additional configuration to use it. ## Name -In custom uploaders list this name will be used. Name field is optional. When it is left empty ShareX will use request URL domain as name automatically. It is suggested to leave name field empty unless you have multiple uploaders which using same domain. +This name will be used in the custom uploaders list. The name field is optional. When it is left empty, ShareX will automatically use the request URL domain as the name. It is suggested to leave the name field empty unless you have multiple uploaders that use the same domain. -For example if request URL is `https://example.com/upload.php` and name field is empty, then `example.com` name will be used in custom uploaders list. +For example, if the request URL is `https://example.com/upload.php` and the name field is empty, then `example.com` will be used in the custom uploaders list. ## Destination type -Destination type is used when users import custom uploader by double clicking the `.sxcu` file. +The destination type is used when users import a custom uploader by double-clicking the `.sxcu` file. ## Method -List of HTTP request methods available: +List of available HTTP request methods: * GET * POST @@ -33,38 +33,38 @@ List of HTTP request methods available: * PATCH * DELETE -If request don't have body and only parameters gonna be used then `GET` method is preferred. If body is `Form data (multipart/form-data)` then `POST` method is preferred. +If a request doesn't have a body and only parameters are going to be used, then the `GET` method is preferred. If the body is `Form data (multipart/form-form-data)`, then the `POST` method is preferred. ## Request URL -Request will be send to this URL. +The request will be sent to this URL. Example: `https://example.com/upload.php` ## URL parameters -Parameters will be used to create URL [query string](https://en.wikipedia.org/wiki/Query_string). +Parameters will be used to create a URL [query string](https://en.wikipedia.org/wiki/Query_string). -For text uploader or URL shortener `{input}` syntax can be used as value to supply input text or URL. +For a text uploader or URL shortener, the `{input}` syntax can be used as a value to supply input text or a URL. -You can also use dynamic values like `%mo` to get current month etc. +You can also use dynamic values like `%mo` to get the current month, etc. -For example if you set parameters like this: +For example, if you set parameters like this: | Name | Value | | --- | --- | | api_key | eUM14R4g4pMS | | private | true | -Then query string will be appended to request URL like this when sending request: +Then the query string will be appended to the request URL like this when sending a request: `https://example.com/upload.php?api_key=eUM14R4g4pMs&private=true` ## Headers -Headers can be used to pass additional information with request. Most of the time APIs use headers for authorization. +Headers can be used to pass additional information with a request. Most of the time, APIs use headers for authorization. -Default request headers can be overridden too like these: +Default request headers can be overridden too, like these: * Accept * Content-Length @@ -96,17 +96,17 @@ Supported request body types: * XML (application/xml) * Binary -Most of the time if API request method is `GET` then `No body` will be used with parameters. If request method is `POST` then `Form data (multipart/form-data)` body. But this is not always the case so you must check API documentation to make sure what request expects. +Most of the time, if the API request method is `GET`, then `No body` will be used with parameters. If the request method is `POST`, then `Form data (multipart/form-data)` will be used for the body. But this is not always the case, so you must check the API documentation to make sure what the request expects. ## Body arguments -For text uploader or URL shortener `{input}` syntax can be used as value to supply input text or URL. +For a text uploader or URL shortener, the `{input}` syntax can be used as a value to supply input text or a URL. ## File form name -This field can be only used when `Body` is `Form data (multipart/form-data)`. +This field can only be used when `Body` is `Form data (multipart/form-data)`. -For example in this HTML code: `` file form name is `file_image`. +For example, in this HTML code: ``, the file form name is `file_image`. ## URL @@ -115,13 +115,13 @@ For example in this HTML code: `` file form * Thumbnail URL * Error message -These textboxes can be used to parse response to get URL result. If response only contains URL then no need to write anything to URL textbox. +These text boxes can be used to parse the response to get the URL result. If the response only contains a URL, then there is no need to write anything in the URL text box. -Make sure to also parse error message so ShareX can show user friendly error message to users. +Make sure to also parse the error message so ShareX can show a user-friendly error message to users. ## Custom uploader syntax -There is a special syntax you can use to accomplish some tasks, like parsing URL from JSON responses. +There is a special syntax you can use to accomplish some tasks, like parsing a URL from JSON responses. This syntax is usable in the following sections, with a few exceptions: @@ -134,19 +134,19 @@ This syntax is usable in the following sections, with a few exceptions: * Deletion URL * Error message -For example syntaxes which involves parsing response only usable in URL sections as expected. +For example, syntaxes that involve parsing a response are only usable in URL sections, as expected. -**Note:** If you would like to use `{`, `}`, `|` or `\` characters in any of syntax supported sections then you can escape them with `\` character. For example: `\{` +**Note:** If you would like to use `{`, `}`, `|`, or `\` characters in any of the syntax-supported sections, you can escape them with a `\` character. For example: `\{` -You can find list of all available syntaxes with example usages at bottom. +You can find a list of all available syntaxes with example usages at the bottom. --- ### response -If response only contains file name (or id) and if you would like to append it to domain then you can use this syntax. +If the response only contains a file name (or id) and you would like to append it to the domain, you can use this syntax. -But if response just contains full URL then you don't have to use this syntax because empty URL textbox will use response automatically. +But if the response just contains the full URL, then you don't have to use this syntax because an empty URL text box will use the response automatically. Syntax: @@ -164,7 +164,7 @@ https://example.com/{response} ### responseurl -Can be used to get redirection URL. If no redirection happened then it will be just request URL. +Can be used to get a redirection URL. If no redirection happens, then it will be just the request URL. Syntax: @@ -182,7 +182,7 @@ Example URL: ### header -Can be used to get specific response header value. +Can be used to get a specific response header value. Syntax: @@ -200,7 +200,7 @@ Example URL: ### json -You can use [JsonPath](https://goessner.net/articles/JsonPath/) to parse URL from [JSON](https://en.wikipedia.org/wiki/JSON) response. +You can use [JsonPath](https://goessner.net/articles/JsonPath/) to parse a URL from a [JSON](https://en.wikipedia.org/wiki/JSON) response. Syntax: @@ -246,7 +246,7 @@ Example 2: ### xml -You can use [XPath](https://www.w3schools.com/xml/xpath_syntax.asp) to parse URL from [XML](https://en.wikipedia.org/wiki/XML) response. +You can use [XPath](https://www.w3schools.com/xml/xpath_syntax.asp) to parse URL from an [XML](https://en.wikipedia.org/wiki/XML) response. Syntax: @@ -275,9 +275,9 @@ Example: ### regex -If response is not [JSON](https://en.wikipedia.org/wiki/JSON) or [XML](https://en.wikipedia.org/wiki/XML) then you can use [Regular expression (Regex)](https://en.wikipedia.org/wiki/Regular_expression) to parse response text. +If the response is not [JSON](https://en.wikipedia.org/wiki/JSON) or [XML](https://en.wikipedia.org/wiki/XML), then you can use [Regular expression (Regex)](https://en.wikipedia.org/wiki/Regular_expression) to parse the response text. -While writing regex pattern don't forget to escape `{`, `}`, `|`, `\` characters with `\`. +While writing a regex pattern, don't forget to escape `{`, `}`, `|`, `\` characters with `\`. Syntax: @@ -311,7 +311,7 @@ Example with group name: ### input -If you are using text custom uploader then this syntax will be replaced with text which you gonna upload, if it is URL shortener or URL sharing service then syntax will be replaced with URL. This syntax mainly used as argument value. +If you are using a text custom uploader, then this syntax will be replaced with the text you are going to upload. If it is a URL shortener or URL sharing service, then the syntax will be replaced with the URL. This syntax is mainly used as an argument value. Syntax: @@ -329,7 +329,7 @@ Example argument: ### filename -This syntax will be replaced with file name. Most of the time you don't need to use this syntax because when doing multipart/form-data file upload, file name already included in request. +This syntax will be replaced with the file name. Most of the time, you don't need to use this syntax because when doing a multipart/form-data file upload, the file name is already included in the request. Syntax: @@ -347,7 +347,7 @@ Example argument: ### random -If you would like to use random domain each upload you can use this syntax. +If you would like to use a random domain for each upload, you can use this syntax. Syntax: @@ -365,7 +365,7 @@ https://{random:subdomain1|subdomain2}.{random:domain1|domain2|domain3}.com/{jso ### select -This will show window with all values as buttons. So you can select dynamically which text input to use. This syntax can be useful if you have multiple domains and would like to select specific domain each upload. +This will show a window with all values as buttons. So you can dynamically select which text input to use. This syntax can be useful if you have multiple domains and would like to select a specific domain for each upload. Syntax: @@ -383,9 +383,9 @@ https://{select:domain1.com|domain2.com|domain3.com}/{json:files[0].url} ### inputbox -This will show input box for user to input text. This syntax can be used if user prefer to write different value for argument or URL part each upload. +This will show an input box for the user to input text. This syntax can be used if a user prefers to write a different value for an argument or URL part for each upload. -First parameter is window title, second parameter is default text for input box. Both parameters are optional. +The first parameter is the window title, and the second parameter is the default text for the input box. Both parameters are optional. Syntax: @@ -442,7 +442,7 @@ Example header: ShareX custom uploader (SXCU) files are JSON files at their core. -Example JSON schema looks like this: +An example JSON schema looks like this: ```json { diff --git a/docs/google-cloud-storage.md b/docs/google-cloud-storage.md index 820c79e..0e1dfa6 100644 --- a/docs/google-cloud-storage.md +++ b/docs/google-cloud-storage.md @@ -3,52 +3,52 @@ layout: markdown title: Google Cloud Storage guide --- -## How to configure Google Cloud Storage and use it in ShareX +## How to Configure Google Cloud Storage and use it in ShareX -### Create project +### Create a Project -* Open [Google Cloud Console](https://console.cloud.google.com) -* Click `Select a project` then `New project` -* Name your project, for example `ShareX` -* Click `Create` +* Open the [Google Cloud Console](https://console.cloud.google.com). +* Click `Select a project`, then click `New project`. +* Name your project (e.g., `ShareX`). +* Click `Create`. -### Setup billing profile +### Set Up a Billing Profile [Google Cloud Storage Pricing](https://cloud.google.com/storage/pricing) -Google Cloud Storage isn't free, it's billed based on usage, not a static monthly fee. Storage is very cheap, most users bills will be free or 1-2 cents a month. +Google Cloud Storage isn't free—it's billed based on usage rather than a flat monthly fee. Storage costs are very low; most users will pay nothing or just a few cents per month. -* Open [billing](https://console.cloud.google.com/billing) and setup profile +* Open the [Billing Console](https://console.cloud.google.com/billing) and set up a billing profile. -### Create bucket +### Create a Bucket -* Open [storage](https://console.cloud.google.com/storage) -* Click `Create bucket` -* If you plan on using a custom domain, you must first verify the domain using this [guide](https://cloud.google.com/storage/docs/domain-name-verification), then name your bucket the domain you're going to use. For example, `https://i.example.com/image.png` bucket should be named `i.example.com` -* Storage class should be `regional` if you plan on using a CDN like [Cloudflare](https://www.cloudflare.com), or `multi-regional` if not. -* Access control should be `Fine-grained` -* Click `Create` +* Open [Cloud Storage](https://console.cloud.google.com/storage). +* Click `Create bucket`. +* If you plan to use a custom domain, you must first verify the domain using [this guide](https://cloud.google.com/storage/docs/domain-name-verification). Then, name your bucket after the domain you're going to use. For example, for `https://i.example.com/image.png`, the bucket should be named `i.example.com`. +* Set the storage class to `Regional` if you plan to use a CDN like [Cloudflare](https://www.cloudflare.com), or `Multi-regional` if not. +* Set the access control to `Fine-grained`. +* Click `Create`. -### [Optional] Configure DNS for custom domain +### [Optional] Configure DNS for a Custom Domain -If you are going to use your own domain then you must configure DNS. +If you're going to use your own domain, you'll need to configure DNS. -For example if you are using [Cloudflare](https://www.cloudflare.com), your bucket name is `i.example.com` then these are DNS settings: +For example, if you're using [Cloudflare](https://www.cloudflare.com) and your bucket name is `i.example.com`, use the following DNS settings: -* Type: `CNAME` -* Name: `i` -* Value: `c.storage.googleapis.com` +* **Type:** `CNAME` +* **Name:** `i` +* **Value:** `c.storage.googleapis.com` -### Configure ShareX Google Cloud Storage settings +### Configure ShareX for Google Cloud Storage -* Open `Destinations -> Destination settings` -* Select `Google Cloud Storage` tab -* Complete authorization -* Fill bucket name same as which you created -* For the upload path I suggest using `%y/%mo` which creates such folder `2017/12` -* If you are using a custom domain fill it in. Google Cloud Storage doesn't support custom domain `https` natively, so unless you are using a tls proxy such as [Cloudflare](https://www.cloudflare.com), you must prepend `http` protocol to your domain. So in the custom domain box you would fill in exactly `http://i.example.com` -* If you are using uniform permissions in your bucket, make sure to untick `Set public-read ACL on file`, since ACL isn't supported in uniform permission buckets. -* Now you can close destination settings window -* In main window make sure to select Google Cloud Storage as destination for image uploader, text uploader and file uploader +* Open `Destinations -> Destination Settings`. +* Select the `Google Cloud Storage` tab. +* Complete the authorization process. +* Enter the bucket name exactly as you created it. +* For the upload path, it’s recommended to use `%y/%mo`, which creates folder structures like `2017/12`. +* If you're using a custom domain, enter it in the appropriate field. Google Cloud Storage doesn’t support custom domains over HTTPS natively. So unless you're using a TLS proxy like [Cloudflare](https://www.cloudflare.com), you must use `http://` instead of `https://`. For example: `http://i.example.com`. +* If your bucket uses **uniform permissions**, make sure to **uncheck** `Set public-read ACL on file`, as ACLs are not supported in buckets with uniform permissions. +* You can now close the Destination Settings window. +* In the main window, set Google Cloud Storage as the destination for your image, text, and file uploaders. -Now you are ready to use [Google Cloud Storage](https://cloud.google.com/storage) in ShareX! +Now you're ready to use [Google Cloud Storage](https://cloud.google.com/storage) in ShareX!