Documentary camera. Tape damage. Dead channels. Corporate/educational uncanny.
Tenets
- Handheld / locked security cam language
- Timestamp / tracking UI optional (comp)
- VHS blur, chroma bad, tracking lines
- Mundane spaces made wrong
- Less monster, more implication
Recipe
Target: 4:3-feeling tape footage, ~480p, wide 24 mm lens at chest height, desaturated (about 60 % saturation), heavy vignette (0.5), practical-light-only scene.
- Lower the render cost with
render_preseteevee_finalatresolution_percentage50 (tape is soft; do not render clean 1080p). light_righorror_practical(one warm spot, one sickly green point) so the room is lit like a flashlight/camcorder scene.camera_riglens_mm24,elevation_deg0 to 5,fill0.5,dof_fstopNone for deep focus; useaspect16:9(or1:1for a security feed).- Handheld: add an F-Curve Noise modifier to the camera's
locationandrotation_eulercurves (fcurve.modifiers.new('NOISE'), strength about 0.01 m / 0.01 rad, scale 6 frames). A locked security cam gets no noise. comp_gradehorror_vhs(bloom, desaturation, lens distortion, 2 px pixelation, vignette 0.5). Timestamp/REC overlays are a Text object or an image strip composited last.
import runpy
skills = "<skills_dir>" # parent folder of this skill (the plugin's skills/ directory)
target = "SM_Asset" # object to style / dress
r = {}
r["render"] = runpy.run_path(f"{skills}/rendering/scripts/render_preset.py", init_globals={"ARGS": {"preset": "eevee_final", "resolution_percentage": 50}})["result"]
r["light"] = runpy.run_path(f"{skills}/lighting/scripts/light_rig.py", init_globals={"ARGS": {"preset": "horror_practical", "target": target}})["result"]
r["camera"] = runpy.run_path(f"{skills}/camera-cinematography/scripts/camera_rig.py", init_globals={"ARGS": {"name": "CAM_Tape_01", "target": target, "lens_mm": 24, "elevation_deg": 3, "fill": 0.5, "aspect": "16:9"}})["result"]
r["grade"] = runpy.run_path(f"{skills}/compositing/scripts/comp_grade.py", init_globals={"ARGS": {"preset": "horror_vhs", "vignette": 0.5}})["result"]
result = r