Repository navigation
Put a floor under the camera, and make its height a setting - #6
Merged
Merged
Conversation
A cap answers how loud a camera move is allowed to be. It never answers whether it should blow at all, and that second question is the one somebody in the seat is actually asking. Measured across two fifteen minute cuts, capping alone left the fan on for 75 per cent of an action sequence and 71 per cent of a dialogue-heavy film, nearly all of it a murmur below the cap produced by nothing but the camera moving. wind.series takes a gate now: below it, with nothing in the film agreeing, a moving camera is not wind and the fan is off. 0.25, from measuring both cuts at seven heights. They go silent for 59 and 68 per cent of their running time against 25 and 29 before. What makes the height cheap to choose is that it costs nothing real: a cause is never gated, so the caused fraction is identical at every height tried, 19.3 per cent on one film and 12.4 on the other. Raising this can only ever remove wind the camera invented. There is a test that says so at four heights including 1.0. Not a deletion, deliberately. A forward dolly is real evidence of travel and is sometimes the only evidence there is, which is why the cap was a cap. This lets it speak quietly and stops it muttering. The height is a setting because it is a judgement about a room and a fan, and the person who owns those should not have to own wind.py. It is the first server-side setting this studio has had, so it arrives with somewhere to live: analysis.json beside the scores, an /api/analysis endpoint, and an Analysis page in the admin. Global rather than per film, because "how much wind do I want in this room" has the same answer for every film in it, and a setting that must be given twenty times is one nobody changes. Two details worth keeping. The stored field is a pointer, because zero is a real answer meaning the floor is off and a plain float cannot tell that from a file that does not mention it. And a Go test reads CARRIED_GATE out of wind.py and fails if the two languages disagree about the default: nothing else connects them, and a studio quietly passing a different number would produce scores that behave unlike the composer's own documentation with no symptom anybody could name. Nothing here touches a score that already exists. The setting says so on the page, because a number changing while nothing moves is exactly how a setting earns a reputation for doing nothing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A cap answers how loud a camera move is allowed to be. It never answers whether it should blow at all, and that second question is the one somebody in the seat is actually asking. Measured across two 15-minute cuts, capping alone left the fan on for 75% of an action sequence and 71% of a dialogue-heavy film, nearly all of it a murmur below the cap produced by nothing but the camera moving.
wind.seriestakes agatenow: below it, with nothing in the film agreeing, a moving camera is not wind and the fan is off.Why 0.25
Both cuts, seven heights:
The caused column never moves. A cause is never gated, so raising this can only ever remove wind the camera invented, and no height costs a gust the film actually gave. There is a test asserting that at four heights including 1.0.
Not a deletion, deliberately: a forward dolly is real evidence of travel and is sometimes the only evidence there is, which is why the cap was a cap. This lets it speak quietly and stops it muttering.
The setting
The height is a judgement about a room and a fan, and the person who owns those should not have to own
wind.py. This is the studio's first server-side setting, so it arrives with somewhere to live:analysis.jsonbeside the scores,/api/analysis, and an Analysis page in the admin. Global rather than per film — "how much wind do I want in this room" has the same answer for every film in it, and a setting that must be given twenty times is one nobody changes.Two details worth keeping:
CARRIED_GATEout ofwind.pyand fails if the two languages disagree about the default. Nothing else connects them, and a studio quietly passing a different number would produce scores that behave unlike the composer's own documentation, with no symptom anybody could name. Mutation-tested.Nothing here touches a score that already exists, and the page says so — a number changing while nothing moves is how a setting earns a reputation for doing nothing.
758 unit tests, 18 browser specs (two new, driving the slider through the API to the file and back), 318 composer tests.
🤖 Generated with Claude Code