diff --git a/matrixpack.sh b/matrixpack.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2b81610a5b4d3216ac6fd33eee6cb92bbeee9d54
--- /dev/null
+++ b/matrixpack.sh
@@ -0,0 +1,165 @@
+#!/bin/bash
+# Usage
+# matrixpack token homeserver directory...
+# 
+# Pack name is the directory name
+# Sticker name is the file name
+# /!\ Token is a sensitive information
+
+# UTILITY FUNCTIONS
+function require {
+  hash $1 2>/dev/null || {
+    echo >&2 "Error: '$1' is required, but was not found."; exit 1;
+  }
+}
+
+function slugify () {
+    echo "$1" | iconv -c -t ascii//TRANSLIT | sed -E 's/[~^]+//g' | sed -E 's/[^a-zA-Z0-9]+/-/g' | sed -E 's/^-+|-+$//g' | tr A-Z a-z
+}
+
+# Display usage funtion
+display_usage (){
+    echo -e "\nUsage : ./matrixpack.sh token homeserver directory\n"
+}
+
+# Erase http:// or https:// if added in the homeserver
+slug_homeserver() {
+    echo "$1" | iconv -c -t ascii//TRANSLIT | sed -E 's/^http:\/\/|^https:\/\///g' | sed -E 's/^-+|-+$//g'
+}
+
+# COMMON REQUIRED BINARIES
+require convert
+require montage
+require identify
+require python
+require curl
+require sed
+require tr
+
+# Checking params
+if test $# -lt 3 ; then
+  echo 1>&2 "$0:FATAL: invalid argument number (expected 3)"
+  display_usage
+  exit 1
+fi
+
+# Setting variables
+token=$1
+homeserver=$(slug_homeserver $2)
+
+# Checking if the homeserver exist.
+# If the homeserver does not exist, the file headers is not created
+curl "https://$homeserver" -I -o headers -s
+if test -f "headers"; then
+    rm headers
+else
+    echo 1>&2 "$0:FATAL: The homeserver \"$2\" is incorrect."
+    exit 1
+fi
+
+# Checking if the token exist.
+# Save the error value on file "headers" and 
+# evaluate it to verify the token
+curl -s -X POST  "https://$homeserver/_matrix/media/r0/upload?access_token=$token" | python3 -c "import sys, json; print(json.load(sys.stdin)['errcode'])" >> headers
+while read line; do
+    if [[ ($line == "M_UNKNOWN") ]]
+    then
+        rm headers
+    else if [[ ($line == "M_UNKNOWN_TOKEN") ]]
+    then
+        echo "$0:ERROR: The token provided is incorrect or does not exist in this homeserver"
+        rm headers
+        exit 1
+    else
+        echo "$0:ERROR: Not yet implemented error"
+        exit 1
+    fi
+    fi
+done < headers
+
+for i in "$@"
+do
+  if [ -d "$i" ]; then
+
+    # Changing directory to work directly in it
+    cd "$i"
+    dir=$(pwd)
+    packname=${dir##*/}
+    slug=$(slugify "$packname")
+
+    # Printing informations
+    echo -e "Creating sticker pack : \033[94;1m$packname\033[0m\nhomeserver=\033[94m$homeserver\033[0m\noutput=\033[94m$slug\033[0m"
+
+    # Making result folder
+    if ! [ -d $slug ]; then mkdir $slug; fi
+    if ! [ -d "$slug/tmp" ]; then mkdir "$slug/tmp"; fi
+    echo -n "{\"title\":\"$packname\",\"id\":\"$slug\",\"stickers\":[" > "$slug/$slug.json"
+
+    first=""
+    for f in *
+    do
+      # Ignore folders
+      if [ -f "$f" ]; then
+
+        # Resizing large images
+        width=$(identify -format "%w" "$f"[0])> /dev/null
+        height=$(identify -format "%h" "$f"[0])> /dev/null
+        if [ $width -gt 256 ]; then
+          width="256";
+        fi
+        if [ $height -gt 256 ]; then
+          height="256";
+        fi
+
+        echo -n "$f : "
+        type="png"
+        opts="-type TrueColor PNG32:"
+
+        # Gif
+        if [[ "$f" == *.gif ]]; then
+          type="gif"
+          opts=""
+        fi
+
+        # Erase the extension of the image
+        sticker_name=$(echo "$f" | cut -f 1 -d '.')
+
+        # Trim, resize and remove indexed palette from image
+        echo -n "trimming and resizing"
+        convert "$f" -bordercolor none -border 1 "$slug/tmp/$f.$type"
+        echo -n "."
+        convert "$slug/tmp/$f.$type" -trim +repage "$slug/tmp/$f.$type"
+        echo -n "."
+        convert -background none -gravity center "$slug/tmp/$f.$type" -resize "${width}x$height" $opts"$slug/tmp/$f.$type"
+        echo -ne ". \033[92mdone\033[0m! "
+        
+        # First item in array
+        echo -n "$first" >> "$slug/$slug.json"
+        
+        # Uploading image
+        echo -n "uploading."
+        mxc=$(curl -s -X POST -H "Content-Type: image/$type" --data-binary "@$slug/tmp/$f.$type" "https://$homeserver/_matrix/media/r0/upload?access_token=$token" | python -c "import sys, json; print(json.load(sys.stdin)['content_uri'])")
+        echo -n "."
+
+        # Calculating 128x128> format
+        convert "$slug/tmp/$f.$type" -resize "128x128" "$slug/tmp/size"
+        width=$(identify -format "%w" "$slug/tmp/size"[0])> /dev/null
+        height=$(identify -format "%h" "$slug/tmp/size"[0])> /dev/null
+
+        # Appending to json
+        echo -n "{\"body\":\"$sticker_name\",\"info\":{\"mimetype\":\"image/$type\",\"h\":$height,\"w\":$width,\"thumbnail_url\":\"$mxc\"},\"msgtype\":\"m.sticker\",\"url\":\"$mxc\",\"id\":\"$packname-$sticker_name\"}" >> "$slug/$slug.json"
+        first=","
+        echo -e ". \033[92msuccess\033[0m!"
+      fi
+    done
+    
+    rm "$slug/tmp/size"
+    montage "$slug/tmp/*"[0] -background none "$slug/preview.png"
+    rm -r "$slug/tmp"
+    echo -ne "# $packname  \n![Preview of $packname](preview.png)" > "$slug/README.md"
+    echo -n "]}" >> "$slug/$slug.json"
+    cd - > /dev/null
+    echo -e "\033[92;1mPack successfully created!\n\033[0mCheck \033[94;1m$dir/$slug \033[0mfor output"
+
+  fi
+done
diff --git a/stpkg b/stpkg
index 79372f711f7e3ed1f527a952f0785caeb71d4d5a..451d115bdc8e6db8229238b38d1ccf9f05ab3569 100755
--- a/stpkg
+++ b/stpkg
@@ -605,10 +605,12 @@ __edit() {
             local ST_JSON=$(create_sticker_json "$PACK_NAME" "$NAME" "$WIDTH" "$HEIGHT" "$TYPE" "$MXC")
             jq ".stickers += [$ST_JSON]" < $TEMP | sponge $TEMP
             ;;
+
         del)
             [ $# -ne 0 ] && die "Extra argument are present: $*"
             jq "del(.stickers[] | select(.body == \"$STICKER_NAME\"))" < "$TEMP" | sponge "$TEMP"
             ;;
+
         *)
             die "Unknown action '$ACTION', should be 'add' or 'del'"
             ;;