A clean camera research CSV can still contain unanswered questions
A camera setup note often mixes two different problems: a file that is hard to share and a question that nobody has answered. Checking the file can help with the first problem. It cannot settle the second.
The Camera source log checker is a small, local Python utility for this distinction. It checks the structure of a research CSV without contacting a camera, fetching its manual or making network requests. The source, example file and tests are available under the MIT license. Python 3.9 or later is required; there are no additional packages to install.
Give each question an evidence state
The log has six columns: model, question, answer, source_url, checked_on and status. Use the exact model label rather than a product-family name when recording a real device.
The three status values have different requirements:
| Status | What the row records | Required completion fields |
|---|---|---|
documented |
An answer associated with a source | Answer, date and source URL |
observed |
A result you recorded yourself | Answer and date |
unconfirmed |
A question still awaiting evidence | Model and question; completion fields may be blank |
A placeholder row can preserve an open question without suggesting a successful test:
model,question,answer,source_url,checked_on,status
Example Camera,Which viewing device will I use?,,,,unconfirmed
Replace the placeholder with your own model and question. Leaving an answer blank is more useful than supplying a guess merely to complete the sheet.
Read a finding before changing the answer
Save the downloaded source as camera_source_log.py, then run:
python3 camera_source_log.py research.csv
python3 camera_source_log.py research.csv --json
The checker reports missing columns, blank model or question fields, repeated model/question pairs, unsupported status values and invalid dates. Dates must be real calendar dates written as YYYY-MM-DD. Duplicate comparisons ignore capitalization and surrounding spaces.
A documented answer needs an absolute HTTP or HTTPS source URL. URLs containing a username or password generate a finding, so remove embedded login details before sharing the notes. That check is limited: it does not find every secret that might appear in an answer, a query string or another part of the file.
The tool uses Python's CSV reader. Quoted cells matter when a question or answer contains a comma; the Python CSV documentation explains the format and reader behavior. Edit the file in a CSV-aware application rather than treating every comma as a column separator.
Keep the exit code separate from the conclusion
Exit code 0 means the checklist found no structural issues. Code 1 means findings were reported. Code 2 means the file could not be read.
None of these outcomes verifies a manufacturer's statement, checks compatibility or proves that a viewing setup works. A log containing only well-formed unanswered questions can pass. Read the source, record the observation and decide whether the answer is supported separately.
IP Camera Hub publishes documentation-led camera buying and setup references. This utility organizes the notes behind that work. The CameraViewer app remains in development, with physical-camera tests pending.