---
title: Configure the Custom Uploader
slug: solution-builder/configure-the-custom-uploader
docTags: 
createdAt: 2024-02-03T18:13:03.244Z
---

# Overview

For background information, see [Custom Uploader](docId:42tXkY0k3OLyTsWSglySh).

If you want to create a Custom Uploader, then please [Contact Sales](https://screenpal.com/contact-us?reason=api) to obtain the source files that you will need.

This document describes how you can configure your personalized Custom Uploader.  This allows you to use a reserved area of the ScreenPal Solution Builder Upload UI panel to insert your custom UI.  You create the UI using the Java programming language (not JavaScript).

In this screenshot, the yellow rectangle is the area where your custom Java user interface would appear.



![](https://api.archbee.com/api/optimize/xEUJizVl5AzmsuYHApVcv/J3fqNQ3YpT0pzfdQtn-hN_image.png)

Your custom user interface can be used to add additional customer entered information that is delivered in the `POST` to the upload URL.&#x20;

# Creating a Custom Uploader

Create a Java source file, such as CustomPublishImpl.java, that implements the `com.screencastomatic.custompublish.CustomPublish` interface.  For example:

```java
package test.custompublish;

import com.screencastomatic.CustomPublishBasicUploadWithSelect;

import javax.swing.*;
import java.awt.*;

public class CustomPublishImpl extends CustomPublishBasicUploadWithSelect{
    @Override
    public JComponent create(Application application){
        JComponent superJComponent = super.create(application);
        superJComponent.setOpaque(false);
        superJComponent.setAlignmentX(Component.CENTER_ALIGNMENT);
        
        JComponent customUi = new JLabel("<html><br>  -- This is my Custom Uploader UI --<br>Imagine some buttons or " +
                "something here.  <br><br>");
        customUi.setOpaque(true);
        customUi.setBackground(Color.YELLOW);
        customUi.setMinimumSize(customUi.getPreferredSize());
        customUi.setMaximumSize(customUi.getPreferredSize());
        customUi.setAlignmentX(Component.CENTER_ALIGNMENT);
        
        JPanel result = new JPanel();
        result.setLayout(new BoxLayout(result, BoxLayout.Y_AXIS));
        result.setOpaque(false);
        
        result.add(customUi);
        result.add(superJComponent);
        
        return result;
    }
}

```

You create a JAR file, similar to [BasicUploadSkin-x.y.z.jar](docId:42tXkY0k3OLyTsWSglySh), that replaces BasicUploadSkin-x.y.z.jar.  Inside that JAR file, you put:

- The class file for your custom uploader, such as CustomPublishImpl.class.  Make sure to put it inside the required Java directory hierarchy, such as "test/custompublish/CustomPublishImpl.class" for the example source file above's Java package.&#x20;
- You "appDisplay.properties" file with your customized properties.  See [appDisplay.properties](docId:8Nh8N9zsb0jjiEpYzqZ1s) section for a description of the properties you can use.
- Any resources you need for you custom UI, such as skin images.

Be sure to remove BasicUploadSkin-x.y.z.jar and use your custom uploader JAR, such as CustomUploadSkin-3.1.0.jar, when specifying your list of JARs that get downloaded from your JavaScript launcher properties.  See [JAR File Names](docId:-bPKDmtjdPmi02X4qPzcw).

# Custom Uploader Properties

Below is a list of properties that you may configure from your [Basic Uploader](docId:42tXkY0k3OLyTsWSglySh) JavaScript file, and/or your `CustomUploadSkin-x.y.z.jar` JAR file (inside its appDisplay.properties and appDisplay\_xxx.properties files.)

## Localization

The ScreenPal application displays text using localization.  This means it detects the user's set language and choses a string created for that language.  It does this by having the text property being placed in a language specific file.  For example, put the "som.\*.app.preview\.title" property in each of the language files, with its value text set to the translated string for that language.

appDisplay.properties is used to hold properties that are for any language, such as properties that are not text messages.  appDisplay\_xxx.properties files are used to hold language specific strings.

In the property list below, <font color="#fcb900">LOCALE</font> is used to identify a property that you should place in a language specific appDisplay\_xxx.properties file.

| Filename                       | Language           | Note                                                                            |
| ------------------------------ | ------------------ | ------------------------------------------------------------------------------- |
| appDisplay.properties          | None.              | Holds non localized properties.  (No translated text.)                          |
| appDisplay\_de.properties      | German             |                                                                                 |
| appDisplay\_default.properties | English            | Used as the default when no other language file contains an overriden property. |
| appDisplay\_es.properties      | Spanish            |                                                                                 |
| appDisplay\_fr.properties      | French             |                                                                                 |
| appDisplay\_it.properties      | Italian            |                                                                                 |
| appDisplay\_ja.properties      | Japanese           |                                                                                 |
| appDisplay\_pt\_br.properties  | Portugues (Brasil) |                                                                                 |
| appDisplay\_zh.properties      | Chinese            |                                                                                 |

The following properties can be set in the **appDisplay.properties** file:

- [som.\*.app.content.subdirectory](docId:8Nh8N9zsb0jjiEpYzqZ1s) - <font color="#ff6900">REQUIRED</font>  <font color="#fcb900">LOCALE</font>&#x20;
- [som.\*.app.custompublish.class](docId:8Nh8N9zsb0jjiEpYzqZ1s) - <font color="#ff6900">REQUIRED</font>
- [som.\*.app.custompublish.name](docId:8Nh8N9zsb0jjiEpYzqZ1s) - <font color="#ff6900">REQUIRED</font>  <font color="#fcb900">LOCALE</font>&#x20;
- [som.\*.app.drawandzoom.enabled](docId:8Nh8N9zsb0jjiEpYzqZ1s) - <font color="#3b9f0f">OPTIONAL</font>
- [som.\*.app.editing.enabled](docId:8Nh8N9zsb0jjiEpYzqZ1s) - <font color="#3b9f0f">OPTIONAL</font>
- [som.\*.app.frame.title](docId:8Nh8N9zsb0jjiEpYzqZ1s) - <font color="#ff6900">REQUIRED</font>  <font color="#fcb900">LOCALE</font>&#x20;
- [som.\*.app.preview.title](docId:8Nh8N9zsb0jjiEpYzqZ1s) - <font color="#ff6900">REQUIRED</font>  <font color="#fcb900">LOCALE</font>&#x20;
- [som.\*.app.upload.deleteafter](docId:8Nh8N9zsb0jjiEpYzqZ1s) - <font color="#3b9f0f">OPTIONAL</font>
- [som.\*.app.upload.message](docId:8Nh8N9zsb0jjiEpYzqZ1s) - <font color="#ff6900">REQUIRED</font>  <font color="#fcb900">LOCALE</font>&#x20;
- [som.\*.app.upload.onexit.action](docId:8Nh8N9zsb0jjiEpYzqZ1s) - <font color="#3b9f0f">OPTIONAL</font>
- [som.\*.app.upload.showlink](docId:8Nh8N9zsb0jjiEpYzqZ1s) - <font color="#3b9f0f">OPTIONAL</font>

## som.\*.app.content.subdirectory

<font color="#ff6900">REQUIRED</font>  <font color="#fcb900">LOCALE</font><font color="#ff6900">  </font>The subdirectory to store your users’ recordings.  The subdirectory is created in the ScreenPal Application's default storage location.  For example, the user's home folder on Mac, or the user's documents folder on Windows.

```java
som.*.app.content.subdirectory=Screen Recorder
```

## som.\*.app.custompublish.class

<font color="#ff6900">REQUIRED  </font>Identifies the Java class you created that implements the CustomPublish interface.

```java
som.*.app.custompublish.class=com.screencastomatic.custompublish.CustomPublishImpl
```

## som.\*.app.custompublish.name

<font color="#ff6900">REQUIRED</font>  <font color="#fcb900">LOCALE</font><font color="#ff6900">  </font>The text to show for your brand name.

```java
som.*.app.custompublish.name="Upload to Mybrand"
```

## som.\*.app.drawandzoom.enabled

<font color="#3b9f0f">OPTIONAL  </font>Optionally show the **Show Draw & Zoom Controls** button on the ScreenPal Recorder.

```java
som.*.app.drawandzoom.enabled=true
```

## som.\*.app.editing.enabled

<font color="#3b9f0f">OPTIONAL  </font>Optionally show the **Edit Video** button on the Upload UI panel.

```java
som.*.app.editing.enabled=true
```

## som.\*.app.frame.title

<font color="#ff6900">REQUIRED</font>  <font color="#fcb900">LOCALE</font><font color="#ff6900">  </font>The text to show on the ScreenPal Application titlebar.

```java
som.*.app.frame.title=Mybrand
```

## som.\*.app.preview\.title

<font color="#ff6900">REQUIRED</font>  <font color="#fcb900">LOCALE</font> <font color="#ff6900"> </font>The text to show for the title of the recording at the top of the Preview display.

```java
som.*.app.preview.title=Upload to Mybrand
```

## som.\*.app.upload.deleteafter

<font color="#3b9f0f">OPTIONAL  </font>Specifies if the local recording should be deleted after a successful upload.

```java
som.*.app.upload.deleteafter=true
```

## som.\*.app.upload.message

<font color="#ff6900">REQUIRED</font>  <font color="#fcb900">LOCALE</font><font color="#ff6900">  </font>The message to display after a successful upload.  The optional string, `TITLE_REPLACE`, will be replaced with the string you return from your `CustomPublishImpl.getTitle()` Java method.

```java
som.*.app.upload.message=\
<div style="font-size:17pt; text-align:left;">\
Uploaded Video:<br>\
<b>TITLE_REPLACE</b>\
<br><br>\
You can set up a custom message here and also:\
<ul>\
<li>Choose if you want to show the link below.<br><br></li>\
<li>Choose if you want to launch a url when the <b>Continue</b> button below is pressed so you can direct the user to a playback page or any other url.</li>\
</ul>\
<br>For example, this app is set to go to Screencast-O-Matic.com when you click <b>Continue</b>\
</div>
```

## som.\*.app.upload.onexit.action

<font color="#3b9f0f">OPTIONAL  </font>After a successful upload, a **Continue&#x20;**&#x62;utton is displayed.  When clicked, a webpage will be opened to the URL you specify here.  If not specified, then no webpage is opened.  Specify `gotoplayback` to open the URL you returned for a successful upload via `com.screencastomatic.CustomPublish.CustomUploader.Listener.done(String url)`.

```java
som.*.app.upload.onexit.action=http://screenpal.com/
```

## som.\*.app.upload.showlink

<font color="#3b9f0f">OPTIONAL  </font>After a successful upload, you can choose to show UI that presents a hyperlink URL to open the video or use its **Copy&#x20;**&#x62;utton to copy the URL to the clipboard.

```java
som.*.app.upload.showlink=true
```

