Complete reference for all available parameters in BBDrop’s External Apps hooks system.
Ext Fields (populated by external apps):
Custom Fields (user-editable):
Triggered when a gallery is added to the queue.
Available parameters:
%N, %T, %p, %C, %s, %t, %e1-%e4, %c1-%c4
Example command:
python notify.py "Added: %N (%C images, %s bytes)"
Triggered when a gallery upload begins.
Available parameters:
%N, %T, %p, %C, %s, %t, %e1-%e4, %c1-%c4
Example command:
python logger.py --event start --gallery "%N" --path "%p"
Triggered when a gallery upload finishes successfully.
Available parameters:
%N, %T, %p, %C, %s, %t, %g, %j, %b, %z, %e1-%e4, %c1-%c4
Example command:
python multi_host_uploader.py gofile "%z" --metadata "%N (%s bytes)"
python uploader.py --file "%z" --name "%N" --size "%s" --template "%t"
python process.py "%p" --large-mode --size %s --quality high
# First hook populates ext1 with download URL
python multi_host_uploader.py gofile "%z"
# Second hook can read ext1 and add more data
python metadata_sync.py --url "%e1" --gallery "%N" --id "%g"
python workflow.py \
--name "%N" \
--path "%p" \
--count %C \
--size %s \
--template "%t" \
--gallery-id "%g" \
--json "%j" \
--bbcode "%b" \
--ext1 "%e1" \
--custom1 "%c1"
Multi-character parameters (%e1, %c1, etc.) are processed using longest-match-first substitution:
# Variables are sorted by length (descending) before substitution
# This prevents %e1 from being partially matched as %e + "1"
Order: %e1, %e2, %c1, %c2 ... %N, %T, %p, %C, %s, %t, %g
python script.py "%e1" # Safe even if e1 is empty
python script.py %e1 # May cause parsing errors if empty
Always quote paths to handle spaces:
python uploader.py "%p" # Correct
python uploader.py %p # Wrong (breaks with spaces)
{
"url": "https://example.com/file",
"file_id": "abc123",
"status": "success"
}
Download: #ext1#
File ID: #ext2#
Status: #ext3#
# Completed hook command:
python multi_host_uploader.py gofile "%z" && \
python backup.py --source "%p" --metadata "%N|%s|%t"
Result:
# Use size parameter to choose upload destination:
python smart_uploader.py "%z" --size %s --auto-select-host
Logic:
1GB -> pCloud (requires account)
# Different processing based on template:
python processor.py "%p" --template "%t" --optimize
Behavior:
When using %z parameter, BBDrop automatically:
Performance:
multi_host_uploader.py for 44-host supportup3_windows.py for K2S integrationsrc/processing/hooks_executor.py for implementationProblem: Parameters not substituted
# Wrong - no quotes
python script.py %N
# Right - with quotes
python script.py "%N"
Problem: Multi-char variable conflict
# If you define both %e and %e1, longest match wins
# %e1 is processed first, then %e
# This is handled automatically
Problem: Empty ext/custom fields
# Fields may be empty - always quote them
python script.py "%e1" "%c1" # Safe