Skip to content

CastFi v0.9.13 · Update

Choose a tag to compare

@Ghostseller Ghostseller released this 05 Sep 17:45
· 16 commits to main since this release

CastFi v0.9.13

사용자 제보에서 확인된 ASIO · DSD · 진단 문제를 근본 수정한 업데이트입니다(2026-09-06). FiiO 계열
DAC 의 ASIO 인식, 드라이버 멈춤 뒤 DSD 배율 고정, 진단 무응답, 외장 애플뮤직 업샘플 등을 고쳤고,
ASIO 드라이버를 이름이 아니라 드라이버 패키지 구조로 잇는 범용 ASIO 결속을 도입했습니다.
PC 단독 업데이트입니다(Android 앱 연동 항목은 최신 Android 앱에서 동작합니다).

한국어

수정 (v0.9.13)

재생 · 오디오 출력(ASIO)

  • FiiO 계열(K17 · M17 · K15 · WARMER R2R 등)에서 이미 설치된 FiiO ASIO 드라이버를 인식하지 못해
    "제조사 ASIO 드라이버 설치 필요"로 안내되고 DSD 업샘플이 켜지지 않던 문제
    를 고쳤습니다. 장치
    이름에 브랜드가 없거나(모델명만 표시 · "Warmer 2.0"처럼 브랜드·모델이 전혀 없는 경우) 드라이버
    이름과 달라 잇지 못했습니다. 이제 모델명 별칭에 더해 USB 장치의 벤더 ID를 근거로 잇습니다.
    이름과 무관하게 FiiO 장치임이 확인되면 그 드라이버를 씁니다. 벤더 ID 가 다르거나 없으면 종전처럼
    근거 없음으로 두어 다른 제조사 드라이버로 잘못 잇지 않습니다. 제보된 "스포티파이가 중간중간 잠깐
    멈춤"도 같은 원인이었습니다(드라이버를 못 이어 자동 가동이 45초마다 출력장치를 뮤트→실패→해제
    반복).

  • ASIO 드라이버가 방금 멈춘(응답 없음) 직후 재시도에서 DSD 배율이 128로 고정되던 문제를
    고쳤습니다. 방금 멈춘 드라이버는 정상 배율도 잠시 거부하는데, 앱이 그 거부를 "이 DAC 은 그 배율
    미지원"으로 확정해 스트리밍은 사다리를 내리고(DSD256→128) 파일 재생은 이번 실행 내내 기억했습니다.
    이제 멈춤 직후 5분 동안의 배율 거부는 "지금은 판정 불가"로만 다루어 배율을 낮추지 않고, "잠시 뒤
    다시 켜 주세요(DSD256은 낮추지 않았습니다)"로 안내합니다. 제보에서 "HiBy ASIO 를 지정했는데 다른
    드라이버를 잡는 것 같다"고 보였던 현상도 실제로는 이 보호 동작이었습니다.

  • 외장 애플뮤직 + PCM 업샘플링이 동작하지 않던 문제를 고쳤습니다. 외장 애플뮤직은 공유 출력에서
    재생 세션이 수 초~수십 초마다 끊겨 업샘플이 자동으로 꺼졌습니다. 이제 DSD 업샘플과 같은 방식으로
    애플뮤직 출력을 CastFi 경로로 옮겨 PCM 업샘플도 유지합니다.

  • DSD 설정을 바꾼 직후(출력이 재구성되는 순간) DSD 가 꺼지고 PCM 으로 바뀌던 문제를 고쳤습니다.
    출력 전환 과도구간의 재계획이 DSD 의도를 잃어 PCM 계획을 만들었고, 재개 시 DSD 개시와 충돌해
    되돌리면서 DSD 가 꺼졌습니다. 모든 DAC 공통이었습니다.

DSD 업샘플 재생(곡 전환 · 시크)

  • DSD 업샘플 재생 중 곡이 넘어가거나 시크할 때 "틱"과 함께 출력이 잠시 끊기고 다시 잠기던 문제를
    근본 수정했습니다. 곡 경계에서 다음 곡 준비가 잠깐 늦어진 것을 "변환이 실시간을 못 따라간다"로
    오판해 정상 세션을 종료하던 정책이 직접 원인이었고, 시크 직후의 처리 순서 경합 4종도 함께
    고쳤습니다. 이제 경계에서는 준비가 끝날 때까지 무음으로 기다리며 세션과 DSD 잠금을 유지합니다.
    시크를 여러 번 한 뒤 곡 끝 자동 진행에서 홈 화면이 이전 곡을 계속 보여주던 문제도 고쳤습니다.
    (실제 성능 미달로 인한 강등 동작은 그대로입니다.)

내 음악 · NAS

  • 큐에 곡이 남아 있는데 곡이 끝나면 다음 곡으로 넘어가지 않고 멈추던 문제를 근본 수정했습니다.
    자동 진행 감시가 예외 한 번에 죽으면 이후 모든 곡이 끝에서 멈췄습니다. 이제 감시는 어떤 예외에도
    멈추지 않고, 죽어 있으면 자동으로 다시 시작하며, 원인을 로그에 남깁니다.

  • NAS(Synology)에서 없어진 곡이 목록에 남아 "제목만 바뀌고 재생되지 않던" 문제를 고쳤습니다.

    • 존재하지 않는 곡을 정상 응답으로 위장하지 않습니다. 소스가 실제로 열린 뒤에만 성공으로 답하고,
      없으면 명확히 "없음"으로 답해 폰·렌더러가 다음 곡으로 넘어갑니다.
    • NAS 스캔이 NAS 미디어 색인만 믿지 않고 실제 파일 시스템과 대조해 유령 항목을 정리합니다(부재가
      확인된 항목만 삭제 · 통신이 불안정하면 삭제하지 않음).
    • 감시 폴더 밖에서 재생해 색인된 파일이 지워져도 정리되지 않던 항목도 전체 스캔에서 정리합니다
      (파일 부재가 확정될 때만 · 접근 불가·드라이브 분리는 보류).
  • NAS 인증서가 자동 갱신된 뒤 모든 NAS 스트림이 실패하던 문제를 고쳤습니다. 처음 저장한 인증서
    지문과 달라지면 무조건 거부했는데, 이제 표준 CA 검증을 통과한 정상 갱신이면 지문을 갱신합니다
    (자체서명 인증서로의 변경은 종전대로 거부).

  • NAS 의 DFF 파일을 폰·네트워크로 보낼 때 비트 순서가 뒤집혀 초음파 대역 잡음이 올라가던 문제를
    고쳤습니다. 가청대역 수치는 거의 변하지 않아 늦게 발견됐지만, 20~100kHz 잡음이 약 17dB 높았고
    실제 DAC 에서는 들리는 수준이었습니다. PC 로컬 재생·업샘플·오프라인 변환은 이 경로를 타지 않아
    영향이 없었습니다.

음장 · EQ

  • 크로스피드를 켰다 끄면 EQ 가 "적용 중"으로 남거나 비트퍼펙트로 돌아오지 않던 문제를
    고쳤습니다. 크로스피드가 사용자 EQ 의 켜짐/꺼짐을 강제로 바꾸고 있었습니다. 이제 공간 효과는 EQ
    상태를 건드리지 않고, 마지막 공간 효과를 끄면 원본 경로로 복원됩니다.

  • 헤드폰 매칭 카탈로그의 일부 측정 사이트에서 어떤 기종을 골라도 "측정 없음"으로 나오던 문제를
    고쳤습니다. 카탈로그에 표시명이 저장돼 실제 데이터 키와 달랐습니다.

진단 · 표시

  • [GPU 진단]이 오류로 멈추거나, 오디오 출력의 [지원 검사]를 눌러도 아무 반응이 없던 문제를
    고쳤습니다. 두 진단 모두 장치·드라이버를 실제로 여는데, 응답하지 않는 드라이버를 만나면 영영
    기다렸습니다. 이제 시한(GPU 진단 90초 · 지원 검사 60초)을 두고, 시한을 넘기면 어디서 멈췄는지와
    다음 행동(다른 앱 점유 확인 · 장치 재연결)을 안내합니다.

  • 화면·안내 문구에 필터의 내부 이름(예: poly-sinc-24-mp)이 그대로 노출되던 문제를 고쳤습니다.
    클래식 계열을 고르면 홈·최종 선택 요약이 원시 이름을 출력했습니다. 모든 표면에서 제품 이름
    (예: Classic 24 Minimum)으로 표시합니다.

  • 영어 모드에서 기기 연결 승인 다이얼로그가 한국어로 나오던 문제를 고쳤습니다. 새로 추가된
    화면도 영어 번역을 갖춥니다.

보안 · 개인정보

  • 기기 페어링의 장기 자격증명을 Windows 사용자 계정에 묶인 암호화로 보호해 저장하고, 기존 저장분은
    첫 실행 시 자동 변환합니다(재페어링 불필요).
  • 인증 없는 LAN 전용 경로(스트림 · 다른 PC 제어 · NAS 연결 등)가 인터넷 출처 요청을 받지 않게
    했습니다(포트포워딩·VPN 환경 심층방어). 페어링의 "이 PC 에서 허용" 승인은 이 PC 화면에서만
    가능합니다.
  • NAS 오류 응답에 NAS 절대 경로를 싣지 않습니다.

추가·개선 (v0.9.13)

범용 ASIO 결속 — 이름이 아니라 드라이버 패키지 구조로 잇습니다

  • 출력 장치와 ASIO 드라이버를 드라이버 패키지 구조로 잇는 범용 결속을 도입했습니다. 지금까지는
    장치 이름의 브랜드·모델 토큰과 USB 벤더 ID 로만 드라이버를 골랐기 때문에, 이름에 브랜드가 없거나
    (Windows 가 "스피커"로만 부르는 DAC) 별칭 표에 없는 제조사는 DSD 업샘플이 켜지지 않았습니다.
    이제 설치된 ASIO 드라이버와 출력 장치를 각각 조사해 같은 패키지에서 왔다는 증거가 있을 때만
    잇습니다. 두 가지 증거를 인정합니다.

    • Thesycon 계열(FiiO · Gustard · HiBy · iFi 등 다수 USB DAC) 설치 패키지의 매니페스트: 장치의
      INF 원본명 · ASIO CLSID · 등록 DLL 이 한 문서로 이어질 때.
    • 드라이버가 자기 옆에 두는 선언 파일(Amanero/Comtrue 계열 "USB Audio ASIO" 류): CLSID · USB
      VID/PID · DLL 이름이 실제 장치와 일치할 때. Windows 표준 클래스 드라이버 위에서 도는 벤더 ASIO
      도 이 경로로 잇습니다.
    • 장치의 드라이버 패키지(또는 그 소프트웨어 구성요소)의 INF 가 ASIO 등록을 직접 담고 있을 때:
      Windows 가 그 장치의 드라이버 일부로 설치한 ASIO 임이 문서로 증명되는 경우입니다.
  • 추측하지 않습니다. 증거가 하나의 드라이버·하나의 장치로 유일할 때만 자동으로 잇고, 후보가 둘
    이상이면(같은 제조사 DAC 두 대 등) 처음 한 번 "어느 드라이버를 쓸지" 묻는 창이 뜹니다. 후보는
    구조 증거가 있는 드라이버만 보여 주며 추천이나 기본 선택은 없습니다. 고른 드라이버는 실제 재생
    개시에 성공한 뒤에만 기억하고, 증거가 없는 드라이버는 종전처럼 열지 않습니다. 이름·벤더 ID 경로와
    장치별 명시 지정은 그대로이며, 명시 지정이 항상 우선합니다.

  • 기억한 결속은 장치의 물리 식별자(컨테이너 · 장치 노드 · 하드웨어 ID)와 드라이버 패키지 식별자에
    묶입니다. 드라이버를 재설치하거나 다른 장치를 꽂으면 다시 판정합니다. 방금 멈춘 드라이버의 레이트
    거부나 "이 레이트만 미지원"은 결속 실패로 치지 않습니다.

  • 진단 과정에서 어떤 ASIO 드라이버도 열지 않습니다. 실제 개시는 종전과 같은 격리된 자식 프로세스에서
    하며, 실패해도 다른 드라이버를 대신 열지 않습니다.

  • 오류 제보 진단에 ASIO 발견 정보가 포함됩니다. 설치된 ASIO 드라이버 목록(상태·버전), 출력
    장치의 드라이버 패키지 정보, 결속 판정과 사유가 실려 제보 한 건으로 "왜 드라이버를 못 이었는지"를
    지원에서 바로 확인할 수 있습니다. 개인정보는 싣지 않습니다(장치 시리얼 제거 · 경로 제외 · 항목 수 상한).

DSD · 업샘플링

  • 352.8kHz · 384kHz 소스도 DSD 업샘플할 수 있게 했습니다(이전에는 176.4/192kHz 까지).
    352.8k/384k → DSD64 조합만 배율 규칙상 제외됩니다.

  • DSD512 이상 조합 안내 2종을 추가했습니다. Standard 계열은 DSD 를 직접 처리하지 않는 DAC 에서
    잡음이 들릴 수 있고, Trellis Direct 는 곡 끝에서 아티팩트가 들릴 수 있어, 해당 조합을 고를 때
    안내하고 Adaptive 계열을 권장합니다.

  • 일부 조합(DSD64 등)의 자동 헤드룸을 안전한 값으로 되돌렸습니다. 완화된 값이 정상 음량의
    실음악에서 가청 잡음을 냈습니다. 청취로 확인된 조합만 예외로 둡니다.

  • Trellis Direct 의 DSD512 · 1024 조합에 곡 끝 잡음 보호(Direct Safe)를 확장했습니다.

Android 앱 연동(최신 Android 앱 필요)

  • 기기 연결 승인 화면: 폰이 PC 와 처음 연결할 때 PC 화면에 기기 이름과 6자리 확인 코드가 뜨고
    [허용]/[거부]로 승인합니다. 이후에는 자동으로 인증됩니다.
  • 폰에서 PC 연산으로 DSD 변환 스트리밍: 폰 큐의 곡(PC 라이브러리 · NAS · 폰 로컬 파일)을 PC 가
    DSD 로 변환해 폰의 USB DAC 로 보냅니다. 변조 방식·차수·필터를 폰에서 고를 수 있고, 48kHz 계열
    소스도 지원합니다.
  • 폰이 DLNA 렌더러로 PC/NAS 곡을 직접 재생할 수 있게 했습니다(PC 발급 주소 · 렌더러 제어권
    인계). 까다로운 렌더러용 실시간 변환도 이 경로에서 동작합니다.
  • 폰 다운로드(원격→폰 저장)를 위한 원본 파일명·크기·수정시각을 목록에 제공하고, 대기열 항목마다
    고유 식별자를 부여해 같은 곡이 두 번 있어도 항목 단위로 고를 수 있습니다.
  • 상태 폴링 경량화: 앨범아트·앱 아이콘이 바뀌지 않으면 다시 보내지 않습니다(매초 응답 약 240KB →
    1.2KB). 폰 메모리 사용이 크게 줄고, PC 화면과 기존 앱은 영향이 없습니다.
  • Android 사운드 화면 연동(현재 사운드 상태 스냅숏 · 헤드폰 매칭 카탈로그 동기화)과 폰 수동 오류
    제보의 PC 릴레이를 추가했습니다.

기존 라이브러리 · 설정 · 재생큐는 그대로 유지됩니다(NAS 유령 항목 정리는 실제로 없는 파일에만
적용됩니다).

English

Fixes in v0.9.13

Playback / audio output (ASIO)

  • Fixed FiiO devices (K17, M17, K15, WARMER R2R and similar) not being matched to the installed
    FiiO ASIO driver
    , which showed "manufacturer ASIO driver required" and kept DSD upsampling off.
    The Windows device name either carried only the model name or no brand/model at all (e.g.
    "Warmer 2.0"), so it could not be linked to the driver name. In addition to model-name aliases,
    CastFi now links by the USB vendor ID: if the device is confirmed to be FiiO, that driver
    is used regardless of its name. If the vendor ID differs or is missing, it stays "no evidence"
    as before, so another vendor's driver is never picked. The reported "Spotify pauses briefly
    every so often" had the same cause (the unmatched driver made auto-start mute the output,
    fail and unmute every 45 seconds).

  • Fixed the DSD rate getting stuck at 128 right after an ASIO driver had just hung. A driver
    that just stopped responding briefly rejects even normal rates; CastFi treated that as "this
    DAC does not support the rate", stepping the streaming ladder down (DSD256 to 128) and, for file
    playback, remembering it for the rest of the session. For 5 minutes after a hang, a rate
    rejection is now treated as "cannot decide yet", the rate is not lowered, and the message reads
    "try again shortly (DSD256 was not lowered)". The report that "HiBy ASIO was selected but
    another driver seems to be used" was actually this protective behavior.

  • Fixed external Apple Music + PCM upsampling not working. In shared output, Apple Music's
    playback session dropped every few seconds to tens of seconds, which switched upsampling off.
    Apple Music's output is now moved onto the CastFi path the same way DSD upsampling does, so PCM
    upsampling stays on.

  • Fixed DSD switching off (falling back to PCM) right after changing a DSD setting while the
    output was being rebuilt. The transition re-plan lost the DSD intent and produced a PCM plan,
    which then conflicted with the DSD start on resume and rolled back to DSD off. This affected
    all DACs.

DSD upsampled playback (track change / seek)

  • Fixed the "tick" with a brief dropout and re-lock when a track changed or you seeked during
    DSD upsampled playback.
    A short delay preparing the next track at the boundary was misjudged
    as "conversion cannot keep up in real time", which tore down a healthy session; four
    ordering races right after a seek were fixed alongside. At a boundary CastFi now waits
    silently until the next segment is ready, keeping the session and the DSD lock. Also fixed the
    home screen still showing the previous track after several seeks followed by auto-advance.
    (Downgrades caused by genuine real-time shortfall are unchanged.)

My Music / NAS

  • Fixed playback stopping at the end of a track even though the queue had more. One
    exception killed the auto-advance monitor, after which every track stopped at its end. The
    monitor now survives any exception, restarts itself if it is found dead, and logs the cause.

  • Fixed tracks that no longer exist on the NAS (Synology) staying listed and "only the title
    changing, nothing playing".

    • A missing source is no longer disguised as a normal response. Success is reported only after
      the source has actually opened; otherwise a clear "not found" lets the phone or renderer
      move to the next track.
    • The NAS scan no longer trusts the NAS media index alone; it cross-checks the real file
      system and removes ghost entries (only entries confirmed missing are deleted; nothing is
      deleted while the connection is unstable).
    • Entries indexed from files played outside watched folders, which no scan used to visit, are
      now cleaned up in a full scan (only when the file is confirmed absent; inaccessible paths
      and detached drives are held, not deleted).
  • Fixed every NAS stream failing after the NAS certificate auto-renewed. Any change from
    the first-seen certificate fingerprint was rejected outright; a legitimate renewal that passes
    standard CA validation now rotates the pin (switching to a self-signed certificate is still
    rejected).

  • Fixed reversed bit order when serving NAS DFF files to the phone or network, which raised
    ultrasonic noise. In-band figures barely moved (which is why it went unnoticed), but noise at
    20 to 100 kHz was about 17 dB higher and audible on a real DAC. PC local playback, upsampling
    and offline conversion do not use this path and were unaffected.

Sound FX / EQ

  • Fixed EQ staying "applied", or bit-perfect not returning, after toggling crossfeed off.
    Crossfeed was forcing the user's EQ on/off state. Spatial effects no longer touch EQ state,
    and switching the last spatial effect off restores the original path.

  • Fixed some measurement sites in the headphone-matching catalog returning "no measurement"
    for every model.
    The catalog stored display names instead of the actual data keys.

Diagnostics / display

  • Fixed [GPU diagnostics] stopping with an error and the [support check] under Audio output
    doing nothing when clicked.
    Both open real devices and drivers, and waited forever on a
    driver that did not respond. They now have time limits (GPU diagnostics 90 s, support check
    60 s); on timeout they report where it stalled and what to try next (check whether another
    app holds the device, reconnect the device).

  • Fixed raw internal filter names (e.g. poly-sinc-24-mp) leaking into the UI. Choosing a
    Classic-family filter printed the raw name on the home screen and the final selection
    summary. Every surface now shows the product name (e.g. Classic 24 Minimum).

  • Fixed the device pairing approval dialog appearing in Korean in English mode. Newly added
    screens ship with English strings.

Security / privacy

  • Long-term pairing credentials are now stored encrypted, bound to the Windows user account;
    existing stores are converted automatically on first launch (no re-pairing needed).
  • Unauthenticated LAN-only routes (streams, other-PC control, NAS connect and similar) no longer
    accept requests from internet origins, as defense in depth for port-forwarded or VPN setups.
    The "Allow on this PC" pairing approval can only be given from this PC's own screen.
  • NAS error responses no longer include absolute NAS paths.

Added / improved in v0.9.13

Universal ASIO binding: linked by driver package structure, not by name

  • Output devices are now linked to ASIO drivers by driver package structure. Until now the
    driver was chosen only from brand/model tokens in the device name and the USB vendor ID, so a
    DAC that Windows simply calls "Speakers", or a vendor missing from the alias table, never got
    DSD upsampling. CastFi now inspects installed ASIO drivers and output devices separately and
    links them only when there is evidence that they came from the same package. Two kinds of
    evidence are accepted:

    • The setup manifest of a Thesycon-family package (FiiO, Gustard, HiBy, iFi and many other USB
      DACs): the device's original INF name, the ASIO CLSID and the registered DLL are tied
      together in one document.
    • The declaration file a driver keeps next to itself (Amanero/Comtrue-style "USB Audio ASIO"
      drivers): CLSID, USB VID/PID and DLL name match the attached device. Vendor ASIO drivers that
      run on top of the standard Windows class driver are linked this way.
    • The INF of the device's driver package (or of its software component) carries the ASIO
      registration itself: documentary proof that Windows installed that ASIO driver as part of
      this device's driver.
  • No guessing. Binding is automatic only when the evidence is unique (one driver, one
    device). If there is more than one candidate (two DACs from the same vendor, for example), a
    one-time prompt asks which driver to use; it lists only drivers with structural evidence and
    makes no recommendation or default choice. A chosen driver is remembered only after playback
    actually starts with it, and drivers without evidence are never opened, as before. The
    name/vendor-ID path and the per-device explicit driver setting are unchanged, and the explicit
    setting always wins.

  • A remembered binding is tied to the device's physical identity (container, device node,
    hardware ID) and the driver package identity; reinstalling the driver or plugging in a
    different device triggers a fresh decision. A rate rejection right after a driver hang, or
    "this rate only" rejections, do not count as binding failures.

  • Discovery never opens an ASIO driver. The actual start still happens in the same isolated child
    process as before, and a failure never falls back to opening a different driver.

  • Bug reports now include ASIO discovery information: the list of installed ASIO drivers
    (status, version), the output device's driver package details, and the binding verdict with
    its reason, so support can see from a single report why a driver could not be linked. No
    personal data is included (device serials removed, paths excluded, entry counts capped).

DSD / upsampling

  • 352.8 kHz and 384 kHz sources can now be DSD-upsampled (previously up to 176.4/192 kHz).
    Only the 352.8k/384k to DSD64 combination is excluded by the rate rules.

  • Two new guidance notes for DSD512 and above: Standard may sound noisy on DACs that do not
    process DSD directly, and Trellis Direct may produce an audible artifact at the end of
    tracks; the app explains this when such a combination is selected and recommends the
    Adaptive family.

  • Automatic headroom for some combinations (e.g. DSD64) is back at the safer value. The
    relaxed value produced audible noise on real music at normal levels; only listening-verified
    combinations keep an exception.

  • Extended end-of-track noise protection (Direct Safe) to Trellis Direct at DSD512 and DSD1024.

Android app integration (requires the latest Android app)

  • Device pairing approval screen: when a phone connects to this PC for the first time, the
    PC shows the device name and a 6-digit confirmation code with [Allow]/[Deny]. Later
    connections authenticate automatically.
  • DSD conversion on the PC, streamed to the phone: tracks in the phone's queue (PC library,
    NAS, or files on the phone) are converted to DSD by the PC and sent to the phone's USB DAC.
    Modulator, order and filter can be chosen on the phone; 48 kHz-family sources are supported.
  • The phone can play PC/NAS tracks directly to a DLNA renderer (PC-issued address, renderer
    control handover). Real-time conversion for picky renderers works on this path too.
  • Original file name, size and modified time are provided for phone downloads
    (remote to phone), and each queue entry gets a unique identifier so duplicates of the same
    track can be selected individually.
  • Lighter status polling: album art and app icon are not re-sent when unchanged (per-second
    response about 240 KB to 1.2 KB). Phone memory use drops substantially; the PC UI and existing
    apps are unaffected.
  • Added the Android Sound screen integration (current sound-state snapshot, headphone-matching
    catalog sync) and PC relay for manual bug reports sent from the phone.

Your existing library, settings, and play queue are preserved (NAS ghost-entry cleanup only
applies to files that no longer exist).