diff --git a/docs/formatting.md b/docs/formatting.md
index 75f32f6a..1e695bf2 100644
--- a/docs/formatting.md
+++ b/docs/formatting.md
@@ -272,6 +272,12 @@ Replacement field names that are available in all format strings.
{_now:%Y-%m} |
2022-08 |
+
+ _nul |
+ Universal null value |
+ {date|_nul:%Y-%m} |
+ None |
+
_lit |
String literals |
diff --git a/gallery_dl/formatter.py b/gallery_dl/formatter.py
index f197e5db..b50bd643 100644
--- a/gallery_dl/formatter.py
+++ b/gallery_dl/formatter.py
@@ -476,6 +476,7 @@ _GLOBALS = {
"_env": lambda: os.environ,
"_lit": lambda: _literal,
"_now": datetime.datetime.now,
+ "_nul": lambda: util.NONE,
}
_CONVERSIONS = {
"l": str.lower,
diff --git a/test/test_formatter.py b/test/test_formatter.py
index 75324fb9..38c22ab9 100644
--- a/test/test_formatter.py
+++ b/test/test_formatter.py
@@ -351,6 +351,14 @@ class TestFormatter(unittest.TestCase):
self.assertRegex(out1, r"^\d{4}-\d\d-\d\d \d\d:\d\d:\d\d(\.\d+)?$")
self.assertNotEqual(out1, out2)
+ def test_globals_nul(self):
+ value = "None"
+
+ self._run_test("{_nul}" , value)
+ self._run_test("{_nul[key]}" , value)
+ self._run_test("{z|_nul}" , value)
+ self._run_test("{z|_nul:%Y%m%s}", value)
+
def test_literals(self):
value = "foo"