<p>Here is my version of a vending machine:</p>
<ul>
<li>Upgraded with metadata creation</li>
<li>&quot;Completed&quot; counter backed up in a <code>*.txt</code> file so if the machine restarts the script does not start minting from the beginning</li>
<li>You should create your own Blockfrost project</li>
<li>Picture uploaded to Infura</li>
<li>Sorry for the Hungarian comments</li>
</ul>
<pre><code>#!/bin/bash

cd /opt/cardano/cnode/priv/wallet/cpostal
looping=1
log=log_file.txt
txs=txs.txt
numberCompleted=`cat numbercompleted.txt`

# ez lesz raymond címe, most a sajátom
donationAddr=`cat rajmond_yoroi_address`

# erre a címre várjuk a befizetéseket
paymentAddr=`cat payment.addr`

paymentSignKeyPath=./payment.skey
policySignKeyPath=./policy/policy.skey
scriptPath=./policy/policy.ada.2.120.script

POLICYID=$(cardano-cli transaction policyid --script-file $scriptPath) &gt; policy/policyID

# ez az én yoroi-s stake címem
profitAddr=`cat yoroi_address`

echo &quot;&quot; &gt;&gt; $txs
echo &quot;&quot; &gt;&gt; $log
echo &quot;Log File&quot; &gt;&gt; $log
echo &quot;-------------------&quot; &gt;&gt; $log
echo &quot;Process started at: $(date +%T)&quot; &gt;&gt; $log
echo &quot;-------------------&quot; &gt;&gt; $log
echo &quot;&quot; &gt;&gt; $log

arcedula=50000000 # ennyit kérünk ezért az NFT-ért

trap 'looping=0;wait' INT TERM

while (( looping )); do
    echo ================================================================================== 
    cardano-cli query utxo --address $paymentAddr --mainnet &gt; fullUtxo.out
    tail -n +3 fullUtxo.out | sort -k3 -nr &gt; balance.out
    cat balance.out
    while read -r utxo; do
        sleep 5s
    #echo &quot;UTXO detected&quot; &gt;&gt; $log
        tx_hash=$(awk '{ print $1 }' &lt;&lt;&lt; &quot;${utxo}&quot;)
    echo &quot;TXHash: &quot;$tx_hash
    idx=$(awk '{ print $2 }' &lt;&lt;&lt; &quot;${utxo}&quot;)
        utxo_balance=$(awk '{ print $3 }' &lt;&lt;&lt; &quot;${utxo}&quot;)
    tx_in=&quot;--tx-in ${tx_hash}#${idx}&quot;
    if [ $( grep -q &quot;${tx_hash}&quot; &quot;$txs&quot; &amp;&amp; echo $? ) ];
    then
       # echo &quot;Previous tx&quot; &gt;&gt; $log
        echo &quot;nem trténr  utalás&quot;
        break
    else
        echo ${tx_hash} &gt;&gt; $txs
        echo &quot;utalás trtént&quot;
        echo &quot;A küldő cím: &quot; &gt;&gt; $log
        echo $(curl -H 'project_id: *********' \
                https://cardano-mainnet.blockfrost.io/api/v0/txs/${tx_hash}/utxos \
                | jq '.inputs' | jq '.[0]' | jq '.address') &gt;&gt; $log
            in_addr=$(curl -H 'project_id: *********' \
                https://cardano-mainnet.blockfrost.io/api/v0/txs/${tx_hash}/utxos \
                | jq '.inputs' | jq '.[0]' | jq '.address' | sed 's/^.//;s/.$//')
            echo &quot;Address: ${in_addr}&quot;
        echo &quot;utalás értéke: &quot;$utxo_balance
            if [ ${utxo_balance} != $arcedula ] || [ $(ls &quot;/opt/cardano/cnode/stamps/s1/&quot; | wc -l) == 0 ];
            then
            echo ${utxo_balance} &gt;&gt; $log
            echo &quot;Refund Initiated...&quot; &gt;&gt; $log
        echo `date` &gt;&gt; $log
        echo &quot;Pénzvisszafizetés&quot;
            currentSlot=$(cardano-cli query tip --mainnet | jq -r '.slot')
                cardano-cli transaction build-raw \
                    --fee 0 \
                    ${tx_in} \
                    --tx-out ${in_addr}+${utxo_balance} \
                    --invalid-hereafter $(( ${currentSlot} + 1000)) \
                    --out-file tx.tmp &gt;&gt; $log
                fee=$(cardano-cli transaction calculate-min-fee \
                    --tx-body-file tx.tmp \
                    --tx-in-count 1 \
                    --tx-out-count 1 \
                    --mainnet \
                    --witness-count 1 \
                    --byron-witness-count 0 \
                    --protocol-params-file protocol.json | awk '{ print $1 }') &gt;&gt; $log
                echo &quot;Fee:&quot;$fee &gt;&gt; $log
        fee=${fee%&quot; Lovelace&quot;}
                amountToSendUser=$(( ${utxo_balance}-${fee} ))
            echo ${amountToSendUser} &gt;&gt; $log
                cardano-cli transaction build-raw \
                    --fee ${fee} \
                     ${tx_in} \
                    --tx-out ${in_addr}+${amountToSendUser} \
                    --invalid-hereafter $(( ${currentSlot} + 1000)) \
                    --out-file tx.raw &gt;&gt; $log
echo &quot;Pénz visszküldés submit&quot; &gt;&gt; $log
         cardano-cli transaction sign \
                    --signing-key-file $paymentSignKeyPath \
                    --tx-body-file tx.raw \
                    --out-file tx.signed \
                    --mainnet &gt;&gt; $log
echo &quot;Pénz visszaküldés submit&quot; &gt;&gt; $log
                cardano-cli transaction submit --tx-file tx.signed --mainnet &gt;&gt; $log


# *******************************************NFT MINT *************************************
            else
            echo ========================================================= &gt;&gt; $log
        echo ======================== ÚJ NFT ========================= &gt;&gt; $log
        echo ========================================================= &gt;&gt; $log
        echo &quot;Sending NFT...&quot; &gt;&gt; $log
        echo `date` &gt;&gt; $log
            numberCompleted=$(( numberCompleted+1 ))
        echo &quot;Token száma: $numberCompleted&quot; &gt;&gt; $log
        echo $numberCompleted &gt; numbercompleted.txt
#           POLICYID=$(cardano-cli transaction policyid --script-file $scriptPath) ezt beépítetem az elejére, de ha minden nFT küln policit kapna akkor ide kell


#*********************** metadata gerebléyzés *****************

  tokenname=`cat /opt/cardano/cnode/stamps/s1/Stamp_Ada_$numberCompleted.png.ipfs.txt | awk -F'&quot;' {'print $4 '} | awk -F'.' {'print $1'} | sed -e 's/_//g'`
tokennameID=`cat /opt/cardano/cnode/stamps/s1/Stamp_Ada_$numberCompleted.png.ipfs.txt | awk -F'&quot;' {'print $4 '} | awk -F'_' {'print $3'} | awk -F'.' {'print $1'} | sed 's/^0*//'`
  ipfs_hash=`cat /opt/cardano/cnode/stamps/s1/Stamp_Ada_$numberCompleted.png.ipfs.txt | awk -F'&quot;' {'print $8 '}`
echo &quot;tokenname:&quot; $tokenname &gt;&gt; $log
echo &quot;tokennameID:&quot; $tokennameID &gt;&gt; $log
echo &quot;Poolpm név:&quot;$POLICYID&quot;.&quot;$tokenname &gt;&gt; $log


echo &quot;{&quot;&gt;&gt; $tokenname&quot;metadata.json&quot;
echo &quot;      \&quot;721\&quot;: { &quot;&gt;&gt; $tokenname&quot;metadata.json&quot;
echo &quot;           \&quot;$POLICYID\&quot;: { &quot;&gt;&gt; $tokenname&quot;metadata.json&quot;
echo &quot;              \&quot;$tokenname\&quot;: { &quot;&gt;&gt; $tokenname&quot;metadata.json&quot;
echo &quot;                \&quot;description\&quot;: \&quot;CARDANO POSTAL SERVICE STAMP\&quot;,&quot; &gt;&gt; $tokenname&quot;metadata.json&quot;
echo &quot;                \&quot;name\&quot;: \&quot;Ada Lovelace stamp $tokennameID\&quot;,&quot; &gt;&gt; $tokenname&quot;metadata.json&quot; 
echo &quot;                \&quot;id\&quot;: $tokennameID, &quot;&gt;&gt; $tokenname&quot;metadata.json&quot;
echo &quot;                \&quot;creator\&quot;: \&quot;Ildiko Kovacs\&quot;,&quot; &gt;&gt; $tokenname&quot;metadata.json&quot;
echo &quot;                \&quot;image\&quot;: \&quot;ipfs://$ipfs_hash\&quot;,&quot; &gt;&gt; $tokenname&quot;metadata.json&quot;
echo &quot;                \&quot;url\&quot;: \&quot;https://cardanopostalservice.io\&quot;&quot; &gt;&gt; $tokenname&quot;metadata.json&quot;
echo &quot;              }&quot; &gt;&gt; $tokenname&quot;metadata.json&quot;
echo &quot;            }&quot;&gt;&gt; $tokenname&quot;metadata.json&quot;
echo &quot;        }&quot; &gt;&gt; $tokenname&quot;metadata.json&quot;
echo &quot;}&quot;&gt;&gt; $tokenname&quot;metadata.json&quot;
metadatajson=&quot;${tokenname}metadata.json&quot;

echo ================
echo &quot;mintelési adatok&quot;
echo &quot;tokenname:&quot; $tokenname 
echo &quot;tokennameID:&quot; $tokennameID 
#cat $metadatajson

# **************** Bevétel szétdobása ********************

       amountToSendUser=1800000
((amountToDonate = arcedula * 5 / 100)) # ez magy rajmondnak
    
((amountToSendProfit = arcedula - amountToDonate - amountToSendUser))  # ez megy szabinak

echo 'vegleges szamok:'
echo 'arcedula:' $arcedula
echo 'amount to send profit:' $amountToSendProfit
echo 'amount to send user:' $amountToSendUser
echo 'amount to donate:' $amountToDonate

                currentSlot=$(cardano-cli query tip --mainnet | jq -r '.slot')
                cardano-cli transaction build-raw \
                    --fee 0 \
                    ${tx_in} \
                    --tx-out ${in_addr}+${amountToSendUser}+&quot;1 $POLICYID.${tokenname}&quot; \
                    --tx-out ${profitAddr}+${amountToSendProfit} \
            --tx-out ${donationAddr}+${amountToDonate} \
            --mint=&quot;1 $POLICYID.${tokenname}&quot; \
            --minting-script-file $scriptPath \
            --metadata-json-file ${metadatajson} \
                    --invalid-hereafter $(( ${currentSlot} + 10000)) \
                    --out-file tx.tmp &gt;&gt; $log
                fee=$(cardano-cli transaction calculate-min-fee \
                    --tx-body-file tx.tmp \
                    --tx-in-count 1 \
                    --tx-out-count 3 \
                    --mainnet \
                    --witness-count 2 \
                    --byron-witness-count 0 \
                    --protocol-params-file protocol.json | awk '{ print $1 }') &gt;&gt; $log
            fee=${fee%&quot; Lovelace&quot;}
                amountToSendUser=$((${amountToSendUser}-${fee}))
                cardano-cli transaction build-raw \
                    --fee ${fee} \
                    ${tx_in} \
                    --tx-out ${in_addr}+${amountToSendUser}+&quot;1 $POLICYID.${tokenname}&quot; \
                    --tx-out ${profitAddr}+${amountToSendProfit} \
            --tx-out ${donationAddr}+${amountToDonate} \
            --mint=&quot;1 $POLICYID.${tokenname}&quot; \
                    --minting-script-file $scriptPath \
            --metadata-json-file ${metadatajson} \
                    --invalid-hereafter $(( ${currentSlot} + 10000)) \
                    --out-file tx.raw &gt;&gt; $log


echo 'amount to send user minusz fee:' $amountToSendUser
echo &quot;Fee:&quot;$fee

echo &quot;NFT küldés aláírás&quot; &gt;&gt; $log
                cardano-cli transaction sign \
                  --signing-key-file $paymentSignKeyPath \
               --signing-key-file $policySignKeyPath \
                  --tx-body-file tx.raw \
                  --out-file tx.signed \
                  --mainnet &gt;&gt; $log
echo &quot;NFT küldés submit&quot; &gt;&gt; $log
              cardano-cli transaction submit --tx-file tx.signed --mainnet &gt;&gt; $log
              
              
 
echo &quot;============= mintelés vége =============&quot; 
echo
            fi
            rm tx.*
        echo &quot;====bejegyzés vége====&quot; &gt;&gt; $log
        fi
     done &lt; balance.out

  wait
done
</code></pre>
<p>I hope it help,
cheers!</p>

CC BY-SA 4.0
2021-12-16T21:59:31.153Z
2021-12-17T08:05:45.837Z
2021-12-17T08:05:45.837Z
Szabolcs Eitzenberger
<p>We open-sourced one of these on GitHub here: <a href="https://github.com/thaddeusdiamond/cardano-nft-vending-machine" rel="nofollow noreferrer">https://github.com/thaddeusdiamond/cardano-nft-vending-machine</a></p>
<p>It's written in Python but requires no <code>cardano-node</code> (only <code>cardano-cli</code> and a <a href="https://blockfrost.io/" rel="nofollow noreferrer">Blockfrost</a> key).  There's also a sample script in <code>main.py</code> to show how to use it (or just invoke that script from CLI). Our PFP mint was done on my Macbook Pro.  Hopefully that helps!</p>

CC BY-SA 4.0
2022-06-16T18:05:01.627Z
2022-06-16T18:05:01.627Z
iOddestHumanDad
<p>You may be interested in this MIT licensed Cardano NFT vending machine bash script available on GitHub. It hasn't been updated in 6 months, but you can fork it from the <a href="https://github.com/ftpmorph/Cardano-NFT-Auto-Mint/tree/main" rel="nofollow noreferrer">ftpmorph repo</a> and audit to see if it does what you need.</p>

CC BY-SA 4.0
2021-12-14T12:08:30.840Z
2021-12-14T12:08:30.840Z
DeCentN2Madness
<p>Many projects either use a vending-machine service like <a href="https://www.nft-maker.io/pro" rel="nofollow noreferrer">NFT-Maker PRO</a> or <a href="https://buffybot.io/" rel="nofollow noreferrer">buffybot</a> or have built their own vending-machine scripts.</p>
<p>Is there any open-source vending machine script that can be connected to a cardano-node to mint NFTs when a UTxO arrives on a specific address?</p>

<nft><minting>
Is there an open source vending-machine script for NFT minting?
# Is there an open source vending-machine script for NFT minting?

(Asked by: username_0 on 2021-12-14)

Many projects either use a vending-machine service like [NFT-Maker PRO](https://www.nft-maker.io/pro) or [buffybot](https://buffybot.io/) or have built their own vending-machine scripts.

Is there any open-source vending machine script that can be connected to a cardano-node to mint NFTs when a UTxO arrives on a specific address?

**Tags:** nft, minting


---

## 3 answers

### Answer by username_1 on 2021-12-16. Score: 5 | Accepted answer

Here is my version of a vending machine:

* Upgraded with metadata creation
* "Completed" counter backed up in a `*.txt` file so if the machine restarts the script does not start minting from the beginning
* You should create your own Blockfrost project
* Picture uploaded to Infura
* Sorry for the Hungarian comments

```
#!/bin/bash

cd /opt/cardano/cnode/priv/wallet/cpostal
looping=1
log=log_file.txt
txs=txs.txt
numberCompleted=`cat numbercompleted.txt`

# ez lesz raymond címe, most a sajátom
donationAddr=`cat rajmond_yoroi_address`

# erre a címre várjuk a befizetéseket
paymentAddr=`cat payment.addr`

paymentSignKeyPath=./payment.skey
policySignKeyPath=./policy/policy.skey
scriptPath=./policy/policy.ada.2.120.script

POLICYID=$(cardano-cli transaction policyid --script-file $scriptPath) > policy/policyID

# ez az én yoroi-s stake címem
profitAddr=`cat yoroi_address`

echo "" >> $txs
echo "" >> $log
echo "Log File" >> $log
echo "-------------------" >> $log
echo "Process started at: $(date +%T)" >> $log
echo "-------------------" >> $log
echo "" >> $log

arcedula=50000000 # ennyit kérünk ezért az NFT-ért

trap 'looping=0;wait' INT TERM

while (( looping )); do
    echo ================================================================================== 
    cardano-cli query utxo --address $paymentAddr --mainnet > fullUtxo.out
    tail -n +3 fullUtxo.out | sort -k3 -nr > balance.out
    cat balance.out
    while read -r utxo; do
        sleep 5s
    #echo "UTXO detected" >> $log
        tx_hash=$(awk '{ print $1 }' <<< "${utxo}")
    echo "TXHash: "$tx_hash
    idx=$(awk '{ print $2 }' <<< "${utxo}")
        utxo_balance=$(awk '{ print $3 }' <<< "${utxo}")
    tx_in="--tx-in ${tx_hash}#${idx}"
    if [ $( grep -q "${tx_hash}" "$txs" && echo $? ) ];
    then
       # echo "Previous tx" >> $log
        echo "nem trténr  utalás"
        break
    else
        echo ${tx_hash} >> $txs
        echo "utalás trtént"
        echo "A küldő cím: " >> $log
        echo $(curl -H 'project_id: *********' \
                https://cardano-mainnet.blockfrost.io/api/v0/txs/${tx_hash}/utxos \
                | jq '.inputs' | jq '.[0]' | jq '.address') >> $log
            in_addr=$(curl -H 'project_id: *********' \
                https://cardano-mainnet.blockfrost.io/api/v0/txs/${tx_hash}/utxos \
                | jq '.inputs' | jq '.[0]' | jq '.address' | sed 's/^.//;s/.$//')
            echo "Address: ${in_addr}"
        echo "utalás értéke: "$utxo_balance
            if [ ${utxo_balance} != $arcedula ] || [ $(ls "/opt/cardano/cnode/stamps/s1/" | wc -l) == 0 ];
            then
            echo ${utxo_balance} >> $log
            echo "Refund Initiated..." >> $log
        echo `date` >> $log
        echo "Pénzvisszafizetés"
            currentSlot=$(cardano-cli query tip --mainnet | jq -r '.slot')
                cardano-cli transaction build-raw \
                    --fee 0 \
                    ${tx_in} \
                    --tx-out ${in_addr}+${utxo_balance} \
                    --invalid-hereafter $(( ${currentSlot} + 1000)) \
                    --out-file tx.tmp >> $log
                fee=$(cardano-cli transaction calculate-min-fee \
                    --tx-body-file tx.tmp \
                    --tx-in-count 1 \
                    --tx-out-count 1 \
                    --mainnet \
                    --witness-count 1 \
                    --byron-witness-count 0 \
                    --protocol-params-file protocol.json | awk '{ print $1 }') >> $log
                echo "Fee:"$fee >> $log
        fee=${fee%" Lovelace"}
                amountToSendUser=$(( ${utxo_balance}-${fee} ))
            echo ${amountToSendUser} >> $log
                cardano-cli transaction build-raw \
                    --fee ${fee} \
                     ${tx_in} \
                    --tx-out ${in_addr}+${amountToSendUser} \
                    --invalid-hereafter $(( ${currentSlot} + 1000)) \
                    --out-file tx.raw >> $log
echo "Pénz visszküldés submit" >> $log
         cardano-cli transaction sign \
                    --signing-key-file $paymentSignKeyPath \
                    --tx-body-file tx.raw \
                    --out-file tx.signed \
                    --mainnet >> $log
echo "Pénz visszaküldés submit" >> $log
                cardano-cli transaction submit --tx-file tx.signed --mainnet >> $log

# *******************************************NFT MINT *************************************
            else
            echo ========================================================= >> $log
        echo ======================== ÚJ NFT ========================= >> $log
        echo ========================================================= >> $log
        echo "Sending NFT..." >> $log
        echo `date` >> $log
            numberCompleted=$(( numberCompleted+1 ))
        echo "Token száma: $numberCompleted" >> $log
        echo $numberCompleted > numbercompleted.txt
#           POLICYID=$(cardano-cli transaction policyid --script-file $scriptPath) ezt beépítetem az elejére, de ha minden nFT küln policit kapna akkor ide kell

#*********************** metadata gerebléyzés *****************

  tokenname=`cat /opt/cardano/cnode/stamps/s1/Stamp_Ada_$numberCompleted.png.ipfs.txt | awk -F'"' {'print $4 '} | awk -F'.' {'print $1'} | sed -e 's/_//g'`
tokennameID=`cat /opt/cardano/cnode/stamps/s1/Stamp_Ada_$numberCompleted.png.ipfs.txt | awk -F'"' {'print $4 '} | awk -F'_' {'print $3'} | awk -F'.' {'print $1'} | sed 's/^0*//'`
  ipfs_hash=`cat /opt/cardano/cnode/stamps/s1/Stamp_Ada_$numberCompleted.png.ipfs.txt | awk -F'"' {'print $8 '}`
echo "tokenname:" $tokenname >> $log
echo "tokennameID:" $tokennameID >> $log
echo "Poolpm név:"$POLICYID"."$tokenname >> $log

echo "{">> $tokenname"metadata.json"
echo "      \"721\": { ">> $tokenname"metadata.json"
echo "           \"$POLICYID\": { ">> $tokenname"metadata.json"
echo "              \"$tokenname\": { ">> $tokenname"metadata.json"
echo "                \"description\": \"CARDANO POSTAL SERVICE STAMP\"," >> $tokenname"metadata.json"
echo "                \"name\": \"Ada Lovelace stamp $tokennameID\"," >> $tokenname"metadata.json" 
echo "                \"id\": $tokennameID, ">> $tokenname"metadata.json"
echo "                \"creator\": \"Ildiko Kovacs\"," >> $tokenname"metadata.json"
echo "                \"image\": \"ipfs://$ipfs_hash\"," >> $tokenname"metadata.json"
echo "                \"url\": \"https://cardanopostalservice.io\"" >> $tokenname"metadata.json"
echo "              }" >> $tokenname"metadata.json"
echo "            }">> $tokenname"metadata.json"
echo "        }" >> $tokenname"metadata.json"
echo "}">> $tokenname"metadata.json"
metadatajson="${tokenname}metadata.json"

echo ================
echo "mintelési adatok"
echo "tokenname:" $tokenname 
echo "tokennameID:" $tokennameID 
#cat $metadatajson

# **************** Bevétel szétdobása ********************

       amountToSendUser=1800000
((amountToDonate = arcedula * 5 / 100)) # ez magy rajmondnak
    
((amountToSendProfit = arcedula - amountToDonate - amountToSendUser))  # ez megy szabinak

echo 'vegleges szamok:'
echo 'arcedula:' $arcedula
echo 'amount to send profit:' $amountToSendProfit
echo 'amount to send user:' $amountToSendUser
echo 'amount to donate:' $amountToDonate

                currentSlot=$(cardano-cli query tip --mainnet | jq -r '.slot')
                cardano-cli transaction build-raw \
                    --fee 0 \
                    ${tx_in} \
                    --tx-out ${in_addr}+${amountToSendUser}+"1 $POLICYID.${tokenname}" \
                    --tx-out ${profitAddr}+${amountToSendProfit} \
            --tx-out ${donationAddr}+${amountToDonate} \
            --mint="1 $POLICYID.${tokenname}" \
            --minting-script-file $scriptPath \
            --metadata-json-file ${metadatajson} \
                    --invalid-hereafter $(( ${currentSlot} + 10000)) \
                    --out-file tx.tmp >> $log
                fee=$(cardano-cli transaction calculate-min-fee \
                    --tx-body-file tx.tmp \
                    --tx-in-count 1 \
                    --tx-out-count 3 \
                    --mainnet \
                    --witness-count 2 \
                    --byron-witness-count 0 \
                    --protocol-params-file protocol.json | awk '{ print $1 }') >> $log
            fee=${fee%" Lovelace"}
                amountToSendUser=$((${amountToSendUser}-${fee}))
                cardano-cli transaction build-raw \
                    --fee ${fee} \
                    ${tx_in} \
                    --tx-out ${in_addr}+${amountToSendUser}+"1 $POLICYID.${tokenname}" \
                    --tx-out ${profitAddr}+${amountToSendProfit} \
            --tx-out ${donationAddr}+${amountToDonate} \
            --mint="1 $POLICYID.${tokenname}" \
                    --minting-script-file $scriptPath \
            --metadata-json-file ${metadatajson} \
                    --invalid-hereafter $(( ${currentSlot} + 10000)) \
                    --out-file tx.raw >> $log

echo 'amount to send user minusz fee:' $amountToSendUser
echo "Fee:"$fee

echo "NFT küldés aláírás" >> $log
                cardano-cli transaction sign \
                  --signing-key-file $paymentSignKeyPath \
               --signing-key-file $policySignKeyPath \
                  --tx-body-file tx.raw \
                  --out-file tx.signed \
                  --mainnet >> $log
echo "NFT küldés submit" >> $log
              cardano-cli transaction submit --tx-file tx.signed --mainnet >> $log
              
              
 
echo "============= mintelés vége =============" 
echo
            fi
            rm tx.*
        echo "====bejegyzés vége====" >> $log
        fi
     done < balance.out

  wait
done

```

I hope it help,
cheers!


---

### Answer by username_2 on 2022-06-16. Score: 2

We open-sourced one of these on GitHub here: <https://github.com/thaddeusdiamond/cardano-nft-vending-machine>

It's written in Python but requires no `cardano-node` (only `cardano-cli` and a [Blockfrost](https://blockfrost.io/) key). There's also a sample script in `main.py` to show how to use it (or just invoke that script from CLI). Our PFP mint was done on my Macbook Pro. Hopefully that helps!


---

### Answer by username_3 on 2021-12-14. Score: 2

You may be interested in this MIT licensed Cardano NFT vending machine bash script available on GitHub. It hasn't been updated in 6 months, but you can fork it from the [ftpmorph repo](https://github.com/ftpmorph/Cardano-NFT-Auto-Mint/tree/main) and audit to see if it does what you need.


---

