diff --git a/.ocauto/deploy b/.ocauto/deploy index 0679efc..2d4c6c2 100755 --- a/.ocauto/deploy +++ b/.ocauto/deploy @@ -39,7 +39,10 @@ if [ "$release_sha" = "rollback" ]; then sudo cp '$target/nginx.conf' '$live_dir/nginx.conf' sudo cp '$target/compose.yml' '$live_dir/compose.yml' sudo cp '$target/compose.vps.yml' '$live_dir/compose.vps.yml' - sudo -n -u denny bash -c \"cd '$live_dir' && docker compose -f compose.yml -f compose.vps.yml up -d --remove-orphans\" + # --force-recreate for the same reason as in the forward path: the site + # tree inode changes, so a merely running container would keep the deleted + # directory mounted and serve an empty root. + sudo -n -u denny bash -c \"cd '$live_dir' && docker compose -f compose.yml -f compose.vps.yml up -d --force-recreate --remove-orphans\" else echo '[deploy] initial-state snapshot: removing the desfoto stack again' if sudo test -d '$live_dir'; then @@ -98,12 +101,19 @@ sudo chown -R denny:denny "$LIVE_DIR" sudo rm -f "$archive" printf '%s\n' "$REMOTE_SHA" | sudo tee "$LIVE_DIR/RELEASE" >/dev/null -# 3. Start or update the stack. The live directory belongs to denny and the SSH -# login cannot traverse /home/denny, so the directory change and the compose -# command run together in one shell under the owning identity. -sudo -n -u denny bash -c "cd '$LIVE_DIR' && docker compose -f compose.yml -f compose.vps.yml up -d --remove-orphans" +# 3. Start or update the stack. --force-recreate is deliberate: step 2 replaces +# the site directory (new inode) and rewrites nginx.conf, and a container that +# is merely "running" keeps the bind mount to the deleted directory and then +# serves an empty document root (every request 404) while Compose reports no +# change. Recreating costs a moment of 502s behind Traefik and guarantees that +# a fresh container binds the new tree and reads the new config. The live +# directory belongs to denny and the SSH login cannot traverse /home/denny, so +# the directory change and the compose command run together in one shell under +# the owning identity. +sudo -n -u denny bash -c "cd '$LIVE_DIR' && docker compose -f compose.yml -f compose.vps.yml up -d --force-recreate --remove-orphans" -# 4. Wait for the container health check. +# 4. Wait for the container health check. The healthcheck requests "/" from +# inside the container, so an empty document root cannot report healthy. for _ in $(seq 1 30); do status="$(sudo docker inspect --format '{{if .State.Health}}{{.State.Health.Status}}{{else}}{{.State.Status}}{{end}}' desfoto-web-1 2>/dev/null || echo missing)" [ "$status" = "healthy" ] && break @@ -117,6 +127,15 @@ if [ "$status" != "healthy" ]; then exit 1 fi +# 4b. Content check, not process check: a stale bind mount served 404 for every +# path while Compose still reported the container healthy. Ask the container +# itself for the homepage and fail the deploy if it is not served. +if ! sudo docker exec desfoto-web-1 wget -q --spider http://127.0.0.1/; then + echo "[deploy] ERROR: desfoto-web-1 does not serve the release at / (empty mount?)" >&2 + sudo docker logs --tail 40 desfoto-web-1 >&2 || true + exit 1 +fi + # 5. Remove the obsolete desfoto.de redirect from the shared stack project. # The new stack already owns desfoto.de through a higher Traefik priority, # this only deletes the now-dead labels so Traefik no longer advertises them. diff --git a/.ocauto/verify b/.ocauto/verify index 8a92bf2..7812a70 100755 --- a/.ocauto/verify +++ b/.ocauto/verify @@ -12,7 +12,13 @@ cd "$(dirname "$0")/.." root="$(pwd)" release_sha="${1:-unknown}" remote="${DESFOTO_REMOTE:-prod-main}" -base="https://desfoto.de" +# DESFOTO_BASE lets the hook be dry-run against a local container +# (DESFOTO_BASE=http://127.0.0.1:18430 .ocauto/verify unknown); the +# domain-specific sections (deployed tree, canonical host, neighbours, TLS) +# only run against the real production origin. +base="${DESFOTO_BASE:-https://desfoto.de}" +live=0 +if [ "$base" = "https://desfoto.de" ]; then live=1; fi failures=0 pass() { printf ' ok %s\n' "$1"; } @@ -44,8 +50,29 @@ check_header() { fi } +check_redirect() { + local url="$1" want="$2" got target + got="$(curl -sS -o /dev/null -w '%{http_code}' --max-time 30 "$url" || echo 000)" + target="$(curl -sS -o /dev/null -w '%{redirect_url}' --max-time 30 "$url" || true)" + if [ "$got" = "301" ] && [ "$target" = "$want" ]; then + pass "$url -> 301 $want" + else + fail "$url -> $got ${target:-} (want 301 $want)" + fi +} + +check_not_contains() { + local url="$1" needle="$2" body + body="$(curl -sS --max-time 30 "$url" || true)" + if printf '%s' "$body" | grep -qF -- "$needle"; then + fail "$url still contains '$needle'" + else + pass "$url no longer contains '$needle'" + fi +} + printf '\n== release identity\n' -if [ "$release_sha" != "unknown" ] && git -C "$root" rev-parse --verify --quiet "$release_sha" >/dev/null; then +if [ "$live" = 1 ] && [ "$release_sha" != "unknown" ] && git -C "$root" rev-parse --verify --quiet "$release_sha" >/dev/null; then local_hash="$(cd "$root/site" && find . -type f ! -name sitemap.xml ! -path './.well-known/*' -print0 | sort -z | xargs -0 sha256sum | sha256sum | cut -d' ' -f1)" remote_hash="$(ssh "$remote" "sudo sh -c 'cd /home/denny/stacks/desfoto/site && find . -type f ! -name sitemap.xml ! -path ./.well-known/\* -print0 | sort -z | xargs -0 sha256sum | sha256sum'" | cut -d' ' -f1)" @@ -63,12 +90,18 @@ if [ "$release_sha" != "unknown" ] && git -C "$root" rev-parse --verify --quiet fi printf '\n== routes\n' -for route in / /fotografie/ /businessfotografie/ /portrait-und-model/ /familien-und-paare/ \ +for route in / /shootings/ /businessfotografie/ /portrait-und-model/ /familien-und-paare/ \ /minishootings/ /video/ /social-media/ /projekte/ /ueber/ /kontakt/ /impressum/ /datenschutz/; do check_status "$base$route" 200 done +# The retired photo URL must keep working: it is the umbrella page now. +check_redirect "$base/fotografie" "$base/shootings/" +check_redirect "$base/fotografie/" "$base/shootings/" +check_redirect "$base/fotografie.html" "$base/shootings/" + printf '\n== canonical host and redirects\n' +if [ "$live" = 1 ]; then www_status="$(curl -sS -o /dev/null -w '%{http_code}' --max-time 30 https://www.desfoto.de/ || echo 000)" www_target="$(curl -sS -o /dev/null -w '%{redirect_url}' --max-time 30 https://www.desfoto.de/ || true)" if [ "$www_status" = "301" ] && [ "$www_target" = "https://desfoto.de/" ]; then @@ -81,15 +114,25 @@ case "$http_target" in https://desfoto.de/*) pass "http://desfoto.de/ -> $http_target" ;; *) fail "http://desfoto.de/ redirects to '$http_target'" ;; esac +fi printf '\n== content\n' -check_contains "$base/" "Bilder und Filme, die nicht beliebig aussehen" +check_contains "$base/" 'href="/shootings/"' +check_contains "$base/" 'href="/video/"' +check_contains "$base/" "Mobiles Studio" +check_contains "$base/" "Studio Neumünster" +check_not_contains "$base/" 'href="/fotografie/' +check_contains "$base/shootings/" "Autarke Blitzanlage" +check_contains "$base/shootings/" "Minishootings" check_contains "$base/impressum/" "§ 5 DDG" check_contains "$base/impressum/" "DE462149560" check_contains "$base/datenschutz/" "keine Zugriffsprotokolle" check_contains "$base/datenschutz/" "youtube-nocookie.com" check_contains "$base/video/" "NWWFTf7l8g0" -check_contains "$base/sitemap.xml" "https://desfoto.de/video/" +check_contains "$base/" "https://www.dennyschulz.de/" +check_contains "$base/" "https://dennyapp.de/" +check_contains "$base/sitemap.xml" "https://desfoto.de/shootings/" +check_not_contains "$base/sitemap.xml" "https://desfoto.de/fotografie/" printf '\n== error handling and metadata\n' check_status "$base/diese-seite-gibt-es-nicht/" 404 @@ -98,11 +141,22 @@ check_status "$base/.well-known/security.txt" 200 check_status "$base/robots.txt" 200 printf '\n== assets\n' -check_status "$base/assets/img/hero-studio-1200.webp" 200 +check_status "$base/assets/img/logo-160.png" 200 check_status "$base/assets/img/favicon-32.png" 200 +check_status "$base/assets/img/og-shootings.jpg" 200 check_status "$base/assets/site.css" 200 check_status "$base/assets/fonts/fraunces-latin.woff2" 200 -check_status "$base/assets/img/og-desfoto.jpg" 200 +# The portfolio expansion ships the operator's own public work... +check_status "$base/assets/img/music-dreadlocks-1200.webp" 200 +check_status "$base/assets/img/business-hotel-window-1200.webp" 200 +check_status "$base/assets/img/couple-park-1200.webp" 200 +check_status "$base/assets/img/editorial-leap-1200.webp" 200 +# ...and the wedding pictures showing the guests stay removed. +check_status "$base/assets/img/group-feier-1200.webp" 404 +check_status "$base/assets/img/group-outdoor-1200.webp" 404 +check_status "$base/assets/img/group-posiert-1200.webp" 404 +check_contains "$base/projekte/" "music-dreadlocks-1200.webp" +check_contains "$base/familien-und-paare/" "couple-park-1200.webp" printf '\n== privacy promises and headers\n' check_header "$base/" "Strict-Transport-Security" @@ -116,12 +170,14 @@ else fi printf '\n== neighbouring sites untouched\n' +if [ "$live" = 1 ]; then check_status "https://www.dennyschulz.de/" 200 check_contains "https://www.dennyschulz.de/impressum" "Denny Schulz" check_status "https://dennyapp.de/" 200 +fi printf '\n== TLS\n' -if command -v openssl >/dev/null 2>&1; then +if [ "$live" = 1 ] && command -v openssl >/dev/null 2>&1; then if echo | openssl s_client -servername desfoto.de -connect desfoto.de:443 2>/dev/null | openssl x509 -noout -checkend 604800 -subject 2>/dev/null; then pass "certificate for desfoto.de is valid for at least 7 more days" diff --git a/AGENTS.md b/AGENTS.md index 87b534d..1e2a8c0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -90,3 +90,10 @@ and removes the obsolete `desfoto.de → dennyschulz.de` labels from `/srv/stack `.ocauto/verify ` proves the live site matches the release. Details, including rollback, are in `docs/deployment.md`. Traefik is shared infrastructure: route through labels, never restart or recreate the proxy. + +The deploy replaces `site/` (new inode) and rewrites `nginx.conf`, so it runs +`docker compose up -d --force-recreate`: a container that is merely "running" keeps +the deleted directory bind-mounted and then serves an empty document root — every +path 404, while Compose reports no change and the stale health status still says +`healthy`. The recreate is followed by an explicit in-container request for `/`, and +`tests/test_site.py` guards the flag. Never remove either check. diff --git a/site/assets/img/band-extinct-group-1200.webp b/site/assets/img/band-extinct-group-1200.webp new file mode 100644 index 0000000..200e40f Binary files /dev/null and b/site/assets/img/band-extinct-group-1200.webp differ diff --git a/site/assets/img/band-extinct-group-1600.webp b/site/assets/img/band-extinct-group-1600.webp new file mode 100644 index 0000000..69be862 Binary files /dev/null and b/site/assets/img/band-extinct-group-1600.webp differ diff --git a/site/assets/img/band-extinct-group-480.webp b/site/assets/img/band-extinct-group-480.webp new file mode 100644 index 0000000..b98500a Binary files /dev/null and b/site/assets/img/band-extinct-group-480.webp differ diff --git a/site/assets/img/band-extinct-group-768.webp b/site/assets/img/band-extinct-group-768.webp new file mode 100644 index 0000000..91ca14f Binary files /dev/null and b/site/assets/img/band-extinct-group-768.webp differ diff --git a/site/assets/img/band-extinct-guitar-1200.webp b/site/assets/img/band-extinct-guitar-1200.webp new file mode 100644 index 0000000..2ce3afd Binary files /dev/null and b/site/assets/img/band-extinct-guitar-1200.webp differ diff --git a/site/assets/img/band-extinct-guitar-1600.webp b/site/assets/img/band-extinct-guitar-1600.webp new file mode 100644 index 0000000..dc59be0 Binary files /dev/null and b/site/assets/img/band-extinct-guitar-1600.webp differ diff --git a/site/assets/img/band-extinct-guitar-480.webp b/site/assets/img/band-extinct-guitar-480.webp new file mode 100644 index 0000000..4642eb4 Binary files /dev/null and b/site/assets/img/band-extinct-guitar-480.webp differ diff --git a/site/assets/img/band-extinct-guitar-768.webp b/site/assets/img/band-extinct-guitar-768.webp new file mode 100644 index 0000000..4809a3f Binary files /dev/null and b/site/assets/img/band-extinct-guitar-768.webp differ diff --git a/site/assets/img/business-hotel-laugh-1200.webp b/site/assets/img/business-hotel-laugh-1200.webp new file mode 100644 index 0000000..2849723 Binary files /dev/null and b/site/assets/img/business-hotel-laugh-1200.webp differ diff --git a/site/assets/img/business-hotel-laugh-1600.webp b/site/assets/img/business-hotel-laugh-1600.webp new file mode 100644 index 0000000..437e530 Binary files /dev/null and b/site/assets/img/business-hotel-laugh-1600.webp differ diff --git a/site/assets/img/business-hotel-laugh-480.webp b/site/assets/img/business-hotel-laugh-480.webp new file mode 100644 index 0000000..e4d9aec Binary files /dev/null and b/site/assets/img/business-hotel-laugh-480.webp differ diff --git a/site/assets/img/business-hotel-laugh-768.webp b/site/assets/img/business-hotel-laugh-768.webp new file mode 100644 index 0000000..a67abf2 Binary files /dev/null and b/site/assets/img/business-hotel-laugh-768.webp differ diff --git a/site/assets/img/business-hotel-orange-1200.webp b/site/assets/img/business-hotel-orange-1200.webp new file mode 100644 index 0000000..a9f991f Binary files /dev/null and b/site/assets/img/business-hotel-orange-1200.webp differ diff --git a/site/assets/img/business-hotel-orange-1600.webp b/site/assets/img/business-hotel-orange-1600.webp new file mode 100644 index 0000000..7380330 Binary files /dev/null and b/site/assets/img/business-hotel-orange-1600.webp differ diff --git a/site/assets/img/business-hotel-orange-480.webp b/site/assets/img/business-hotel-orange-480.webp new file mode 100644 index 0000000..0191e08 Binary files /dev/null and b/site/assets/img/business-hotel-orange-480.webp differ diff --git a/site/assets/img/business-hotel-orange-768.webp b/site/assets/img/business-hotel-orange-768.webp new file mode 100644 index 0000000..e67ad14 Binary files /dev/null and b/site/assets/img/business-hotel-orange-768.webp differ diff --git a/site/assets/img/business-hotel-tea-1200.webp b/site/assets/img/business-hotel-tea-1200.webp new file mode 100644 index 0000000..b3f7d5b Binary files /dev/null and b/site/assets/img/business-hotel-tea-1200.webp differ diff --git a/site/assets/img/business-hotel-tea-1600.webp b/site/assets/img/business-hotel-tea-1600.webp new file mode 100644 index 0000000..dfe562a Binary files /dev/null and b/site/assets/img/business-hotel-tea-1600.webp differ diff --git a/site/assets/img/business-hotel-tea-480.webp b/site/assets/img/business-hotel-tea-480.webp new file mode 100644 index 0000000..1acd31a Binary files /dev/null and b/site/assets/img/business-hotel-tea-480.webp differ diff --git a/site/assets/img/business-hotel-tea-768.webp b/site/assets/img/business-hotel-tea-768.webp new file mode 100644 index 0000000..e827fc3 Binary files /dev/null and b/site/assets/img/business-hotel-tea-768.webp differ diff --git a/site/assets/img/business-hotel-window-1200.webp b/site/assets/img/business-hotel-window-1200.webp new file mode 100644 index 0000000..4233cc5 Binary files /dev/null and b/site/assets/img/business-hotel-window-1200.webp differ diff --git a/site/assets/img/business-hotel-window-1600.webp b/site/assets/img/business-hotel-window-1600.webp new file mode 100644 index 0000000..8395665 Binary files /dev/null and b/site/assets/img/business-hotel-window-1600.webp differ diff --git a/site/assets/img/business-hotel-window-480.webp b/site/assets/img/business-hotel-window-480.webp new file mode 100644 index 0000000..3cf7533 Binary files /dev/null and b/site/assets/img/business-hotel-window-480.webp differ diff --git a/site/assets/img/business-hotel-window-768.webp b/site/assets/img/business-hotel-window-768.webp new file mode 100644 index 0000000..f2faa6a Binary files /dev/null and b/site/assets/img/business-hotel-window-768.webp differ diff --git a/site/assets/img/couple-backlight-kiss-1200.webp b/site/assets/img/couple-backlight-kiss-1200.webp new file mode 100644 index 0000000..61d751a Binary files /dev/null and b/site/assets/img/couple-backlight-kiss-1200.webp differ diff --git a/site/assets/img/couple-backlight-kiss-1600.webp b/site/assets/img/couple-backlight-kiss-1600.webp new file mode 100644 index 0000000..11cc459 Binary files /dev/null and b/site/assets/img/couple-backlight-kiss-1600.webp differ diff --git a/site/assets/img/couple-backlight-kiss-480.webp b/site/assets/img/couple-backlight-kiss-480.webp new file mode 100644 index 0000000..73d67e9 Binary files /dev/null and b/site/assets/img/couple-backlight-kiss-480.webp differ diff --git a/site/assets/img/couple-backlight-kiss-768.webp b/site/assets/img/couple-backlight-kiss-768.webp new file mode 100644 index 0000000..ea2fd6f Binary files /dev/null and b/site/assets/img/couple-backlight-kiss-768.webp differ diff --git a/site/assets/img/couple-forest-walk-1200.webp b/site/assets/img/couple-forest-walk-1200.webp new file mode 100644 index 0000000..ed44479 Binary files /dev/null and b/site/assets/img/couple-forest-walk-1200.webp differ diff --git a/site/assets/img/couple-forest-walk-1600.webp b/site/assets/img/couple-forest-walk-1600.webp new file mode 100644 index 0000000..8b49409 Binary files /dev/null and b/site/assets/img/couple-forest-walk-1600.webp differ diff --git a/site/assets/img/couple-forest-walk-480.webp b/site/assets/img/couple-forest-walk-480.webp new file mode 100644 index 0000000..e6fb4de Binary files /dev/null and b/site/assets/img/couple-forest-walk-480.webp differ diff --git a/site/assets/img/couple-forest-walk-768.webp b/site/assets/img/couple-forest-walk-768.webp new file mode 100644 index 0000000..3f9f6bd Binary files /dev/null and b/site/assets/img/couple-forest-walk-768.webp differ diff --git a/site/assets/img/couple-laugh-walk-1200.webp b/site/assets/img/couple-laugh-walk-1200.webp new file mode 100644 index 0000000..db35a0e Binary files /dev/null and b/site/assets/img/couple-laugh-walk-1200.webp differ diff --git a/site/assets/img/couple-laugh-walk-1600.webp b/site/assets/img/couple-laugh-walk-1600.webp new file mode 100644 index 0000000..f2044cf Binary files /dev/null and b/site/assets/img/couple-laugh-walk-1600.webp differ diff --git a/site/assets/img/couple-laugh-walk-480.webp b/site/assets/img/couple-laugh-walk-480.webp new file mode 100644 index 0000000..9a16a36 Binary files /dev/null and b/site/assets/img/couple-laugh-walk-480.webp differ diff --git a/site/assets/img/couple-laugh-walk-768.webp b/site/assets/img/couple-laugh-walk-768.webp new file mode 100644 index 0000000..f10b226 Binary files /dev/null and b/site/assets/img/couple-laugh-walk-768.webp differ diff --git a/site/assets/img/couple-park-1200.webp b/site/assets/img/couple-park-1200.webp new file mode 100644 index 0000000..cdb35fb Binary files /dev/null and b/site/assets/img/couple-park-1200.webp differ diff --git a/site/assets/img/couple-park-1600.webp b/site/assets/img/couple-park-1600.webp new file mode 100644 index 0000000..d3ddf58 Binary files /dev/null and b/site/assets/img/couple-park-1600.webp differ diff --git a/site/assets/img/couple-park-480.webp b/site/assets/img/couple-park-480.webp new file mode 100644 index 0000000..50053e5 Binary files /dev/null and b/site/assets/img/couple-park-480.webp differ diff --git a/site/assets/img/couple-park-768.webp b/site/assets/img/couple-park-768.webp new file mode 100644 index 0000000..debdb44 Binary files /dev/null and b/site/assets/img/couple-park-768.webp differ diff --git a/site/assets/img/couple-sun-silhouette-1200.webp b/site/assets/img/couple-sun-silhouette-1200.webp new file mode 100644 index 0000000..ea73ebe Binary files /dev/null and b/site/assets/img/couple-sun-silhouette-1200.webp differ diff --git a/site/assets/img/couple-sun-silhouette-1600.webp b/site/assets/img/couple-sun-silhouette-1600.webp new file mode 100644 index 0000000..93370d8 Binary files /dev/null and b/site/assets/img/couple-sun-silhouette-1600.webp differ diff --git a/site/assets/img/couple-sun-silhouette-480.webp b/site/assets/img/couple-sun-silhouette-480.webp new file mode 100644 index 0000000..e574594 Binary files /dev/null and b/site/assets/img/couple-sun-silhouette-480.webp differ diff --git a/site/assets/img/couple-sun-silhouette-768.webp b/site/assets/img/couple-sun-silhouette-768.webp new file mode 100644 index 0000000..7965723 Binary files /dev/null and b/site/assets/img/couple-sun-silhouette-768.webp differ diff --git a/site/assets/img/editorial-balance-1200.webp b/site/assets/img/editorial-balance-1200.webp new file mode 100644 index 0000000..07c390c Binary files /dev/null and b/site/assets/img/editorial-balance-1200.webp differ diff --git a/site/assets/img/editorial-balance-1600.webp b/site/assets/img/editorial-balance-1600.webp new file mode 100644 index 0000000..73d348e Binary files /dev/null and b/site/assets/img/editorial-balance-1600.webp differ diff --git a/site/assets/img/editorial-balance-480.webp b/site/assets/img/editorial-balance-480.webp new file mode 100644 index 0000000..53ec913 Binary files /dev/null and b/site/assets/img/editorial-balance-480.webp differ diff --git a/site/assets/img/editorial-balance-768.webp b/site/assets/img/editorial-balance-768.webp new file mode 100644 index 0000000..a2ee733 Binary files /dev/null and b/site/assets/img/editorial-balance-768.webp differ diff --git a/site/assets/img/editorial-leap-1200.webp b/site/assets/img/editorial-leap-1200.webp new file mode 100644 index 0000000..1f9e4ef Binary files /dev/null and b/site/assets/img/editorial-leap-1200.webp differ diff --git a/site/assets/img/editorial-leap-1600.webp b/site/assets/img/editorial-leap-1600.webp new file mode 100644 index 0000000..511d0bb Binary files /dev/null and b/site/assets/img/editorial-leap-1600.webp differ diff --git a/site/assets/img/editorial-leap-480.webp b/site/assets/img/editorial-leap-480.webp new file mode 100644 index 0000000..283042f Binary files /dev/null and b/site/assets/img/editorial-leap-480.webp differ diff --git a/site/assets/img/editorial-leap-768.webp b/site/assets/img/editorial-leap-768.webp new file mode 100644 index 0000000..29c3caa Binary files /dev/null and b/site/assets/img/editorial-leap-768.webp differ diff --git a/site/assets/img/editorial-studio-side-1200.webp b/site/assets/img/editorial-studio-side-1200.webp new file mode 100644 index 0000000..5a3d0ea Binary files /dev/null and b/site/assets/img/editorial-studio-side-1200.webp differ diff --git a/site/assets/img/editorial-studio-side-1600.webp b/site/assets/img/editorial-studio-side-1600.webp new file mode 100644 index 0000000..f238687 Binary files /dev/null and b/site/assets/img/editorial-studio-side-1600.webp differ diff --git a/site/assets/img/editorial-studio-side-480.webp b/site/assets/img/editorial-studio-side-480.webp new file mode 100644 index 0000000..9183729 Binary files /dev/null and b/site/assets/img/editorial-studio-side-480.webp differ diff --git a/site/assets/img/editorial-studio-side-768.webp b/site/assets/img/editorial-studio-side-768.webp new file mode 100644 index 0000000..a621896 Binary files /dev/null and b/site/assets/img/editorial-studio-side-768.webp differ diff --git a/site/assets/img/free-castle-lake-1200.webp b/site/assets/img/free-castle-lake-1200.webp new file mode 100644 index 0000000..e521735 Binary files /dev/null and b/site/assets/img/free-castle-lake-1200.webp differ diff --git a/site/assets/img/free-castle-lake-1600.webp b/site/assets/img/free-castle-lake-1600.webp new file mode 100644 index 0000000..3492ce3 Binary files /dev/null and b/site/assets/img/free-castle-lake-1600.webp differ diff --git a/site/assets/img/free-castle-lake-480.webp b/site/assets/img/free-castle-lake-480.webp new file mode 100644 index 0000000..415c4e4 Binary files /dev/null and b/site/assets/img/free-castle-lake-480.webp differ diff --git a/site/assets/img/free-castle-lake-768.webp b/site/assets/img/free-castle-lake-768.webp new file mode 100644 index 0000000..5ca0994 Binary files /dev/null and b/site/assets/img/free-castle-lake-768.webp differ diff --git a/site/assets/img/free-cat-light-1200.webp b/site/assets/img/free-cat-light-1200.webp new file mode 100644 index 0000000..95d5379 Binary files /dev/null and b/site/assets/img/free-cat-light-1200.webp differ diff --git a/site/assets/img/free-cat-light-1600.webp b/site/assets/img/free-cat-light-1600.webp new file mode 100644 index 0000000..c589866 Binary files /dev/null and b/site/assets/img/free-cat-light-1600.webp differ diff --git a/site/assets/img/free-cat-light-480.webp b/site/assets/img/free-cat-light-480.webp new file mode 100644 index 0000000..07abbc8 Binary files /dev/null and b/site/assets/img/free-cat-light-480.webp differ diff --git a/site/assets/img/free-cat-light-768.webp b/site/assets/img/free-cat-light-768.webp new file mode 100644 index 0000000..d7a4018 Binary files /dev/null and b/site/assets/img/free-cat-light-768.webp differ diff --git a/site/assets/img/free-cat-white-1200.webp b/site/assets/img/free-cat-white-1200.webp new file mode 100644 index 0000000..79657d4 Binary files /dev/null and b/site/assets/img/free-cat-white-1200.webp differ diff --git a/site/assets/img/free-cat-white-1600.webp b/site/assets/img/free-cat-white-1600.webp new file mode 100644 index 0000000..6e6be6d Binary files /dev/null and b/site/assets/img/free-cat-white-1600.webp differ diff --git a/site/assets/img/free-cat-white-480.webp b/site/assets/img/free-cat-white-480.webp new file mode 100644 index 0000000..0593000 Binary files /dev/null and b/site/assets/img/free-cat-white-480.webp differ diff --git a/site/assets/img/free-cat-white-768.webp b/site/assets/img/free-cat-white-768.webp new file mode 100644 index 0000000..a72f285 Binary files /dev/null and b/site/assets/img/free-cat-white-768.webp differ diff --git a/site/assets/img/free-dog-husky-1200.webp b/site/assets/img/free-dog-husky-1200.webp new file mode 100644 index 0000000..ad6b38a Binary files /dev/null and b/site/assets/img/free-dog-husky-1200.webp differ diff --git a/site/assets/img/free-dog-husky-1600.webp b/site/assets/img/free-dog-husky-1600.webp new file mode 100644 index 0000000..6cee291 Binary files /dev/null and b/site/assets/img/free-dog-husky-1600.webp differ diff --git a/site/assets/img/free-dog-husky-480.webp b/site/assets/img/free-dog-husky-480.webp new file mode 100644 index 0000000..e1b700c Binary files /dev/null and b/site/assets/img/free-dog-husky-480.webp differ diff --git a/site/assets/img/free-dog-husky-768.webp b/site/assets/img/free-dog-husky-768.webp new file mode 100644 index 0000000..2b56365 Binary files /dev/null and b/site/assets/img/free-dog-husky-768.webp differ diff --git a/site/assets/img/free-dogs-forest-1200.webp b/site/assets/img/free-dogs-forest-1200.webp new file mode 100644 index 0000000..195afba Binary files /dev/null and b/site/assets/img/free-dogs-forest-1200.webp differ diff --git a/site/assets/img/free-dogs-forest-1600.webp b/site/assets/img/free-dogs-forest-1600.webp new file mode 100644 index 0000000..3a1c174 Binary files /dev/null and b/site/assets/img/free-dogs-forest-1600.webp differ diff --git a/site/assets/img/free-dogs-forest-480.webp b/site/assets/img/free-dogs-forest-480.webp new file mode 100644 index 0000000..70d0e42 Binary files /dev/null and b/site/assets/img/free-dogs-forest-480.webp differ diff --git a/site/assets/img/free-dogs-forest-768.webp b/site/assets/img/free-dogs-forest-768.webp new file mode 100644 index 0000000..655f34b Binary files /dev/null and b/site/assets/img/free-dogs-forest-768.webp differ diff --git a/site/assets/img/free-sparrow-1200.webp b/site/assets/img/free-sparrow-1200.webp new file mode 100644 index 0000000..cc1b0b9 Binary files /dev/null and b/site/assets/img/free-sparrow-1200.webp differ diff --git a/site/assets/img/free-sparrow-1600.webp b/site/assets/img/free-sparrow-1600.webp new file mode 100644 index 0000000..d5064a5 Binary files /dev/null and b/site/assets/img/free-sparrow-1600.webp differ diff --git a/site/assets/img/free-sparrow-480.webp b/site/assets/img/free-sparrow-480.webp new file mode 100644 index 0000000..41bc36d Binary files /dev/null and b/site/assets/img/free-sparrow-480.webp differ diff --git a/site/assets/img/free-sparrow-768.webp b/site/assets/img/free-sparrow-768.webp new file mode 100644 index 0000000..5b0bc02 Binary files /dev/null and b/site/assets/img/free-sparrow-768.webp differ diff --git a/site/assets/img/free-swans-1200.webp b/site/assets/img/free-swans-1200.webp new file mode 100644 index 0000000..16898b3 Binary files /dev/null and b/site/assets/img/free-swans-1200.webp differ diff --git a/site/assets/img/free-swans-1600.webp b/site/assets/img/free-swans-1600.webp new file mode 100644 index 0000000..00a23a4 Binary files /dev/null and b/site/assets/img/free-swans-1600.webp differ diff --git a/site/assets/img/free-swans-480.webp b/site/assets/img/free-swans-480.webp new file mode 100644 index 0000000..d3d8bdf Binary files /dev/null and b/site/assets/img/free-swans-480.webp differ diff --git a/site/assets/img/free-swans-768.webp b/site/assets/img/free-swans-768.webp new file mode 100644 index 0000000..b159c0d Binary files /dev/null and b/site/assets/img/free-swans-768.webp differ diff --git a/site/assets/img/group-feier-1200.webp b/site/assets/img/group-feier-1200.webp deleted file mode 100644 index 005df1c..0000000 Binary files a/site/assets/img/group-feier-1200.webp and /dev/null differ diff --git a/site/assets/img/group-feier-1600.webp b/site/assets/img/group-feier-1600.webp deleted file mode 100644 index d77817c..0000000 Binary files a/site/assets/img/group-feier-1600.webp and /dev/null differ diff --git a/site/assets/img/group-feier-480.webp b/site/assets/img/group-feier-480.webp deleted file mode 100644 index 96bbf12..0000000 Binary files a/site/assets/img/group-feier-480.webp and /dev/null differ diff --git a/site/assets/img/group-feier-768.webp b/site/assets/img/group-feier-768.webp deleted file mode 100644 index dfa87cb..0000000 Binary files a/site/assets/img/group-feier-768.webp and /dev/null differ diff --git a/site/assets/img/group-outdoor-1200.webp b/site/assets/img/group-outdoor-1200.webp deleted file mode 100644 index 049ba95..0000000 Binary files a/site/assets/img/group-outdoor-1200.webp and /dev/null differ diff --git a/site/assets/img/group-outdoor-1600.webp b/site/assets/img/group-outdoor-1600.webp deleted file mode 100644 index 92d28a3..0000000 Binary files a/site/assets/img/group-outdoor-1600.webp and /dev/null differ diff --git a/site/assets/img/group-outdoor-480.webp b/site/assets/img/group-outdoor-480.webp deleted file mode 100644 index c20b6a0..0000000 Binary files a/site/assets/img/group-outdoor-480.webp and /dev/null differ diff --git a/site/assets/img/group-outdoor-768.webp b/site/assets/img/group-outdoor-768.webp deleted file mode 100644 index 95cb08b..0000000 Binary files a/site/assets/img/group-outdoor-768.webp and /dev/null differ diff --git a/site/assets/img/group-posiert-1200.webp b/site/assets/img/group-posiert-1200.webp deleted file mode 100644 index 2e0b86d..0000000 Binary files a/site/assets/img/group-posiert-1200.webp and /dev/null differ diff --git a/site/assets/img/group-posiert-1600.webp b/site/assets/img/group-posiert-1600.webp deleted file mode 100644 index 552bb45..0000000 Binary files a/site/assets/img/group-posiert-1600.webp and /dev/null differ diff --git a/site/assets/img/group-posiert-480.webp b/site/assets/img/group-posiert-480.webp deleted file mode 100644 index 474463e..0000000 Binary files a/site/assets/img/group-posiert-480.webp and /dev/null differ diff --git a/site/assets/img/group-posiert-768.webp b/site/assets/img/group-posiert-768.webp deleted file mode 100644 index c6396ef..0000000 Binary files a/site/assets/img/group-posiert-768.webp and /dev/null differ diff --git a/site/assets/img/music-banner-1200.webp b/site/assets/img/music-banner-1200.webp new file mode 100644 index 0000000..568a4cf Binary files /dev/null and b/site/assets/img/music-banner-1200.webp differ diff --git a/site/assets/img/music-banner-1600.webp b/site/assets/img/music-banner-1600.webp new file mode 100644 index 0000000..fb2ff39 Binary files /dev/null and b/site/assets/img/music-banner-1600.webp differ diff --git a/site/assets/img/music-banner-480.webp b/site/assets/img/music-banner-480.webp new file mode 100644 index 0000000..80907ff Binary files /dev/null and b/site/assets/img/music-banner-480.webp differ diff --git a/site/assets/img/music-banner-768.webp b/site/assets/img/music-banner-768.webp new file mode 100644 index 0000000..00724b4 Binary files /dev/null and b/site/assets/img/music-banner-768.webp differ diff --git a/site/assets/img/music-dreadlocks-1200.webp b/site/assets/img/music-dreadlocks-1200.webp new file mode 100644 index 0000000..33df173 Binary files /dev/null and b/site/assets/img/music-dreadlocks-1200.webp differ diff --git a/site/assets/img/music-dreadlocks-1600.webp b/site/assets/img/music-dreadlocks-1600.webp new file mode 100644 index 0000000..bd934fc Binary files /dev/null and b/site/assets/img/music-dreadlocks-1600.webp differ diff --git a/site/assets/img/music-dreadlocks-480.webp b/site/assets/img/music-dreadlocks-480.webp new file mode 100644 index 0000000..734e14d Binary files /dev/null and b/site/assets/img/music-dreadlocks-480.webp differ diff --git a/site/assets/img/music-dreadlocks-768.webp b/site/assets/img/music-dreadlocks-768.webp new file mode 100644 index 0000000..76cde84 Binary files /dev/null and b/site/assets/img/music-dreadlocks-768.webp differ diff --git a/site/assets/img/music-drummer-1200.webp b/site/assets/img/music-drummer-1200.webp new file mode 100644 index 0000000..a052feb Binary files /dev/null and b/site/assets/img/music-drummer-1200.webp differ diff --git a/site/assets/img/music-drummer-1600.webp b/site/assets/img/music-drummer-1600.webp new file mode 100644 index 0000000..b7214a8 Binary files /dev/null and b/site/assets/img/music-drummer-1600.webp differ diff --git a/site/assets/img/music-drummer-480.webp b/site/assets/img/music-drummer-480.webp new file mode 100644 index 0000000..c0bfe69 Binary files /dev/null and b/site/assets/img/music-drummer-480.webp differ diff --git a/site/assets/img/music-drummer-768.webp b/site/assets/img/music-drummer-768.webp new file mode 100644 index 0000000..646dcd9 Binary files /dev/null and b/site/assets/img/music-drummer-768.webp differ diff --git a/site/assets/img/music-horns-1200.webp b/site/assets/img/music-horns-1200.webp new file mode 100644 index 0000000..1936799 Binary files /dev/null and b/site/assets/img/music-horns-1200.webp differ diff --git a/site/assets/img/music-horns-1600.webp b/site/assets/img/music-horns-1600.webp new file mode 100644 index 0000000..ec61cfd Binary files /dev/null and b/site/assets/img/music-horns-1600.webp differ diff --git a/site/assets/img/music-horns-480.webp b/site/assets/img/music-horns-480.webp new file mode 100644 index 0000000..c8bf9ba Binary files /dev/null and b/site/assets/img/music-horns-480.webp differ diff --git a/site/assets/img/music-horns-768.webp b/site/assets/img/music-horns-768.webp new file mode 100644 index 0000000..354a0b1 Binary files /dev/null and b/site/assets/img/music-horns-768.webp differ diff --git a/site/assets/img/music-neck-1200.webp b/site/assets/img/music-neck-1200.webp new file mode 100644 index 0000000..4c55732 Binary files /dev/null and b/site/assets/img/music-neck-1200.webp differ diff --git a/site/assets/img/music-neck-1600.webp b/site/assets/img/music-neck-1600.webp new file mode 100644 index 0000000..d917bc1 Binary files /dev/null and b/site/assets/img/music-neck-1600.webp differ diff --git a/site/assets/img/music-neck-480.webp b/site/assets/img/music-neck-480.webp new file mode 100644 index 0000000..cde6619 Binary files /dev/null and b/site/assets/img/music-neck-480.webp differ diff --git a/site/assets/img/music-neck-768.webp b/site/assets/img/music-neck-768.webp new file mode 100644 index 0000000..0ef7622 Binary files /dev/null and b/site/assets/img/music-neck-768.webp differ diff --git a/site/assets/img/portrait-marina-snow-1200.webp b/site/assets/img/portrait-marina-snow-1200.webp new file mode 100644 index 0000000..fc7b904 Binary files /dev/null and b/site/assets/img/portrait-marina-snow-1200.webp differ diff --git a/site/assets/img/portrait-marina-snow-1600.webp b/site/assets/img/portrait-marina-snow-1600.webp new file mode 100644 index 0000000..099f264 Binary files /dev/null and b/site/assets/img/portrait-marina-snow-1600.webp differ diff --git a/site/assets/img/portrait-marina-snow-480.webp b/site/assets/img/portrait-marina-snow-480.webp new file mode 100644 index 0000000..04df370 Binary files /dev/null and b/site/assets/img/portrait-marina-snow-480.webp differ diff --git a/site/assets/img/portrait-marina-snow-768.webp b/site/assets/img/portrait-marina-snow-768.webp new file mode 100644 index 0000000..167cd40 Binary files /dev/null and b/site/assets/img/portrait-marina-snow-768.webp differ diff --git a/site/assets/img/portrait-marina-sunset-1200.webp b/site/assets/img/portrait-marina-sunset-1200.webp new file mode 100644 index 0000000..2d850eb Binary files /dev/null and b/site/assets/img/portrait-marina-sunset-1200.webp differ diff --git a/site/assets/img/portrait-marina-sunset-1600.webp b/site/assets/img/portrait-marina-sunset-1600.webp new file mode 100644 index 0000000..647c641 Binary files /dev/null and b/site/assets/img/portrait-marina-sunset-1600.webp differ diff --git a/site/assets/img/portrait-marina-sunset-480.webp b/site/assets/img/portrait-marina-sunset-480.webp new file mode 100644 index 0000000..453b93f Binary files /dev/null and b/site/assets/img/portrait-marina-sunset-480.webp differ diff --git a/site/assets/img/portrait-marina-sunset-768.webp b/site/assets/img/portrait-marina-sunset-768.webp new file mode 100644 index 0000000..1a15ff4 Binary files /dev/null and b/site/assets/img/portrait-marina-sunset-768.webp differ diff --git a/site/businessfotografie/index.html b/site/businessfotografie/index.html index fdbe149..6fbe2b3 100644 --- a/site/businessfotografie/index.html +++ b/site/businessfotografie/index.html @@ -59,7 +59,7 @@

Portraits, Teams, Standorte und Produkte — abgestimmt auf die Flächen, auf denen sie später stehen: Website, LinkedIn, Kampagne, Stellenanzeige.

-
Typische Aufträge

Wofür Unternehmen mich buchen

Portraits & Profilbilder

Einzelpersonen vor ruhigem Hintergrund oder im eigenen Arbeitsumfeld. Mehrere Varianten, damit Website und Profil nicht dasselbe Bild zeigen.

Teams & Standort

Menschen bei der Arbeit, Räume, Details. Zeigt, wie es bei euch wirklich aussieht — ohne Stockfoto-Gefühl.

Produkt & Detail

Sauber ausgeleuchtete Produkte für Shop, Katalog und Anzeigen, auch mit Szenenbildern.

Recruiting & Arbeitgebermarke

Bildpakete für Stellenanzeigen und Karriereseiten, die Bewerberinnen und Bewerber vorher sehen lassen, was sie erwartet.

Presse & Kampagne

Bildstrecken für Pressemitteilungen, Anzeigen und Social-Media-Kampagnen, inklusive der passenden Formate.

Events & Messen

Dokumentarische Begleitung von Firmenfeiern, Tagungen und Messeauftritten.

Mobiles Studio

Das Studio kommt zu dir

Komplette Ausrüstung inklusive autarker Blitzanlage — aufgebaut dort, wo deine Leute sind.

Studioequipment mit Logo von Denny Schulz FotografieAutarke BlitzanlageHintergründe, Blitze, Lichtformer

Nicht jedes Team kann für ein Shooting den Betrieb verlassen. Deshalb baue ich das Studio dort auf, wo deine Leute sowieso sind: im Besprechungsraum, in der Werkstatt, im Vereinsheim oder draußen vor der Halle.

Dabei ist die komplette Ausrüstung dabei — Hintergründe, Blitze, Lichtformer und Ersatztechnik. Die Blitzanlage ist autark, ich bin vor Ort also sofort einsatzbereit und brauche nichts aus deinem Haushalt.

Komplette Ausrüstung

Kamera, Objektive, Hintergründe, Blitze und Lichtformer kommen mit.

Autarke Blitzanlage

Das Licht ist im Gepäck und in wenigen Minuten aufgebaut.

Dein Ort, deine Zeit

Geschossen wird zwischen zwei Terminen, in der Mittagspause oder nach Feierabend.

Überall in SH & Hamburg

Vom Büro in Neumünster bis zum Betrieb in Kiel, Lübeck oder Hamburg.

Zusammenarbeit

Was ich von euch brauche

Ein kurzer Call oder eine E-Mail mit drei Angaben reicht für ein verbindliches Angebot.

  • Wofür die Bilder gebraucht werden (Website, Print, Social, Presse)
  • Wie viele Personen oder Produkte fotografiert werden
  • Ort und Wunschzeitraum — bei euch, im Studio oder draußen
  • Ob einheitliche Hintergründe oder zusätzliche Retusche gebraucht werden
Nutzungsrechte: Wir halten vorab fest, für welche Kanäle und wie lange die Bilder genutzt werden dürfen. Das schützt euch und mich — und ihr bekommt genau die Rechte, die ihr braucht.

Nach dem Shooting bekommt ihr eine Auswahlgalerie, in der ihr kommentieren und freigeben könnt. Erst danach geht es in die finale Bearbeitung.

Beispiele

Aus der Business- und Studiopraxis

Portrait eines Mannes vor dunklem Hintergrund
Sitzendes Portrait im weichen Studiolicht
Kamerakoffer und Objektive vor einem Studiorack
Studioequipment mit Logo von Denny Schulz Fotografie
+
Typische Aufträge

Wofür Unternehmen mich buchen

Portraits & Profilbilder

Einzelpersonen vor ruhigem Hintergrund oder im eigenen Arbeitsumfeld. Mehrere Varianten, damit Website und Profil nicht dasselbe Bild zeigen.

Teams & Standort

Menschen bei der Arbeit, Räume, Details. Zeigt, wie es bei euch wirklich aussieht — ohne Stockfoto-Gefühl.

Produkt & Detail

Sauber ausgeleuchtete Produkte für Shop, Katalog und Anzeigen, auch mit Szenenbildern.

Recruiting & Arbeitgebermarke

Bildpakete für Stellenanzeigen und Karriereseiten, die Bewerberinnen und Bewerber vorher sehen lassen, was sie erwartet.

Presse & Kampagne

Bildstrecken für Pressemitteilungen, Anzeigen und Social-Media-Kampagnen, inklusive der passenden Formate.

Events & Messen

Dokumentarische Begleitung von Firmenfeiern, Tagungen und Messeauftritten.

Studio

Im Studio in Neumünster oder bei dir vor Ort

Projekte können im eigenen Studio in Neumünster fotografiert werden — oder ich baue das mobile Studio inklusive autarker Blitzanlage dort auf, wo deine Leute sind.

Studioequipment mit Logo von Denny Schulz FotografieAutarke BlitzanlageHintergründe, Blitze, Lichtformer

Studio Neumünster

Ein eigenes Studio in Neumünster steht für Shootings bereit: kontrolliertes Licht, ruhiger Hintergrund und Platz für Konzeptarbeit. Gut für Portraits, Businessbilder und alles, was eine wiederholbare Optik braucht — unabhängig vom Wetter.

Mobiles Studio

Nicht jedes Team kann für ein Shooting den Betrieb verlassen. Deshalb baue ich das Studio dort auf, wo deine Leute sowieso sind: im Besprechungsraum, in der Werkstatt, im Vereinsheim oder draußen vor der Halle.

Dabei ist die komplette Ausrüstung dabei — Hintergründe, Blitze, Lichtformer und Ersatztechnik. Die Blitzanlage ist autark, ich bin vor Ort also sofort einsatzbereit und brauche nichts aus deinem Haushalt.

Komplette Ausrüstung

Kamera, Objektive, Hintergründe, Blitze und Lichtformer kommen mit.

Autarke Blitzanlage

Das Licht ist im Gepäck und in wenigen Minuten aufgebaut.

Dein Ort, deine Zeit

Geschossen wird zwischen zwei Terminen, in der Mittagspause oder nach Feierabend.

Überall in SH & Hamburg

Vom Büro in Neumünster bis zum Betrieb in Kiel, Lübeck oder Hamburg.

Zusammenarbeit

Was ich von euch brauche

Ein kurzer Call oder eine E-Mail mit drei Angaben reicht für ein verbindliches Angebot.

  • Wofür die Bilder gebraucht werden (Website, Print, Social, Presse)
  • Wie viele Personen oder Produkte fotografiert werden
  • Ort und Wunschzeitraum — bei euch, im Studio oder draußen
  • Ob einheitliche Hintergründe oder zusätzliche Retusche gebraucht werden
Nutzungsrechte: Wir halten vorab fest, für welche Kanäle und wie lange die Bilder genutzt werden dürfen. Das schützt euch und mich — und ihr bekommt genau die Rechte, die ihr braucht.

Nach dem Shooting bekommt ihr eine Auswahlgalerie, in der ihr kommentieren und freigeben könnt. Erst danach geht es in die finale Bearbeitung.

Beispiele

Aus der Business- und Studiopraxis

Portrait eines Mannes vor dunklem Hintergrund
Sitzendes Portrait im weichen Studiolicht
Drei Frauen in Bademänteln und Handtuchturbanen am Fenster
Drei Frauen mit Teetassen und Handtuchturbanen
Kamerakoffer und Objektive vor einem Studiorack
Studioequipment mit Logo von Denny Schulz Fotografie
Frauen im Bademantel halten Orangenscheiben vor ihre Gesichter
Drei Frauen lachen mit Orangenscheiben in den Händen
diff --git a/site/familien-und-paare/index.html b/site/familien-und-paare/index.html index 363df53..1f63562 100644 --- a/site/familien-und-paare/index.html +++ b/site/familien-und-paare/index.html @@ -59,7 +59,7 @@

Familienshootings und Paarportraits, die nicht gestellt wirken. Zeit lassen, mitgehen und im richtigen Moment auslösen.

-
Anlässe

Für welche Momente mich Familien und Paare buchen

Familienshooting

Alle zusammen, ohne dass es nach Fototermin aussieht. Auch mit mehreren Generationen.

Paarshooting

Zwei Menschen, die sich nah sind. Vor der Hochzeit, zum Jahrestag oder einfach so.

Verlobung & Ja-Wort

Kleine Zeremonien, Standesamt, freie Trauung — begleitend oder als Portraitstrecke.

Jubiläum & Familientreffen

Wenn die ganze Verwandtschaft zusammenkommt, lohnt sich ein gemeinsames Bild.

Generationenbilder

Großeltern, Eltern, Enkel: Bilder, die in Jahren mehr wert sind als heute.

Kinderportraits

Kurz, spielerisch und geduldig — lieber zehn ehrliche Bilder als eine Stunde Stillhalten.

Ablauf

Entspannt statt steif

Wir treffen uns dort, wo ihr euch wohlfühlt — im Studio, im Park oder bei euch zuhause. Ich sage, wann es losgeht, und danach einfach laufen lassen.

Anfrage

Du schreibst kurz, worum es geht. Ich melde mich mit einer ehrlichen Einschätzung, einem Ablauf und einem Preis.

Planung

Wir klären Ort, Licht, Zeit und Bildidee. Bei größeren Produktionen gibt es vorab ein Moodboard oder ein Treatment.

Dreh

Am Termin übernehme ich Technik, Licht und Regie — auf Wunsch mit dem mobilen Studio inklusive autarker Blitzanlage an deinem Ort. Du musst nichts mitbringen außer Zeit und dich.

Lieferung

Du bekommst eine Auswahlgalerie, bearbeitete Dateien in Web- und Druckgröße und bei Video das passende Exportformat für deinen Kanal.

Beispiele

Paare und Menschen

Natürliches Portrait im FreienPaar küsst sich vor hellem HintergrundPaarportrait im GrünenFeiergesellschaft bei einer VeranstaltungGruppe posiert im FreienGruppe steht zusammen vor der Kamera
+
Anlässe

Für welche Momente mich Familien und Paare buchen

Familienshooting

Alle zusammen, ohne dass es nach Fototermin aussieht. Auch mit mehreren Generationen.

Paarshooting

Zwei Menschen, die sich nah sind. Vor der Hochzeit, zum Jahrestag oder einfach so.

Verlobung & Ja-Wort

Kleine Zeremonien, Standesamt, freie Trauung — begleitend oder als Portraitstrecke.

Jubiläum & Familientreffen

Wenn die ganze Verwandtschaft zusammenkommt, lohnt sich ein gemeinsames Bild.

Generationenbilder

Großeltern, Eltern, Enkel: Bilder, die in Jahren mehr wert sind als heute.

Kinderportraits

Kurz, spielerisch und geduldig — lieber zehn ehrliche Bilder als eine Stunde Stillhalten.

Ablauf

Entspannt statt steif

Wir treffen uns dort, wo ihr euch wohlfühlt — im Studio, im Park oder bei euch zuhause. Ich sage, wann es losgeht, und danach einfach laufen lassen.

Anfrage

Du schreibst kurz, worum es geht. Ich melde mich mit einer ehrlichen Einschätzung, einem Ablauf und einem Preis.

Planung

Wir klären Ort, Licht, Zeit und Bildidee. Bei größeren Produktionen gibt es vorab ein Moodboard oder ein Treatment.

Dreh

Am Termin übernehme ich Technik, Licht und Regie — auf Wunsch mit dem mobilen Studio inklusive autarker Blitzanlage an deinem Ort. Du musst nichts mitbringen außer Zeit und dich.

Lieferung

Du bekommst eine Auswahlgalerie, bearbeitete Dateien in Web- und Druckgröße und bei Video das passende Exportformat für deinen Kanal.

Beispiele

Paare und Menschen

Natürliches Portrait im FreienPaar küsst sich vor hellem HintergrundPaarportrait im GrünenSara und Carlos stehen Arm in Arm im GrünenSara und Carlos küssen sich im GegenlichtSara und Carlos gehen Hand in Hand durch den WaldTamara und Tobi lachen auf einem WaldwegDie Silhouetten des Paars rahmen die tief stehende SonneMarina mit roten Zöpfen auf einem verschneiten WaldwegMarinas Silhouette vor orangefarbenem Abendhimmel
diff --git a/site/index.html b/site/index.html index 260d81f..12295c6 100644 --- a/site/index.html +++ b/site/index.html @@ -65,7 +65,7 @@
ShootingsBusiness, Portrait, Familie und Minishootings unter einem Dach.
-
Mobiles StudioKomplette Ausrüstung inklusive autarker Blitzanlage vor Ort.
+
Studio & vor OrtEigenes Studio in Neumünster oder mobiles Studio inklusive autarker Blitzanlage bei dir.
Foto & VideoBeides aus einer Hand, damit Optik und Ton zusammenpassen.
Musik & BühneKonzerte, Bands und Musikvideos aus eigener Erfahrung.
@@ -78,7 +78,7 @@ im Feed, im Bewerbungsportfolio, im Plakat. Kein Katalog von der Stange — wir klären kurz, was du brauchst, und ich liefere genau das.

-
Zwei Bereiche

Shootings und Videoprojekte

Foto und Video bleiben getrennt, damit beide Bereiche für sich verständlich sind — und kommen trotzdem von derselben Person.

Kameraobjektiv im Studiolicht
Video

Videoprojekte

Bewegtbild von der Idee bis zum fertigen Schnitt. Musikvideo, Imagefilm, Eventfilm und Formate für Social Media — gedreht, geschnitten und ausgeliefert in dem Format, in dem du es veröffentlichst.

Videoprojekte ansehen
Portfolio

Musik, Menschen und freie Arbeiten

Konzerte und Bands, Portraits und Business, dazu eigene Strecken aus Landschaft und Tierwelt. Das ist die Bandbreite meiner Arbeit.

+
Zwei Bereiche

Shootings und Videoprojekte

Foto und Video bleiben getrennt, damit beide Bereiche für sich verständlich sind — und kommen trotzdem von derselben Person.

Kameraobjektiv im Studiolicht
Video

Videoprojekte

Bewegtbild von der Idee bis zum fertigen Schnitt. Musikvideo, Imagefilm, Eventfilm und Formate für Social Media — gedreht, geschnitten und ausgeliefert in dem Format, in dem du es veröffentlichst.

Videoprojekte ansehen
Portfolio

Musik, Menschen und freie Arbeiten

Konzerte und Bands, Portraits und Business, dazu eigene Strecken aus Landschaft und Tierwelt. Das ist die Bandbreite meiner Arbeit.

@@ -104,7 +104,7 @@

Das Video wird erst nach deinem Klick von YouTube geladen (youtube-nocookie.com). Mehr dazu in der Datenschutzerklärung.

-
Mobiles Studio

Das Studio kommt zu dir

Komplette Ausrüstung inklusive autarker Blitzanlage — aufgebaut dort, wo deine Leute sind.

Studioequipment mit Logo von Denny Schulz FotografieAutarke BlitzanlageHintergründe, Blitze, Lichtformer

Nicht jedes Team kann für ein Shooting den Betrieb verlassen. Deshalb baue ich das Studio dort auf, wo deine Leute sowieso sind: im Besprechungsraum, in der Werkstatt, im Vereinsheim oder draußen vor der Halle.

Dabei ist die komplette Ausrüstung dabei — Hintergründe, Blitze, Lichtformer und Ersatztechnik. Die Blitzanlage ist autark, ich bin vor Ort also sofort einsatzbereit und brauche nichts aus deinem Haushalt.

Komplette Ausrüstung

Kamera, Objektive, Hintergründe, Blitze und Lichtformer kommen mit.

Autarke Blitzanlage

Das Licht ist im Gepäck und in wenigen Minuten aufgebaut.

Dein Ort, deine Zeit

Geschossen wird zwischen zwei Terminen, in der Mittagspause oder nach Feierabend.

Überall in SH & Hamburg

Vom Büro in Neumünster bis zum Betrieb in Kiel, Lübeck oder Hamburg.

Ablauf

Vier Schritte, kein Rätselraten

Ob Minishooting oder Kampagne: Der Weg ist immer derselbe und du weißt jederzeit, was als Nächstes passiert.

Anfrage

Du schreibst kurz, worum es geht. Ich melde mich mit einer ehrlichen Einschätzung, einem Ablauf und einem Preis.

Planung

Wir klären Ort, Licht, Zeit und Bildidee. Bei größeren Produktionen gibt es vorab ein Moodboard oder ein Treatment.

Dreh

Am Termin übernehme ich Technik, Licht und Regie — auf Wunsch mit dem mobilen Studio inklusive autarker Blitzanlage an deinem Ort. Du musst nichts mitbringen außer Zeit und dich.

Lieferung

Du bekommst eine Auswahlgalerie, bearbeitete Dateien in Web- und Druckgröße und bei Video das passende Exportformat für deinen Kanal.

Warum desfoto

Was du erwarten kannst

Mobiles Studio

Komplette Ausrüstung mit autarker Blitzanlage, Hintergründen und Lichtformern — aufgebaut an deinem Ort.

Aus Neumünster

Zuhause zwischen Kiel und Hamburg — unterwegs in Schleswig-Holstein und darüber hinaus.

Foto und Video

Ein Ansprechpartner für Bild und Bewegtbild. Das spart Abstimmung und hält die Optik zusammen.

Klarer Ablauf

Umfang, Termin und Preis klären wir vor der Buchung. Keine Überraschungen auf der Rechnung.

+
Studio

Im Studio in Neumünster oder bei dir vor Ort

Projekte können im eigenen Studio in Neumünster fotografiert werden — oder ich baue das mobile Studio inklusive autarker Blitzanlage dort auf, wo deine Leute sind.

Studioequipment mit Logo von Denny Schulz FotografieAutarke BlitzanlageHintergründe, Blitze, Lichtformer

Studio Neumünster

Ein eigenes Studio in Neumünster steht für Shootings bereit: kontrolliertes Licht, ruhiger Hintergrund und Platz für Konzeptarbeit. Gut für Portraits, Businessbilder und alles, was eine wiederholbare Optik braucht — unabhängig vom Wetter.

Mobiles Studio

Nicht jedes Team kann für ein Shooting den Betrieb verlassen. Deshalb baue ich das Studio dort auf, wo deine Leute sowieso sind: im Besprechungsraum, in der Werkstatt, im Vereinsheim oder draußen vor der Halle.

Dabei ist die komplette Ausrüstung dabei — Hintergründe, Blitze, Lichtformer und Ersatztechnik. Die Blitzanlage ist autark, ich bin vor Ort also sofort einsatzbereit und brauche nichts aus deinem Haushalt.

Komplette Ausrüstung

Kamera, Objektive, Hintergründe, Blitze und Lichtformer kommen mit.

Autarke Blitzanlage

Das Licht ist im Gepäck und in wenigen Minuten aufgebaut.

Dein Ort, deine Zeit

Geschossen wird zwischen zwei Terminen, in der Mittagspause oder nach Feierabend.

Überall in SH & Hamburg

Vom Büro in Neumünster bis zum Betrieb in Kiel, Lübeck oder Hamburg.

Ablauf

Vier Schritte, kein Rätselraten

Ob Minishooting oder Kampagne: Der Weg ist immer derselbe und du weißt jederzeit, was als Nächstes passiert.

Anfrage

Du schreibst kurz, worum es geht. Ich melde mich mit einer ehrlichen Einschätzung, einem Ablauf und einem Preis.

Planung

Wir klären Ort, Licht, Zeit und Bildidee. Bei größeren Produktionen gibt es vorab ein Moodboard oder ein Treatment.

Dreh

Am Termin übernehme ich Technik, Licht und Regie — auf Wunsch mit dem mobilen Studio inklusive autarker Blitzanlage an deinem Ort. Du musst nichts mitbringen außer Zeit und dich.

Lieferung

Du bekommst eine Auswahlgalerie, bearbeitete Dateien in Web- und Druckgröße und bei Video das passende Exportformat für deinen Kanal.

Warum desfoto

Was du erwarten kannst

Studio & vor Ort

Eigenes Studio in Neumünster oder mobiles Studio mit autarker Blitzanlage, Hintergründen und Lichtformern.

Aus Neumünster

Zuhause zwischen Kiel und Hamburg — unterwegs in Schleswig-Holstein und darüber hinaus.

Foto und Video

Ein Ansprechpartner für Bild und Bewegtbild. Das spart Abstimmung und hält die Optik zusammen.

Klarer Ablauf

Umfang, Termin und Preis klären wir vor der Buchung. Keine Überraschungen auf der Rechnung.

diff --git a/site/minishootings/index.html b/site/minishootings/index.html index 6d4089e..f1406d0 100644 --- a/site/minishootings/index.html +++ b/site/minishootings/index.html @@ -59,7 +59,7 @@

Der Termin für alle, die schnell ein gutes Bild brauchen: klarer Ablauf, kleine Auswahl, kurze Lieferzeit. Meist in rund 20 bis 30 Minuten erledigt.

-
Gut geeignet für

Wann ein Minishooting reicht

Profilbild

Für LinkedIn, Bewerbung, Vereinsseite oder die Website.

Paar & Familie

Ein, zwei schöne Bilder zusammen — ohne großen Termin.

Social Media

Frisches Material für deine Kanäle, passend zum Format.

Verein & Mannschaft

Schnell alle Gesichter für Mannschaftsfotos und Anmeldungen.

Businesskurzportrait

Du brauchst nur ein Bild für die neue Stelle oder Präsentation.

Geschenkidee

Gutschein für ein gemeinsames Shooting — auf Anfrage.

So läuft es

Drei Schritte, ein Termin

Termin und Ort

Du wählst einen freien Slot im Studio Neumünster oder draußen. Kurze Info vorab reicht.

Die Session

Rund 20 bis 30 Minuten. Ich führe durch Licht und Position, du musst nichts vorbereiten.

Lieferung

Du bekommst eine Auswahl zum Ansehen und die bearbeiteten Dateien in Web- und Druckgröße.

Gut zu wissen

Was du vorher wissen solltest

  • Outfitwechsel ist möglich, wenn du etwas mitbringst
  • Studio- oder Außentermin — je nach Wunsch und Licht
  • Fester Preis, vorab geklärt, keine Nachforderung
  • Termine nach Absprache, auch kurzfristig
Wie viele Bilder du bekommst und was das Shooting kostet, hängt von Umfang und Nutzung ab. Sag mir kurz, was du brauchst — dann nenne ich dir den Preis für dein Paket, bevor du buchst.
Beispiele

Schnell und trotzdem gut

Natürliches Portrait im FreienMann im weißen Hemd vor dunklem Hintergrund, Softbox im BildModel im Sporttop vor schwarzem HintergrundPortrait einer Frau mit Sonnenbrille
+
Gut geeignet für

Wann ein Minishooting reicht

Profilbild

Für LinkedIn, Bewerbung, Vereinsseite oder die Website.

Paar & Familie

Ein, zwei schöne Bilder zusammen — ohne großen Termin.

Social Media

Frisches Material für deine Kanäle, passend zum Format.

Verein & Mannschaft

Schnell alle Gesichter für Mannschaftsfotos und Anmeldungen.

Businesskurzportrait

Du brauchst nur ein Bild für die neue Stelle oder Präsentation.

Geschenkidee

Gutschein für ein gemeinsames Shooting — auf Anfrage.

So läuft es

Drei Schritte, ein Termin

Termin und Ort

Du wählst einen freien Slot im Studio Neumünster oder draußen. Kurze Info vorab reicht.

Die Session

Rund 20 bis 30 Minuten. Ich führe durch Licht und Position, du musst nichts vorbereiten.

Lieferung

Du bekommst eine Auswahl zum Ansehen und die bearbeiteten Dateien in Web- und Druckgröße.

Gut zu wissen

Was du vorher wissen solltest

  • Outfitwechsel ist möglich, wenn du etwas mitbringst
  • Studio- oder Außentermin — je nach Wunsch und Licht
  • Fester Preis, vorab geklärt, keine Nachforderung
  • Termine nach Absprache, auch kurzfristig
Wie viele Bilder du bekommst und was das Shooting kostet, hängt von Umfang und Nutzung ab. Sag mir kurz, was du brauchst — dann nenne ich dir den Preis für dein Paket, bevor du buchst.
Beispiele

Schnell und trotzdem gut

Natürliches Portrait im FreienMann im weißen Hemd vor dunklem Hintergrund, Softbox im BildModel im Sporttop vor schwarzem HintergrundMarta im seitlichen Studiolicht vor dunklem HintergrundPortrait einer Frau mit SonnenbrilleMarina mit roten Zöpfen auf einem verschneiten Waldweg
diff --git a/site/portrait-und-model/index.html b/site/portrait-und-model/index.html index c370bd8..8bbba54 100644 --- a/site/portrait-und-model/index.html +++ b/site/portrait-und-model/index.html @@ -67,7 +67,7 @@

Draußen, wo du bist

Available light, Stadt, Wald, Wasser oder dein eigener Ort. Lebendiger, weniger kontrolliert — und oft genau richtig für Portraits, die sich echt anfühlen.

-
Beispiele

Portraits und Editorial

Editorial-Portrait vor schwarzem HintergrundDetailaufnahme eines Rückens mit SporttopModel im Sporttop vor schwarzem HintergrundPortrait im Profil mit OhrringNatürliches Portrait im FreienPaar küsst sich vor hellem Hintergrund
+
Beispiele

Portraits und Editorial

Editorial-Portrait vor schwarzem HintergrundDetailaufnahme eines Rückens mit SporttopModel im Sporttop vor schwarzem HintergrundPortrait im Profil mit OhrringMarta im seitlichen Studiolicht vor dunklem HintergrundMarta balanciert sitzend mit angehobenem BeinMarta springt mit angewinkelten BeinenNatürliches Portrait im FreienPaar küsst sich vor hellem Hintergrund
diff --git a/site/projekte/index.html b/site/projekte/index.html index fffd3f2..3775bd7 100644 --- a/site/projekte/index.html +++ b/site/projekte/index.html @@ -58,7 +58,7 @@

Neben Auftragsarbeiten entstehen eigene Projekte: Bands und Konzerte, Landschaft und Tierwelt, Menschen und Momente ohne Termin.

-
Musik & Bühne

Bands, Konzerte und Musikvideos

Musik ist mein zweites Standbein. Für Extinct und Sagenbringer entstehen Bilder und Videoarbeiten, dazu das eigene Musikvideo für Thjódrörir.

Sänger mit erhobenem Arm im blauen Bühnenlicht
Musiker in Fellkleidung im Wald, von unten fotografiert
Die Band Extinct steht hintereinander vor schwarzem Hintergrund
Bärtiger Sänger am Mikrofon mit erhobener Hand
Schlagzeuger am Drumset in Schwarzweiß
Nahaufnahme einer Hand an den Saiten einer E-Gitarre
Freie Arbeiten

Strecken ohne Auftrag

Landschaft, Tierwelt und Menschen, entstanden nebenbei und ohne Auftraggeber. Drei Themen, ein Blick — das, was ich ohnehin fotografiere.

Eine Person sitzt über einer wolkenverhangenen Berglandschaft
Steile Felsnadeln vor dem Meer
Eine Frau mit Hut steht an einer felsigen Küste
Nebel zieht durch einen Nadelwald am Berghang
Eine Person am Bergsee spiegelt sich im Wasser
Gräser im goldenen Licht des Sonnenuntergangs
Nahaufnahme eines Rotfuchses
Nahaufnahme einer getigerten Katze im Seitenlicht
Blick durch einen steinernen Torbogen in einen Garten
Menschen

Portraits ohne Anlass

Frauenportrait im weichen Seitenlicht vor dunklem Hintergrund
Portrait einer Frau mit Sonnenbrille
Lichtspur aus einer langen Belichtung
Pro bono

Arbeiten, die ich unterstütze

Manche Projekte sind wichtig, haben aber kein Budget. Wenn es passt, mache ich sie trotzdem.

+
Musik & Bühne

Bands, Konzerte und Musikvideos

Musik ist mein zweites Standbein. Für Extinct und Sagenbringer entstehen Bilder und Videoarbeiten, dazu das eigene Musikvideo für Thjódrörir.

Sänger mit erhobenem Arm im blauen Bühnenlicht
Musiker in Fellkleidung im Wald, von unten fotografiert
Musiker mit Dreadlocks vor einem Mikrofon
Vier Bandmitglieder hintereinander in Schwarzweiß
Die Band Extinct steht hintereinander vor schwarzem Hintergrund
Bärtiger Sänger am Mikrofon mit erhobener Hand
Schlagzeuger am Drumset in Schwarzweiß
Schlagzeuger blickt hinter seinen Becken hervor
Zwei Musiker trinken aus Trinkhörnern
Nahaufnahme einer Hand an den Saiten einer E-Gitarre
Freie Arbeiten

Strecken ohne Auftrag

Landschaft, Tierwelt und Menschen, entstanden nebenbei und ohne Auftraggeber. Drei Themen, ein Blick — das, was ich ohnehin fotografiere.

Eine Person sitzt über einer wolkenverhangenen Berglandschaft
Steile Felsnadeln vor dem Meer
Eine Frau mit Hut steht an einer felsigen Küste
Nebel zieht durch einen Nadelwald am Berghang
Eine Person am Bergsee spiegelt sich im Wasser
Gräser im goldenen Licht des Sonnenuntergangs
Nahaufnahme eines Rotfuchses
Nahaufnahme einer getigerten Katze im Seitenlicht
Blick durch einen steinernen Torbogen in einen Garten
Kleine Burg auf einer Insel in einem bewaldeten See
Zwei Schwäne auf ruhigem Wasser
Ein Spatz sitzt auf einem Ast
Eine getigerte Katze schaut aus dem Fenster
Eine weiße Katze mit aufgerichtetem buschigem Schwanz
Zwei Hunde liegen auf einem Waldweg
Menschen

Portraits ohne Anlass

Frauenportrait im weichen Seitenlicht vor dunklem Hintergrund
Portrait einer Frau mit Sonnenbrille
Marinas Silhouette vor orangefarbenem Abendhimmel
Marta im seitlichen Studiolicht vor dunklem Hintergrund
Lichtspur aus einer langen Belichtung
Pro bono

Arbeiten, die ich unterstütze

Manche Projekte sind wichtig, haben aber kein Budget. Wenn es passt, mache ich sie trotzdem.

Ich fotografiere und filme gelegentlich kostenlos für Initiativen, Vereine, gemeinnützige Projekte und Menschen, die dabei Unterstützung brauchen — als Beitrag zu dem Umfeld, in dem ich lebe.

diff --git a/site/shootings/index.html b/site/shootings/index.html index 7b958d0..a591c6b 100644 --- a/site/shootings/index.html +++ b/site/shootings/index.html @@ -59,7 +59,7 @@

Alles, was ich fotografisch mache, läuft unter dem Begriff Shooting: vier Schwerpunkte, ein Ablauf, ein Ansprechpartner.

-
Überblick

Ein Überbegriff, vier Wege

Du musst dich nicht für eine Schublade entscheiden — erzähl einfach, worum es geht.

Shootings

Shootings

Ein Überbegriff, vier Wege: Businessfotografie für Teams und Marken, Portrait & Model für die persönliche Bildsprache, Familien & Paare für die Menschen, die zu dir gehören, und Minishootings für alle, die schnell ein gutes Bild brauchen.

Mobiles Studio

Mobiles Studio

Komplette Ausrüstung inklusive autarker Blitzanlage, Hintergründen und Lichtformern — aufgebaut an deinem Ort, statt umgekehrt.

Anlässe

Anlässe

Feiern, Events, Vereinsleben und Premieren. Dokumentarisch begleitet, ohne den Ablauf auszubremsen.

Schwerpunkte

Die vier Shootings im Detail

Mann im weißen Hemd vor dunklem Hintergrund, Softbox im Bild

01Businessfotografie

Portraits, Teams und Produkte für Website, LinkedIn, Kampagne und Presse — sauber ausgeleuchtet und sofort einsetzbar.

Fashion-Portrait in kräftigen Farben

02Portrait & Model

Portraits, Sedcards, Editorial und Fashion. Im Studio in Neumünster oder an einem Ort, der zu dir und deiner Geschichte passt.

Paar lacht im Abendlicht

03Familien & Paare

Familienshootings und Paarportraits, die nicht gestellt wirken. Zeit lassen, mitgehen, im richtigen Moment auslösen.

Natürliches Portrait im Freien

04Minishootings

Die kurze Session für alle, die schnell ein gutes Bild brauchen: klarer Ablauf, kleine Auswahl, kurze Lieferzeit.

Mobiles Studio

Das Studio kommt zu dir

Komplette Ausrüstung inklusive autarker Blitzanlage — aufgebaut dort, wo deine Leute sind.

Studioequipment mit Logo von Denny Schulz FotografieAutarke BlitzanlageHintergründe, Blitze, Lichtformer

Nicht jedes Team kann für ein Shooting den Betrieb verlassen. Deshalb baue ich das Studio dort auf, wo deine Leute sowieso sind: im Besprechungsraum, in der Werkstatt, im Vereinsheim oder draußen vor der Halle.

Dabei ist die komplette Ausrüstung dabei — Hintergründe, Blitze, Lichtformer und Ersatztechnik. Die Blitzanlage ist autark, ich bin vor Ort also sofort einsatzbereit und brauche nichts aus deinem Haushalt.

Komplette Ausrüstung

Kamera, Objektive, Hintergründe, Blitze und Lichtformer kommen mit.

Autarke Blitzanlage

Das Licht ist im Gepäck und in wenigen Minuten aufgebaut.

Dein Ort, deine Zeit

Geschossen wird zwischen zwei Terminen, in der Mittagspause oder nach Feierabend.

Überall in SH & Hamburg

Vom Büro in Neumünster bis zum Betrieb in Kiel, Lübeck oder Hamburg.

Ablauf

So läuft ein Shooting

Bei jedem Shooting derselbe Weg — vom ersten Satz bis zur fertigen Datei.

Vorab klären

Wir sprechen kurz über Anlass, Ort und gewünschte Bildsprache. Daraus ergibt sich der Umfang.

Licht planen

Ob Tageslicht, mobiles Studio oder Bühne: Das Licht entscheidet, wie nah das Ergebnis an deiner Vorstellung liegt.

Fotografieren

Am Termin führe ich durch den Ablauf, gebe Haltung und Tempo vor und löse im richtigen Moment aus.

Auswählen

Du bekommst eine geordnete Auswahl und die bearbeiteten Bilddateien in den Größen, die du brauchst.

Beispiele

Aus Shootings und Aufträgen

Portrait eines Mannes vor dunklem Hintergrund
Fashion-Portrait in kräftigen Farben
Paarportrait im Grünen
Sitzendes Portrait im weichen Studiolicht
Feiergesellschaft bei einer Veranstaltung
Natürliches Portrait im Freien
Technik & Ausgabe

Was am Ende bei dir landet

Bilddaten in der Auflösung, die du wirklich brauchst — nicht ein Ordner voller RAW-Dateien.

  • Bearbeitete JPEG-Dateien in Web- und Druckgröße
  • Auswahlgalerie zum Sichten und Teilen
  • Retusche auf Wunsch, besprochen im Vorfeld
  • Nutzungsrechte schriftlich festgehalten
  • Tageslicht, Studiolicht und mobile Blitzanlage
  • Mobiles Studio direkt an deinem Ort
  • Reportagestil bei Veranstaltungen
  • Lieferung per Downloadlink
+
Überblick

Ein Überbegriff, vier Wege

Du musst dich nicht für eine Schublade entscheiden — erzähl einfach, worum es geht.

Shootings

Shootings

Ein Überbegriff, vier Wege: Businessfotografie für Teams und Marken, Portrait & Model für die persönliche Bildsprache, Familien & Paare für die Menschen, die zu dir gehören, und Minishootings für alle, die schnell ein gutes Bild brauchen.

Studio & mobil

Studio & mobil

Shootings im eigenen Studio in Neumünster oder mit dem mobilen Studio inklusive autarker Blitzanlage, Hintergründen und Lichtformern — aufgebaut an deinem Ort, statt umgekehrt.

Anlässe

Anlässe

Feiern, Events, Vereinsleben und Premieren. Dokumentarisch begleitet, ohne den Ablauf auszubremsen.

Schwerpunkte

Die vier Shootings im Detail

Mann im weißen Hemd vor dunklem Hintergrund, Softbox im Bild

01Businessfotografie

Portraits, Teams und Produkte für Website, LinkedIn, Kampagne und Presse — sauber ausgeleuchtet und sofort einsetzbar.

Fashion-Portrait in kräftigen Farben

02Portrait & Model

Portraits, Sedcards, Editorial und Fashion. Im Studio in Neumünster oder an einem Ort, der zu dir und deiner Geschichte passt.

Paar lacht im Abendlicht

03Familien & Paare

Familienshootings und Paarportraits, die nicht gestellt wirken. Zeit lassen, mitgehen, im richtigen Moment auslösen.

Natürliches Portrait im Freien

04Minishootings

Die kurze Session für alle, die schnell ein gutes Bild brauchen: klarer Ablauf, kleine Auswahl, kurze Lieferzeit.

Studio

Im Studio in Neumünster oder bei dir vor Ort

Projekte können im eigenen Studio in Neumünster fotografiert werden — oder ich baue das mobile Studio inklusive autarker Blitzanlage dort auf, wo deine Leute sind.

Studioequipment mit Logo von Denny Schulz FotografieAutarke BlitzanlageHintergründe, Blitze, Lichtformer

Studio Neumünster

Ein eigenes Studio in Neumünster steht für Shootings bereit: kontrolliertes Licht, ruhiger Hintergrund und Platz für Konzeptarbeit. Gut für Portraits, Businessbilder und alles, was eine wiederholbare Optik braucht — unabhängig vom Wetter.

Mobiles Studio

Nicht jedes Team kann für ein Shooting den Betrieb verlassen. Deshalb baue ich das Studio dort auf, wo deine Leute sowieso sind: im Besprechungsraum, in der Werkstatt, im Vereinsheim oder draußen vor der Halle.

Dabei ist die komplette Ausrüstung dabei — Hintergründe, Blitze, Lichtformer und Ersatztechnik. Die Blitzanlage ist autark, ich bin vor Ort also sofort einsatzbereit und brauche nichts aus deinem Haushalt.

Komplette Ausrüstung

Kamera, Objektive, Hintergründe, Blitze und Lichtformer kommen mit.

Autarke Blitzanlage

Das Licht ist im Gepäck und in wenigen Minuten aufgebaut.

Dein Ort, deine Zeit

Geschossen wird zwischen zwei Terminen, in der Mittagspause oder nach Feierabend.

Überall in SH & Hamburg

Vom Büro in Neumünster bis zum Betrieb in Kiel, Lübeck oder Hamburg.

Ablauf

So läuft ein Shooting

Bei jedem Shooting derselbe Weg — vom ersten Satz bis zur fertigen Datei.

Vorab klären

Wir sprechen kurz über Anlass, Ort und gewünschte Bildsprache. Daraus ergibt sich der Umfang.

Licht planen

Ob Tageslicht, mobiles Studio oder Bühne: Das Licht entscheidet, wie nah das Ergebnis an deiner Vorstellung liegt.

Fotografieren

Am Termin führe ich durch den Ablauf, gebe Haltung und Tempo vor und löse im richtigen Moment aus.

Auswählen

Du bekommst eine geordnete Auswahl und die bearbeiteten Bilddateien in den Größen, die du brauchst.

Beispiele

Aus Shootings und Aufträgen

Portrait eines Mannes vor dunklem Hintergrund
Fashion-Portrait in kräftigen Farben
Paarportrait im Grünen
Sitzendes Portrait im weichen Studiolicht
Drei Frauen in Bademänteln und Handtuchturbanen am Fenster
Natürliches Portrait im Freien
Sara und Carlos küssen sich im Gegenlicht
Marta springt mit angewinkelten Beinen
Ein Hund steht auf einem sonnigen Waldweg
Technik & Ausgabe

Was am Ende bei dir landet

Bilddaten in der Auflösung, die du wirklich brauchst — nicht ein Ordner voller RAW-Dateien.

  • Bearbeitete JPEG-Dateien in Web- und Druckgröße
  • Auswahlgalerie zum Sichten und Teilen
  • Retusche auf Wunsch, besprochen im Vorfeld
  • Nutzungsrechte schriftlich festgehalten
  • Tageslicht, Studiolicht und mobile Blitzanlage
  • Im Studio in Neumünster oder mit dem mobilen Studio bei dir
  • Reportagestil bei Veranstaltungen
  • Lieferung per Downloadlink
diff --git a/site/social-media/index.html b/site/social-media/index.html index 115ffa5..ab6d04e 100644 --- a/site/social-media/index.html +++ b/site/social-media/index.html @@ -59,7 +59,7 @@

Foto- und Videomaterial im Format deiner Kanäle — wiederkehrend, planbar und über die Monate hinweg einheitlich.

-
Für wen

Wer damit arbeitet

Clubs & Veranstalter

Wiederkehrende Abende, Line-ups und Stimmung im Raum — als Story und als Feed-Beitrag.

Vereine & Sport

Spieltage, Training, Mannschaft und Ehrenamt, damit der Verein sichtbar bleibt.

Lokale Unternehmen

Team, Werkstatt, Laden, Produkt — der Alltag, der Vertrauen aufbaut.

Gastronomie & Hotels

Essen, Räume, Menschen und Anlässe, in konsistenter Optik.

Selbstständige & Creators

Kontinuierlich neues Material für Profil und Community.

Agenturen

Zulieferung von Foto- und Videomaterial nach Briefing und Formatvorgabe.

Formate

Was ich liefere

Foto-Sets

Aus einem Termin mehrere Motive für Wochen: Detail, Portrait, Szene, Atmosphäre.

Vertikale Clips

Kurze Videos im 9:16-Format für Reels, Shorts und TikTok.

Feed & Quadrat

4:5 und 1:1 zugeschnitten, damit nichts beschnitten wirkt.

Story-Serien

Kurzsequenzen, die einen Abend oder eine Aktion zusammenhängend erzählen.

Untertitel

Viele schauen ohne Ton — Untertitel sind eingeplant, nicht nachgerüstet.

Redaktionsrhythmus

Fester Turnus statt Aktionismus: ein Termin, verlässlich neue Inhalte.

Ablauf

Wiederkehrend statt einmalig

Kennenlernen

Kanäle, Zielgruppe, Tonalität und was bisher gut oder schlecht funktioniert hat.

Format festlegen

Wir legen fest, welche Formate und Längen ihr wirklich braucht.

Termine

Ein fester Rhythmus — monatlich, quartalsweise oder zu euren Anlässen.

Lieferung

Dateien benannt und sortiert, direkt einsatzbereit für die Planung.

Gut zu wissen

Kein Versprechen ohne Grundlage

  • Ich liefere Material — die Veröffentlichung bleibt bei euch
  • Formate und Umfang werden vorher festgelegt, nicht nachträglich
  • Bilder und Videos dürfen nur mit geklärten Rechten genutzt werden
  • Auf Wunsch einheitliche Bildsprache über mehrere Termine
Für Reichweite und Performance sind Redaktion und Community auf eurer Seite entscheidend. Ich sorge dafür, dass das Ausgangsmaterial stimmt — und dass es nach eurer Marke aussieht.
Einblicke

Material aus Terminen

Bewegung auf einer VeranstaltungTanzfläche bei einer FeierRedner auf einer Veranstaltung
+
Für wen

Wer damit arbeitet

Clubs & Veranstalter

Wiederkehrende Abende, Line-ups und Stimmung im Raum — als Story und als Feed-Beitrag.

Vereine & Sport

Spieltage, Training, Mannschaft und Ehrenamt, damit der Verein sichtbar bleibt.

Lokale Unternehmen

Team, Werkstatt, Laden, Produkt — der Alltag, der Vertrauen aufbaut.

Gastronomie & Hotels

Essen, Räume, Menschen und Anlässe, in konsistenter Optik.

Selbstständige & Creators

Kontinuierlich neues Material für Profil und Community.

Agenturen

Zulieferung von Foto- und Videomaterial nach Briefing und Formatvorgabe.

Formate

Was ich liefere

Foto-Sets

Aus einem Termin mehrere Motive für Wochen: Detail, Portrait, Szene, Atmosphäre.

Vertikale Clips

Kurze Videos im 9:16-Format für Reels, Shorts und TikTok.

Feed & Quadrat

4:5 und 1:1 zugeschnitten, damit nichts beschnitten wirkt.

Story-Serien

Kurzsequenzen, die einen Abend oder eine Aktion zusammenhängend erzählen.

Untertitel

Viele schauen ohne Ton — Untertitel sind eingeplant, nicht nachgerüstet.

Redaktionsrhythmus

Fester Turnus statt Aktionismus: ein Termin, verlässlich neue Inhalte.

Ablauf

Wiederkehrend statt einmalig

Kennenlernen

Kanäle, Zielgruppe, Tonalität und was bisher gut oder schlecht funktioniert hat.

Format festlegen

Wir legen fest, welche Formate und Längen ihr wirklich braucht.

Termine

Ein fester Rhythmus — monatlich, quartalsweise oder zu euren Anlässen.

Lieferung

Dateien benannt und sortiert, direkt einsatzbereit für die Planung.

Gut zu wissen

Kein Versprechen ohne Grundlage

  • Ich liefere Material — die Veröffentlichung bleibt bei euch
  • Formate und Umfang werden vorher festgelegt, nicht nachträglich
  • Bilder und Videos dürfen nur mit geklärten Rechten genutzt werden
  • Auf Wunsch einheitliche Bildsprache über mehrere Termine
Für Reichweite und Performance sind Redaktion und Community auf eurer Seite entscheidend. Ich sorge dafür, dass das Ausgangsmaterial stimmt — und dass es nach eurer Marke aussieht.
Einblicke

Material aus Terminen

Bewegung auf einer VeranstaltungTanzfläche bei einer FeierRedner auf einer VeranstaltungDrei Frauen mit Teetassen und HandtuchturbanenDrei Frauen lachen mit Orangenscheiben in den HändenSchlagzeuger blickt hinter seinen Becken hervor
diff --git a/site/ueber/index.html b/site/ueber/index.html index 4ecc6b9..5daa6b1 100644 --- a/site/ueber/index.html +++ b/site/ueber/index.html @@ -59,7 +59,7 @@

Ich bin Denny Schulz. Ich fotografiere Menschen, Marken und Musik — und produziere seit einigen Jahren genauso gern Bewegtbild.

-
Wer ich bin

Vom Reisen zur Kamera

Kurz

Ich bin gelernter Kaufmann, Ausbilder und Musiker. Zur Fotografie gekommen bin ich über Reisen, Freunde und die ersten Hochzeiten — erst als Begleitung, dann immer öfter mit der Kamera in der Hand.

Was mich fotografisch am meisten zieht, sind die nordischen Länder mit ihrem Licht und ihren Landschaften. Und Menschen, die wissen, dass sie nicht perfekt sein müssen, damit ein Bild stimmt.

„Kameras, Ersatztechnik und mobile Blitze bringe ich passend zum Termin mit."

Was ich mache

Drei Dinge, richtig

Menschen fotografieren

Portrait, Business, Model, Familie und Paar. Die Arbeit an Gesichtern, Licht und Ausdruck ist mein Kern.

Musik & Bühne begleiten

Konzerte, Bands und Musikvideos — als Musiker kenne ich beide Seiten der Bühne.

Bewegtbild produzieren

Von der Idee über den Dreh bis zu Schnitt, Farbkorrektur und Ton. Auch als Ergänzung zu einem Fototermin.

Mobiles Studio

Das Studio kommt zu dir

Komplette Ausrüstung inklusive autarker Blitzanlage — aufgebaut dort, wo deine Leute sind.

Studioequipment mit Logo von Denny Schulz FotografieAutarke BlitzanlageHintergründe, Blitze, Lichtformer

Nicht jedes Team kann für ein Shooting den Betrieb verlassen. Deshalb baue ich das Studio dort auf, wo deine Leute sowieso sind: im Besprechungsraum, in der Werkstatt, im Vereinsheim oder draußen vor der Halle.

Dabei ist die komplette Ausrüstung dabei — Hintergründe, Blitze, Lichtformer und Ersatztechnik. Die Blitzanlage ist autark, ich bin vor Ort also sofort einsatzbereit und brauche nichts aus deinem Haushalt.

Komplette Ausrüstung

Kamera, Objektive, Hintergründe, Blitze und Lichtformer kommen mit.

Autarke Blitzanlage

Das Licht ist im Gepäck und in wenigen Minuten aufgebaut.

Dein Ort, deine Zeit

Geschossen wird zwischen zwei Terminen, in der Mittagspause oder nach Feierabend.

Überall in SH & Hamburg

Vom Büro in Neumünster bis zum Betrieb in Kiel, Lübeck oder Hamburg.

Werte

Wie ich arbeite

  • Ehrliche Einschätzung, auch wenn sie gegen einen Auftrag spricht
  • Klarer Umfang und Preis vor der Buchung
  • Kein Bild ohne Einverständnis veröffentlicht
  • Sorgfältiger Umgang mit deinen Daten und Bilddaten
  • Aufnahmen bilden die Person ab, wie sie ist — nicht wie ein Filter sie zeigt
  • Retusche bleibt dezent und wird vorher besprochen
  • Nachbestellungen und spätere Nutzung sind ausdrücklich möglich
  • Fragen sind jederzeit willkommen, auch während des Termins
Zuhause & unterwegs

Neumünster und darüber hinaus

Ich fotografiere im Studio in Neumünster, mit dem mobilen Studio bei euch im Betrieb und unterwegs in Schleswig-Holstein, Hamburg und Kiel.

Mann im weißen Hemd vor dunklem Hintergrund, Softbox im Bild
Studioequipment mit Logo von Denny Schulz Fotografie
Nahaufnahme eines Rotfuchses
Netzwerk

Wo ich sonst zu finden bin

Zwei eigene Projekte, die zu desfoto gehören.

dennyschulz.de

Hochzeiten, Portraits und Business — die fotografische Arbeit unter eigenem Namen.

dennyapp.de

Websites und Web-Apps aus Neumünster — Design, Entwicklung und eigene Produkte.

Kontakt

Direkt erreichen

Region
Neumünster · Schleswig-Holstein
Anfragen
Antwort in der Regel innerhalb von 24 Stunden
+
Wer ich bin

Vom Reisen zur Kamera

Kurz

Ich bin gelernter Kaufmann, Ausbilder und Musiker. Zur Fotografie gekommen bin ich über Reisen, Freunde und die ersten Hochzeiten — erst als Begleitung, dann immer öfter mit der Kamera in der Hand.

Was mich fotografisch am meisten zieht, sind die nordischen Länder mit ihrem Licht und ihren Landschaften. Und Menschen, die wissen, dass sie nicht perfekt sein müssen, damit ein Bild stimmt.

„Kameras, Ersatztechnik und mobile Blitze bringe ich passend zum Termin mit."

Was ich mache

Drei Dinge, richtig

Menschen fotografieren

Portrait, Business, Model, Familie und Paar. Die Arbeit an Gesichtern, Licht und Ausdruck ist mein Kern.

Musik & Bühne begleiten

Konzerte, Bands und Musikvideos — als Musiker kenne ich beide Seiten der Bühne.

Bewegtbild produzieren

Von der Idee über den Dreh bis zu Schnitt, Farbkorrektur und Ton. Auch als Ergänzung zu einem Fototermin.

Studio

Im Studio in Neumünster oder bei dir vor Ort

Projekte können im eigenen Studio in Neumünster fotografiert werden — oder ich baue das mobile Studio inklusive autarker Blitzanlage dort auf, wo deine Leute sind.

Studioequipment mit Logo von Denny Schulz FotografieAutarke BlitzanlageHintergründe, Blitze, Lichtformer

Studio Neumünster

Ein eigenes Studio in Neumünster steht für Shootings bereit: kontrolliertes Licht, ruhiger Hintergrund und Platz für Konzeptarbeit. Gut für Portraits, Businessbilder und alles, was eine wiederholbare Optik braucht — unabhängig vom Wetter.

Mobiles Studio

Nicht jedes Team kann für ein Shooting den Betrieb verlassen. Deshalb baue ich das Studio dort auf, wo deine Leute sowieso sind: im Besprechungsraum, in der Werkstatt, im Vereinsheim oder draußen vor der Halle.

Dabei ist die komplette Ausrüstung dabei — Hintergründe, Blitze, Lichtformer und Ersatztechnik. Die Blitzanlage ist autark, ich bin vor Ort also sofort einsatzbereit und brauche nichts aus deinem Haushalt.

Komplette Ausrüstung

Kamera, Objektive, Hintergründe, Blitze und Lichtformer kommen mit.

Autarke Blitzanlage

Das Licht ist im Gepäck und in wenigen Minuten aufgebaut.

Dein Ort, deine Zeit

Geschossen wird zwischen zwei Terminen, in der Mittagspause oder nach Feierabend.

Überall in SH & Hamburg

Vom Büro in Neumünster bis zum Betrieb in Kiel, Lübeck oder Hamburg.

Werte

Wie ich arbeite

  • Ehrliche Einschätzung, auch wenn sie gegen einen Auftrag spricht
  • Klarer Umfang und Preis vor der Buchung
  • Kein Bild ohne Einverständnis veröffentlicht
  • Sorgfältiger Umgang mit deinen Daten und Bilddaten
  • Aufnahmen bilden die Person ab, wie sie ist — nicht wie ein Filter sie zeigt
  • Retusche bleibt dezent und wird vorher besprochen
  • Nachbestellungen und spätere Nutzung sind ausdrücklich möglich
  • Fragen sind jederzeit willkommen, auch während des Termins
Zuhause & unterwegs

Neumünster und darüber hinaus

Ich fotografiere im Studio in Neumünster, mit dem mobilen Studio bei euch im Betrieb und unterwegs in Schleswig-Holstein, Hamburg und Kiel.

Mann im weißen Hemd vor dunklem Hintergrund, Softbox im Bild
Studioequipment mit Logo von Denny Schulz Fotografie
Drei Frauen in Bademänteln und Handtuchturbanen am Fenster
Sara und Carlos stehen Arm in Arm im Grünen
Nahaufnahme eines Rotfuchses
Netzwerk

Wo ich sonst zu finden bin

Zwei eigene Projekte, die zu desfoto gehören.

dennyschulz.de

Hochzeiten, Portraits und Business — die fotografische Arbeit unter eigenem Namen.

dennyapp.de

Websites und Web-Apps aus Neumünster — Design, Entwicklung und eigene Produkte.

Kontakt

Direkt erreichen

Region
Neumünster · Schleswig-Holstein
Anfragen
Antwort in der Regel innerhalb von 24 Stunden
diff --git a/site/video/index.html b/site/video/index.html index a16e345..0521b15 100644 --- a/site/video/index.html +++ b/site/video/index.html @@ -81,7 +81,7 @@

Das Video wird erst nach deinem Klick von YouTube geladen (youtube-nocookie.com). Mehr dazu in der Datenschutzerklärung.

-
Formate

Welche Videos ich produziere

Musikvideo

Bildsprache zur Musik: Konzept, Locations, Licht und Schnittrhythmus auf den Track abgestimmt.

Imagefilm

Wer ihr seid, was ihr macht, warum es sich lohnt. Mit O-Tönen, B-Roll und klarer Dramaturgie.

Recruiting-Video

Jobs und Team echt zeigen, statt mit Text zu beschreiben. Auch als kurze Stellen-Clips.

Eventnachbericht

Tagung, Vereinsjubiläum, Konzert oder Firmenfeier — als Zusammenschnitt für danach.

Interviews & Statements

Sauber ausgeleuchtet und vertont, als Ergänzung zu Fotoaufträgen oder Pressematerial.

Social-Media-Clips

Hochkant oder quadratisch zugeschnitten, mit Untertiteln und den richtigen Längen für die Feeds.

Musik & Bühne

Konzerte, Bands und Musiker

Als Musiker kenne ich beide Seiten der Bühne. Live fotografiert wird mittendrin statt am Rand — oft im selben Termin wie ein Videoprojekt.

Sänger mit erhobenem Arm im blauen Bühnenlicht
Gitarrist als Silhouette im Bühnennebel
Nahaufnahme einer Hand an den Saiten einer E-Gitarre
Schlagzeuger am Drumset in Schwarzweiß
Bärtiger Sänger am Mikrofon mit erhobener Hand
Musiker in Fellkleidung im Wald, von unten fotografiert
Produktionsweg

So entsteht ein Video

Idee & Treatment

Ziel, Zielgruppe, Tonalität und Referenzen — kurz schriftlich festgehalten.

Drehplanung

Locations, Ablauf, Licht, benötigte Personen und Tageszeiten.

Dreh

Kamera-, Licht- und Tontechnik bringe ich mit. Du kümmerst dich um Abläufe und Menschen.

Schnitt & Ausgabe

Schnitt, Farbkorrektur, Ton, Untertitel und Export in den gewünschten Formaten.

Zusammenarbeit

Was ich von dir brauche

  • Was das Video erreichen soll
  • Wo es laufen wird (Website, YouTube, Instagram, Messe, Recruiting)
  • Gewünschte Länge und Format
  • Wer mitwirkt und welche Orte zur Verfügung stehen
Musik sollte entweder von dir stammen oder entsprechend lizenziert sein. Bei der Musikauswahl und bei Fragen zu Rechten unterstütze ich dich.

Kleinere Projekte sind oft in wenigen Tagen umsetzbar. Bei größeren Produktionen planen wir Vorlauf ein — vor allem, wenn Location oder Menschen gebucht werden müssen.

Einblicke

Hinter der Kamera

+
Formate

Welche Videos ich produziere

Musikvideo

Bildsprache zur Musik: Konzept, Locations, Licht und Schnittrhythmus auf den Track abgestimmt.

Imagefilm

Wer ihr seid, was ihr macht, warum es sich lohnt. Mit O-Tönen, B-Roll und klarer Dramaturgie.

Recruiting-Video

Jobs und Team echt zeigen, statt mit Text zu beschreiben. Auch als kurze Stellen-Clips.

Eventnachbericht

Tagung, Vereinsjubiläum, Konzert oder Firmenfeier — als Zusammenschnitt für danach.

Interviews & Statements

Sauber ausgeleuchtet und vertont, als Ergänzung zu Fotoaufträgen oder Pressematerial.

Social-Media-Clips

Hochkant oder quadratisch zugeschnitten, mit Untertiteln und den richtigen Längen für die Feeds.

Musik & Bühne

Konzerte, Bands und Musiker

Als Musiker kenne ich beide Seiten der Bühne. Live fotografiert wird mittendrin statt am Rand — oft im selben Termin wie ein Videoprojekt.

Sänger mit erhobenem Arm im blauen Bühnenlicht
Gitarrist als Silhouette im Bühnennebel
Zwei Bandmitglieder stehen Rücken an Rücken mit Gitarre
Nahaufnahme einer Hand an den Saiten einer E-Gitarre
Schlagzeuger am Drumset in Schwarzweiß
Musiker mit Dreadlocks vor einem Mikrofon
Schlagzeuger blickt hinter seinen Becken hervor
Bärtiger Sänger am Mikrofon mit erhobener Hand
Musiker in Fellkleidung im Wald, von unten fotografiert
Produktionsweg

So entsteht ein Video

Idee & Treatment

Ziel, Zielgruppe, Tonalität und Referenzen — kurz schriftlich festgehalten.

Drehplanung

Locations, Ablauf, Licht, benötigte Personen und Tageszeiten.

Dreh

Kamera-, Licht- und Tontechnik bringe ich mit. Du kümmerst dich um Abläufe und Menschen.

Schnitt & Ausgabe

Schnitt, Farbkorrektur, Ton, Untertitel und Export in den gewünschten Formaten.

Zusammenarbeit

Was ich von dir brauche

  • Was das Video erreichen soll
  • Wo es laufen wird (Website, YouTube, Instagram, Messe, Recruiting)
  • Gewünschte Länge und Format
  • Wer mitwirkt und welche Orte zur Verfügung stehen
Musik sollte entweder von dir stammen oder entsprechend lizenziert sein. Bei der Musikauswahl und bei Fragen zu Rechten unterstütze ich dich.

Kleinere Projekte sind oft in wenigen Tagen umsetzbar. Bei größeren Produktionen planen wir Vorlauf ein — vor allem, wenn Location oder Menschen gebucht werden müssen.

Einblicke

Hinter der Kamera

diff --git a/src/content.py b/src/content.py index 2902e7e..eec6005 100644 --- a/src/content.py +++ b/src/content.py @@ -145,17 +145,36 @@ SHOOTING_STEPS = [ }, ] -# Das mobile Studio: der Betrieb kommt mit Licht und Hintergrund zum Termin. +# Zwei Orte für Shootings: das eigene Studio in Neumünster und das mobile Studio, +# das mit kompletter Ausrüstung zum Termin kommt. STUDIO = { - "title": "Mobiles Studio", - "lead": "Das Studio kommt zu dir.", + "title": "Im Studio in Neumünster oder bei dir vor Ort", + "lead": ( + "Projekte können im eigenen Studio in Neumünster fotografiert werden — oder" + " ich baue das mobile Studio inklusive autarker Blitzanlage dort auf, wo" + " deine Leute sind." + ), + "ways": [ + { + "title": "Studio Neumünster", + "text": ( + "Ein eigenes Studio in Neumünster steht für Shootings bereit:" + " kontrolliertes Licht, ruhiger Hintergrund und Platz für" + " Konzeptarbeit. Gut für Portraits, Businessbilder und alles, was" + " eine wiederholbare Optik braucht — unabhängig vom Wetter." + ), + }, + { + "title": "Mobiles Studio", + "text": ( + "Nicht jedes Team kann für ein Shooting den Betrieb verlassen. Deshalb" + " baue ich das Studio dort auf, wo deine Leute sowieso sind: im" + " Besprechungsraum, in der Werkstatt, im Vereinsheim oder draußen vor" + " der Halle." + ), + }, + ], "text": [ - ( - "Nicht jedes Team kann für ein Shooting den Betrieb verlassen. Deshalb" - " baue ich das Studio dort auf, wo deine Leute sowieso sind: im" - " Besprechungsraum, in der Werkstatt, im Vereinsheim oder draußen vor" - " der Halle." - ), ( "Dabei ist die komplette Ausrüstung dabei — Hintergründe, Blitze," " Lichtformer und Ersatztechnik. Die Blitzanlage ist autark, ich bin" @@ -283,10 +302,11 @@ PHOTO_OVERVIEW = [ "image": "editorial-pose", }, { - "title": "Mobiles Studio", + "title": "Studio & mobil", "text": ( - "Komplette Ausrüstung inklusive autarker Blitzanlage, Hintergründen und " - "Lichtformern — aufgebaut an deinem Ort, statt umgekehrt." + "Shootings im eigenen Studio in Neumünster oder mit dem mobilen Studio " + "inklusive autarker Blitzanlage, Hintergründen und Lichtformern — " + "aufgebaut an deinem Ort, statt umgekehrt." ), "image": "business-portrait-sit", }, @@ -296,18 +316,23 @@ PHOTO_OVERVIEW = [ "Feiern, Events, Vereinsleben und Premieren. Dokumentarisch begleitet, " "ohne den Ablauf auszubremsen." ), - "image": "group-feier", + "image": "event-speaker", }, ] WORK_GALLERY = [ ("music-guitar-silhouette", "Gitarrist als Silhouette im Bühnennebel", "g-w3", "4x5", "50% 42%"), - ("free-fjord", "Steile Felsnadeln vor dem Meer", "g-w3", "4x5", "50% 50%"), + ("free-castle-lake", "Kleine Burg auf einer Insel in einem bewaldeten See", "g-w3", "4x5", "50% 50%"), ("music-strings", "Nahaufnahme einer Hand an den Saiten", "g-w2", "1x1", "50% 50%"), - ("free-cat", "Nahaufnahme einer getigerten Katze", "g-w2", "1x1", "50% 42%"), + ("business-hotel-orange", "Frauen im Bademantel halten Orangenscheiben vor ihre Gesichter", "g-w2", "1x1", "50% 50%"), ("business-portrait-dark", "Businessportrait im Studiolicht", "g-w2", "1x1", "50% 32%"), - ("free-fog-forest", "Nebel über einem Nadelwald", "g-w3", "3x2", "50% 45%"), + ("free-dog-husky", "Ein Hund auf einem sonnigen Waldweg", "g-w2", "1x1", "50% 45%"), ("editorial-colour", "Model-Shooting im Studio", "g-w3", "3x2", "50% 30%"), + ("music-dreadlocks", "Musiker mit Dreadlocks vor einem Mikrofon", "g-w3", "3x2", "50% 35%"), + ("couple-backlight-kiss", "Paar küsst sich im Gegenlicht", "g-w3", "4x5", "50% 45%"), + ("free-fog-forest", "Nebel über einem Nadelwald", "g-w3", "3x2", "50% 45%"), + ("free-cat", "Nahaufnahme einer getigerten Katze", "g-w2", "1x1", "50% 42%"), + ("couple-sun-silhouette", "Silhouetten eines Paares vor der Sonne", "g-w3", "3x2", "50% 50%"), ] PROCESS = [ @@ -344,8 +369,8 @@ PROCESS = [ FACTS = [ { - "title": "Mobiles Studio", - "text": "Komplette Ausrüstung mit autarker Blitzanlage, Hintergründen und Lichtformern — aufgebaut an deinem Ort.", + "title": "Studio & vor Ort", + "text": "Eigenes Studio in Neumünster oder mobiles Studio mit autarker Blitzanlage, Hintergründen und Lichtformern.", }, { "title": "Aus Neumünster", diff --git a/src/images.json b/src/images.json index 32ab62a..72fdd99 100644 --- a/src/images.json +++ b/src/images.json @@ -99,24 +99,6 @@ "alt": "Paar küsst sich vor hellem Hintergrund", "focus": "50% 30%" }, - { - "slug": "group-feier", - "raw": "1777033639756_1f5a9dc4_dennyschulz_-03904.jpg", - "alt": "Feiergesellschaft bei einer Veranstaltung", - "focus": "50% 36%" - }, - { - "slug": "group-outdoor", - "raw": "1784293233172_7a8a3ed9_dennyschulz_-08435.jpg", - "alt": "Gruppe posiert im Freien", - "focus": "50% 36%" - }, - { - "slug": "group-posiert", - "raw": "1784293233955_033a5079_dennyschulz_-08456.jpg", - "alt": "Gruppe steht zusammen vor der Kamera", - "focus": "50% 38%" - }, { "slug": "event-motion", "raw": "1776670469051_dc2993ae_dennyschulz_-04663.jpg", @@ -272,6 +254,202 @@ "raw": "dennyschulz_-03704.jpg", "alt": "Blick durch einen steinernen Torbogen in einen Garten", "focus": "50% 45%" + }, + { + "slug": "music-dreadlocks", + "source": "legacy", + "raw": "_DES3044.jpg", + "alt": "Musiker mit Dreadlocks vor einem Mikrofon", + "focus": "50% 35%" + }, + { + "slug": "music-drummer", + "source": "legacy", + "raw": "_DES3020.jpg", + "alt": "Schlagzeuger blickt hinter seinen Becken hervor", + "focus": "50% 45%" + }, + { + "slug": "music-banner", + "source": "legacy", + "raw": "_DES3765.jpg", + "alt": "Gitarrist vor einem beleuchteten Bandbanner", + "focus": "50% 40%" + }, + { + "slug": "music-neck", + "source": "legacy", + "raw": "_DES3679.jpg", + "alt": "Hand am Gitarrenhals im dunklen Bühnenlicht", + "focus": "50% 50%" + }, + { + "slug": "music-horns", + "source": "legacy", + "raw": "dennyschulz23-3347.jpg", + "alt": "Zwei Musiker trinken aus Trinkhörnern", + "focus": "50% 35%" + }, + { + "slug": "band-extinct-guitar", + "source": "legacy", + "raw": "dennyschulz_20231211-75.jpg", + "alt": "Zwei Bandmitglieder stehen Rücken an Rücken mit Gitarre", + "focus": "50% 30%" + }, + { + "slug": "band-extinct-group", + "source": "legacy", + "raw": "_DS_7981-51ff6640.jpg", + "alt": "Vier Bandmitglieder hintereinander in Schwarzweiß", + "focus": "50% 40%" + }, + { + "slug": "business-hotel-window", + "source": "legacy", + "raw": "dennyschulz23A-3958.jpg", + "alt": "Drei Frauen in Bademänteln und Handtuchturbanen am Fenster", + "focus": "50% 40%" + }, + { + "slug": "business-hotel-orange", + "source": "legacy", + "raw": "dennyschulz23A-3821.jpg", + "alt": "Frauen im Bademantel halten Orangenscheiben vor ihre Gesichter", + "focus": "50% 50%" + }, + { + "slug": "business-hotel-tea", + "source": "legacy", + "raw": "dennyschulz23-3732.jpg", + "alt": "Drei Frauen mit Teetassen und Handtuchturbanen", + "focus": "50% 45%" + }, + { + "slug": "business-hotel-laugh", + "source": "legacy", + "raw": "dennyschulz23A-3829-2.jpg", + "alt": "Drei Frauen lachen mit Orangenscheiben in den Händen", + "focus": "50% 45%" + }, + { + "slug": "editorial-studio-side", + "source": "legacy", + "raw": "dennyschulz_marta-02237.jpg", + "alt": "Marta im seitlichen Studiolicht vor dunklem Hintergrund", + "focus": "50% 30%" + }, + { + "slug": "editorial-balance", + "source": "legacy", + "raw": "dennyschulz_marta-01897.jpg", + "alt": "Marta balanciert sitzend mit angehobenem Bein", + "focus": "50% 40%" + }, + { + "slug": "editorial-leap", + "source": "legacy", + "raw": "dennyschulz_marta-01315-3132063d.jpg", + "alt": "Marta springt mit angewinkelten Beinen", + "focus": "50% 35%" + }, + { + "slug": "couple-park", + "source": "legacy", + "raw": "dennyschulz-5142.jpg", + "alt": "Sara und Carlos stehen Arm in Arm im Grünen", + "focus": "50% 30%" + }, + { + "slug": "couple-backlight-kiss", + "source": "legacy", + "raw": "dennyschulz-5191.jpg", + "alt": "Sara und Carlos küssen sich im Gegenlicht", + "focus": "50% 45%" + }, + { + "slug": "couple-forest-walk", + "source": "legacy", + "raw": "dennyschulz-4415.jpg", + "alt": "Sara und Carlos gehen Hand in Hand durch den Wald", + "focus": "50% 35%" + }, + { + "slug": "couple-sun-silhouette", + "source": "legacy", + "raw": "dennyschulz-2076.jpg", + "alt": "Die Silhouetten des Paars rahmen die tief stehende Sonne", + "focus": "50% 50%" + }, + { + "slug": "couple-laugh-walk", + "source": "legacy", + "raw": "dennyschulz-0368.jpg", + "alt": "Tamara und Tobi lachen auf einem Waldweg", + "focus": "50% 35%" + }, + { + "slug": "portrait-marina-snow", + "source": "legacy", + "raw": "dennyschulz_20240118-8156.jpg", + "alt": "Marina mit roten Zöpfen auf einem verschneiten Waldweg", + "focus": "50% 30%" + }, + { + "slug": "portrait-marina-sunset", + "source": "legacy", + "raw": "dennyschulz_20240118-9806.jpg", + "alt": "Marinas Silhouette vor orangefarbenem Abendhimmel", + "focus": "50% 45%" + }, + { + "slug": "free-dog-husky", + "source": "legacy", + "raw": "_DES9989.jpg", + "alt": "Ein Hund steht auf einem sonnigen Waldweg", + "focus": "50% 45%" + }, + { + "slug": "free-dogs-forest", + "source": "legacy", + "raw": "_DSC3383.jpg", + "alt": "Zwei Hunde liegen auf einem Waldweg", + "focus": "50% 50%" + }, + { + "slug": "free-cat-light", + "source": "legacy", + "raw": "_DES2313-2.jpg", + "alt": "Eine getigerte Katze schaut aus dem Fenster", + "focus": "50% 45%" + }, + { + "slug": "free-cat-white", + "source": "legacy", + "raw": "dennyschulz-5639-2.jpg", + "alt": "Eine weiße Katze mit aufgerichtetem buschigem Schwanz", + "focus": "50% 40%" + }, + { + "slug": "free-castle-lake", + "source": "legacy", + "raw": "20230830_dennyschulz-1039.jpg", + "alt": "Kleine Burg auf einer Insel in einem bewaldeten See", + "focus": "50% 50%" + }, + { + "slug": "free-swans", + "source": "legacy", + "raw": "_DSC0658.jpg", + "alt": "Zwei Schwäne auf ruhigem Wasser", + "focus": "50% 45%" + }, + { + "slug": "free-sparrow", + "source": "legacy", + "raw": "_DES1036.jpg", + "alt": "Ein Spatz sitzt auf einem Ast", + "focus": "50% 45%" } ] } diff --git a/src/pages.py b/src/pages.py index 2753797..6b00ea1 100644 --- a/src/pages.py +++ b/src/pages.py @@ -192,11 +192,16 @@ def marquee(items: list[str]) -> str: def studio_section(*, variant: str = "paper2", tight: bool = False) -> str: - """The mobile studio: complete kit including a self-sufficient flash system.""" + """The studio in Neumünster and the mobile studio with its self-sufficient flash kit.""" features = "".join( f'

{e(feature["title"])}

{e(feature["text"])}

' for feature in STUDIO["features"] ) + ways = "".join( + f'

{e(way["title"])}

' + f'

{e(way["text"])}

' + for way in STUDIO["ways"] + ) paragraphs = "".join(f"

{e(paragraph)}

" for paragraph in STUDIO["text"]) content = ( '
' @@ -212,14 +217,15 @@ def studio_section(*, variant: str = "paper2", tight: bool = False) -> str: "Hintergründe, Blitze, Lichtformer" "
" '
' + f'
{ways}
' + paragraphs + f'
{features}
' "
" ) return section( - kicker="Mobiles Studio", - title="Das Studio kommt zu dir", - lead="Komplette Ausrüstung inklusive autarker Blitzanlage — aufgebaut dort, wo deine Leute sind.", + kicker="Studio", + title=STUDIO["title"], + lead=STUDIO["lead"], content=content, variant=variant, tight=tight, @@ -335,7 +341,7 @@ def home() -> str:
ShootingsBusiness, Portrait, Familie und Minishootings unter einem Dach.
-
Mobiles StudioKomplette Ausrüstung inklusive autarker Blitzanlage vor Ort.
+
Studio & vor OrtEigenes Studio in Neumünster oder mobiles Studio inklusive autarker Blitzanlage bei dir.
Foto & VideoBeides aus einer Hand, damit Optik und Ton zusammenpassen.
Musik & BühneKonzerte, Bands und Musikvideos aus eigener Erfahrung.
@@ -520,8 +526,11 @@ def shootings() -> str: ("editorial-colour", "Fashion-Portrait in kräftigen Farben", "4x5", "50% 30%"), ("portrait-couple", "Paarportrait im Grünen", "4x5", "50% 30%"), ("business-portrait-stool", "Sitzendes Portrait im weichen Studiolicht", "3x2", "50% 35%"), - ("group-feier", "Feiergesellschaft bei einer Veranstaltung", "3x2", "50% 36%"), + ("business-hotel-window", "Drei Frauen in Bademänteln und Handtuchturbanen am Fenster", "3x2", "50% 40%"), ("portrait-natural", "Natürliches Portrait im Freien", "3x2", "50% 32%"), + ("couple-backlight-kiss", "Sara und Carlos küssen sich im Gegenlicht", "1x1", "50% 45%"), + ("editorial-leap", "Marta springt mit angewinkelten Beinen", "1x1", "50% 35%"), + ("free-dog-husky", "Ein Hund steht auf einem sonnigen Waldweg", "1x1", "50% 45%"), ] ), ) @@ -541,7 +550,7 @@ def shootings() -> str: right=ticks( [ "Tageslicht, Studiolicht und mobile Blitzanlage", - "Mobiles Studio direkt an deinem Ort", + "Im Studio in Neumünster oder mit dem mobilen Studio bei dir", "Reportagestil bei Veranstaltungen", "Lieferung per Downloadlink", ] @@ -643,8 +652,12 @@ def businessfotografie() -> str: [ ("business-portrait-dark", "Portrait eines Mannes vor dunklem Hintergrund", "4x5", "50% 28%"), ("business-portrait-stool", "Sitzendes Portrait im weichen Studiolicht", "4x5", "50% 35%"), + ("business-hotel-window", "Drei Frauen in Bademänteln und Handtuchturbanen am Fenster", "4x5", "50% 40%"), + ("business-hotel-tea", "Drei Frauen mit Teetassen und Handtuchturbanen", "4x5", "50% 45%"), ("gear-cases", "Kamerakoffer und Objektive vor einem Studiorack", "3x2", "50% 50%"), ("studio-setup", "Studioequipment mit Logo von Denny Schulz Fotografie", "3x2", "50% 45%"), + ("business-hotel-orange", "Frauen im Bademantel halten Orangenscheiben vor ihre Gesichter", "3x2", "50% 50%"), + ("business-hotel-laugh", "Drei Frauen lachen mit Orangenscheiben in den Händen", "3x2", "50% 45%"), ], columns="grid--2", ), @@ -749,6 +762,9 @@ def portrait_und_model() -> str: ("editorial-back", "50% 40%"), ("editorial-black", "50% 28%"), ("editorial-earring", "45% 28%"), + ("editorial-studio-side", "50% 30%"), + ("editorial-balance", "50% 40%"), + ("editorial-leap", "50% 35%"), ("portrait-natural", "50% 30%"), ("people-kiss", "50% 32%"), ] @@ -837,9 +853,13 @@ def familien_und_paare() -> str: ("portrait-natural", "50% 30%"), ("people-kiss", "50% 32%"), ("portrait-couple", "50% 30%"), - ("group-feier", "50% 36%"), - ("group-outdoor", "50% 36%"), - ("group-posiert", "50% 38%"), + ("couple-park", "50% 30%"), + ("couple-backlight-kiss", "50% 45%"), + ("couple-forest-walk", "50% 35%"), + ("couple-laugh-walk", "50% 35%"), + ("couple-sun-silhouette", "50% 50%"), + ("portrait-marina-snow", "50% 30%"), + ("portrait-marina-sunset", "50% 45%"), ] ) + "
", @@ -941,7 +961,9 @@ def minishootings() -> str: ("portrait-natural", "50% 28%"), ("business-portrait-studio", "50% 28%"), ("editorial-black", "50% 28%"), + ("editorial-studio-side", "50% 30%"), ("free-modern-portrait", "50% 30%"), + ("portrait-marina-snow", "50% 30%"), ] ) + "", @@ -1032,8 +1054,11 @@ def video() -> str: [ ("music-vocal-blue", "Sänger mit erhobenem Arm im blauen Bühnenlicht", "4x5", "50% 30%"), ("music-guitar-silhouette", "Gitarrist als Silhouette im Bühnennebel", "4x5", "50% 42%"), + ("band-extinct-guitar", "Zwei Bandmitglieder stehen Rücken an Rücken mit Gitarre", "4x5", "50% 30%"), ("music-strings", "Nahaufnahme einer Hand an den Saiten einer E-Gitarre", "1x1", "50% 50%"), ("music-drums", "Schlagzeuger am Drumset in Schwarzweiß", "1x1", "50% 45%"), + ("music-dreadlocks", "Musiker mit Dreadlocks vor einem Mikrofon", "1x1", "50% 35%"), + ("music-drummer", "Schlagzeuger blickt hinter seinen Becken hervor", "1x1", "50% 45%"), ("music-mic", "Bärtiger Sänger am Mikrofon mit erhobener Hand", "3x2", "50% 35%"), ("band-sagenbringer", "Musiker in Fellkleidung im Wald, von unten fotografiert", "3x2", "50% 30%"), ] @@ -1081,6 +1106,8 @@ def video() -> str: ("movement-light", "Lange Belichtung", "g-w2", "1x1", "50% 50%"), ("event-speaker", "Statement vor der Kamera", "g-w2", "1x1", "50% 30%"), ("event-venue", "Location vor dem Dreh", "g-w2", "1x1", "50% 45%"), + ("music-neck", "Licht auf Instrument und Hände", "g-w2", "1x1", "50% 50%"), + ("music-banner", "Bühne, Nebel und Gegenlicht", "g-w3", "3x2", "50% 40%"), ] ), ) @@ -1190,6 +1217,9 @@ def social_media() -> str: ("event-motion", "50% 45%"), ("event-dance", "50% 36%"), ("event-speaker", "50% 30%"), + ("business-hotel-tea", "50% 45%"), + ("business-hotel-laugh", "50% 45%"), + ("music-drummer", "50% 45%"), ] ) + "", @@ -1233,9 +1263,13 @@ def projekte() -> str: [ ("music-vocal-blue", "Sänger mit erhobenem Arm im blauen Bühnenlicht", "4x5", "50% 30%"), ("band-sagenbringer", "Musiker in Fellkleidung im Wald, von unten fotografiert", "4x5", "50% 30%"), + ("music-dreadlocks", "Musiker mit Dreadlocks vor einem Mikrofon", "4x5", "50% 35%"), + ("band-extinct-group", "Vier Bandmitglieder hintereinander in Schwarzweiß", "4x5", "50% 40%"), ("band-extinct", "Die Band Extinct steht hintereinander vor schwarzem Hintergrund", "3x2", "50% 45%"), ("music-mic", "Bärtiger Sänger am Mikrofon mit erhobener Hand", "1x1", "50% 35%"), ("music-drums", "Schlagzeuger am Drumset in Schwarzweiß", "1x1", "50% 45%"), + ("music-drummer", "Schlagzeuger blickt hinter seinen Becken hervor", "1x1", "50% 45%"), + ("music-horns", "Zwei Musiker trinken aus Trinkhörnern", "1x1", "50% 35%"), ("music-strings", "Nahaufnahme einer Hand an den Saiten einer E-Gitarre", "3x2", "50% 50%"), ] ) @@ -1260,6 +1294,12 @@ def projekte() -> str: ("free-fox", "Nahaufnahme eines Rotfuchses", "1x1", "50% 45%"), ("free-cat", "Nahaufnahme einer getigerten Katze im Seitenlicht", "1x1", "50% 42%"), ("free-arch-garden", "Blick durch einen steinernen Torbogen in einen Garten", "1x1", "50% 45%"), + ("free-castle-lake", "Kleine Burg auf einer Insel in einem bewaldeten See", "1x1", "50% 50%"), + ("free-swans", "Zwei Schwäne auf ruhigem Wasser", "1x1", "50% 45%"), + ("free-sparrow", "Ein Spatz sitzt auf einem Ast", "1x1", "50% 45%"), + ("free-cat-light", "Eine getigerte Katze schaut aus dem Fenster", "1x1", "50% 45%"), + ("free-cat-white", "Eine weiße Katze mit aufgerichtetem buschigem Schwanz", "1x1", "50% 40%"), + ("free-dogs-forest", "Zwei Hunde liegen auf einem Waldweg", "1x1", "50% 50%"), ] ), ) @@ -1270,6 +1310,8 @@ def projekte() -> str: [ ("free-portrait-light", "Frauenportrait im weichen Seitenlicht vor dunklem Hintergrund", "4x5", "50% 28%"), ("free-modern-portrait", "Portrait einer Frau mit Sonnenbrille", "4x5", "50% 30%"), + ("portrait-marina-sunset", "Marinas Silhouette vor orangefarbenem Abendhimmel", "4x5", "50% 45%"), + ("editorial-studio-side", "Marta im seitlichen Studiolicht vor dunklem Hintergrund", "4x5", "50% 30%"), ("movement-light", "Lichtspur aus einer langen Belichtung", "4x5", "50% 50%"), ] ), @@ -1402,6 +1444,8 @@ def ueber() -> str: [ ("business-portrait-studio", "Mann im weißen Hemd vor dunklem Hintergrund, Softbox im Bild", "4x5", "50% 28%"), ("studio-setup", "Studioequipment mit Logo von Denny Schulz Fotografie", "4x5", "50% 45%"), + ("business-hotel-window", "Drei Frauen in Bademänteln und Handtuchturbanen am Fenster", "4x5", "50% 40%"), + ("couple-park", "Sara und Carlos stehen Arm in Arm im Grünen", "4x5", "50% 30%"), ("free-fox", "Nahaufnahme eines Rotfuchses", "1x1", "50% 45%"), ], columns="grid--2", diff --git a/tests/test_site.py b/tests/test_site.py index a80108f..3b0d4d3 100644 --- a/tests/test_site.py +++ b/tests/test_site.py @@ -408,6 +408,17 @@ class Redesign(unittest.TestCase): for image in (SITE / "assets" / "img").glob(f"{slug}-*.webp"): self.fail(f"stale image built: {image.name}") + def test_wedding_crowd_photos_are_not_shipped(self): + """The operator asked to drop the wedding photos showing the guests.""" + manifest = json.loads(read(SRC / "images.json")) + slugs = {entry["slug"] for entry in manifest["images"]} + for slug in ("group-feier", "group-outdoor", "group-posiert"): + with self.subTest(slug=slug): + self.assertNotIn(slug, slugs) + self.assertEqual([], list((SITE / "assets" / "img").glob(f"{slug}-*.webp"))) + for file in HTML_FILES: + self.assertNotIn(slug, read(file)) + def test_sitemap_lists_the_new_route_only(self): sitemap = read(SITE / "sitemap.xml") self.assertIn("https://desfoto.de/shootings/", sitemap) @@ -454,6 +465,52 @@ class Redesign(unittest.TestCase): with self.subTest(file=rel, needle=needle): self.assertIn(needle, text) + def test_studio_in_neumuenster_is_offered_alongside_the_mobile_studio(self): + """Projects can also be photographed in the operator's own studio on site.""" + for rel in ( + "index.html", + "shootings/index.html", + "businessfotografie/index.html", + "ueber/index.html", + ): + text = read(SITE / rel) + for needle in ("Studio Neumünster", "Studio in Neumünster"): + with self.subTest(file=rel, needle=needle): + self.assertIn(needle, text) + + def test_portfolio_expansion_covers_more_of_the_public_work(self): + pages = { + "projekte": ( + "music-dreadlocks", + "music-horns", + "band-extinct-group", + "free-castle-lake", + "free-swans", + "free-sparrow", + "free-dogs-forest", + ), + "familien-und-paare": ( + "couple-park", + "couple-backlight-kiss", + "couple-forest-walk", + "couple-sun-silhouette", + "couple-laugh-walk", + "portrait-marina-snow", + ), + "portrait-und-model": ("editorial-studio-side", "editorial-balance", "editorial-leap"), + "businessfotografie": ( + "business-hotel-window", + "business-hotel-orange", + "business-hotel-tea", + "business-hotel-laugh", + ), + } + for rel, slugs in pages.items(): + text = read(SITE / f"{rel}/index.html") + for slug in slugs: + with self.subTest(page=rel, slug=slug): + self.assertIn(f"/assets/img/{slug}-1200.webp", text) + def test_music_and_free_work_portfolio_is_present(self): projekte = read(SITE / "projekte" / "index.html") video = read(SITE / "video" / "index.html") @@ -514,6 +571,24 @@ class Release(unittest.TestCase): self.assertIn('mktemp "$STACK_DIR/', deploy) self.assertIn('sudo mv "$stack_tmp" "$stack_file"', deploy) + def test_deploy_rebinds_the_site_tree_after_replacing_it(self): + """Regression: `rm -rf site` + tar replaces the bind-mount inode. + + A container that is merely running keeps the deleted directory mounted and + then serves an empty document root (every request 404), so both the release + path and the rollback path must recreate the container. + """ + deploy = read(ROOT / ".ocauto" / "deploy") + self.assertEqual(2, deploy.count("up -d --force-recreate --remove-orphans")) + self.assertIn("docker exec desfoto-web-1 wget -q --spider http://127.0.0.1/", deploy) + + def test_verify_hook_covers_the_renamed_route(self): + verify = read(ROOT / ".ocauto" / "verify") + self.assertIn('check_redirect "$base/fotografie/" "$base/shootings/"', verify) + self.assertIn("""check_not_contains "$base/" 'href="/fotografie/'""", verify) + self.assertNotIn('/fotografie/ /businessfotografie/', verify) + self.assertNotIn("hero-studio-1200.webp", verify) + def test_deploy_hooks_are_executable(self): import os