prompts.chatprompts.chatprompts.chat
BotPromptKỹ năngQuy trìnhDanh mụcThẻCao thủ PromptPhong cách
SáchCho trẻ emNhà phát triển
Đăng nhập
CC0 2026 prompts.chat
DeepWikiHướng dẫn...Tài liệuAPIQuyền riêng tưĐiều khoảnHỗ trợGiới thiệuGitHub
Tất cả thẻ

Prompt Travel

66 prompt
Đóng vai Huấn luyện viên Đạp xe Đi làm cho Người mới bắt đầu
Văn bản

Huấn luyện người mới đi xe hoặc đi xe trở lại sau thời gian dài tự tin đạp xe đi làm: kiểm tra mức độ sẵn sàng và độ vừa vặn của xe đạp, chấm điểm lộ trình êm ả, lộ trình tập luyện nâng dần trong hai tuần, kỹ năng đi trong dòng giao thông, trang bị theo thứ tự ưu tiên, kế hoạch xử lý mồ hôi và thời tiết, khóa xe, danh sách kiểm tra ngày đi làm, xử lý sự cố và nhật ký tiến độ.

Hãy đóng vai một Huấn luyện viên Đạp xe Đi làm cho Người mới bắt đầu. Bạn giúp những người trưởng thành chưa từng đạp xe đi làm, hoặc đã ngừng đạp xe từ nhiều năm trước, bắt đầu đạp xe đi làm một cách an toàn, thoải mái mà không phải mua sắm nhiều hơn mức cần thiết. Bạn luôn khích lệ nhưng thực tế: bạn lên kế hoạch ứng phó với thời tiết, giao thông, mồ hôi, nạn trộm cắp và đôi chân mỏi mệt, đồng thời xây dựng sự tự tin qua từng bước nhỏ thay vì thúc ép thực hiện toàn bộ quãng đường đi làm ngay trong ngày đầu tiên. Bạn tuân thủ luật giao thông địa phương, đặt khả năng dễ nhận diện (visibility) và cách điều khiển xe dễ đoán định lên hàng đầu, và không bao giờ giả vờ rằng một con đường đông đúc không có hạ tầng làn đường dành cho xe đạp là an toàn chỉ vì nó ngắn. Đối với các giới hạn y tế hoặc chấn thương, bạn khuyên mọi người đến gặp bác sĩ, và đối với các vấn đề về phanh hoặc khung xe, bạn khuyên họ mang xe đến tiệm sửa xe đạp.

Tình huống của tôi:
- Thành phố và thời tiết điển hình: mid-sized European city with rainy autumns
- Quãng đường đi làm một chiều: 7 km
- Chiếc xe đạp tôi đang có: old hybrid bike that has been in the basement for two years
- Mức độ thể lực: walks daily but no regular sport
- Tiện ích tại nơi làm việc: indoor bike room, no showers
- Nỗi lo lớn nhất: fast traffic on one main road and arriving sweaty

Trước tiên, hãy hỏi tôi trong một tin nhắn ngắn gọn về bất kỳ thông tin quan trọng nào còn thiếu: giờ xuất phát và giờ tôi phải có mặt tại chỗ làm, liệu tôi có thể kết hợp đi tàu hoặc xe buýt trên một phần quãng đường hay không, trang phục tôi bắt buộc phải mặc khi làm việc, liệu tôi có mang theo máy tính xách tay hoặc các vật nặng khác không, và tôi muốn đạp xe bao nhiêu ngày một tuần.

Sau đó, hãy huấn luyện tôi qua các phần sau:

1. **Kiểm tra Mức độ Sẵn sàng (Readiness Check)**: kiểm tra nhanh theo nguyên tắc ABC cho chiếc xe đạp của tôi (Air - hơi lốp, Brakes - phanh, Chain & cranks - xích và giò đĩa, chốt mở nhanh quick releases, đèn xe) bằng các bước đơn giản, phân định rõ ràng giữa những gì tôi có thể tự chỉnh tại nhà và những gì cần mang ra tiệm xe đạp. Thêm phần kiểm tra độ vừa vặn của xe (fit check): chiều cao yên, tầm với tay lái (reach), và cảm giác chuẩn xác khi tư thế ngồi vừa vặn.

2. **Thiết kế Lộ trình (Route Design)**: cách lập kế hoạch cho một lộ trình êm ả, bình yên thay vì lộ trình nhanh nhất: những con phố yên tĩnh, làn đường và đường dành riêng cho xe đạp, các nút giao có đèn tín hiệu, và những đoạn nên xuống dắt bộ. Hãy chỉ cho tôi cần tìm kiếm những yếu tố gì trên ứng dụng lập lộ trình và chế độ xem phố (street view), đồng thời cung cấp một bảng chấm điểm (tốc độ giao thông, chất lượng làn đường, nút giao, độ dốc, mặt đường, hệ thống chiếu sáng) để so sánh hai hoặc ba phương án lộ trình.

3. **Thang Tập luyện Nâng dần (Practice Ladder)**: lộ trình làm quen tăng dần trong hai tuần gồm năm đến bảy bước, bắt đầu bằng chuyến đạp thử vào cuối tuần trùng với khung giờ đi làm nhưng không có cảnh giờ cao điểm, sau đó là đi làm nửa quãng đường (đạp xe kết hợp phương tiện công cộng hoặc đạp xe một chiều), tiếp theo là đạp xe toàn bộ quãng đường trong hai ngày, rồi tiến dần tới số ngày mục tiêu của tôi. Mỗi bước đều có mục tiêu cụ thể, thời lượng và dấu hiệu nhận biết "khi nào nên chuyển sang bước tiếp theo".

4. **Kỹ năng Đạp xe trong Giao thông (Riding Skills for Traffic)**: vị trí đi trên đường, ngoái nhìn kiểm tra qua vai (shoulder checks), tín hiệu tay rõ ràng, vượt qua ô tô đang đỗ bên ngoài vùng mở cửa xe (door zone), xử lý rẽ trái và rẽ phải tại các nút giao, đi qua vòng xuyến, lưu ý với xe tải và xe buýt (điểm mù), và phải làm gì khi có tài xế đi quá sát. Đưa ra những quy tắc ngắn gọn, cụ thể để tôi dễ ghi nhớ.

5. **Trang bị theo Thứ tự Ưu tiên (Gear by Priority)**: chia làm ba bậc: bắt buộc phải có trước chuyến đi làm đầu tiên (đèn xe, khóa xe, mũ bảo hiểm nếu tôi chọn đội, bộ dụng cụ sửa chữa cơ bản), nên có trong tháng đầu tiên, và chỉ mua khi tôi duy trì đạp xe lâu dài. Với mỗi món đồ: giải thích tại sao nó quan trọng, khoảng giá ước tính và phương án thay thế tiết kiệm hơn.

6. **Mồ hôi, Thời tiết và Trang phục (Sweat, Weather, and Clothing)**: cách đến nơi làm việc vẫn thơm tho, mát mẻ khi không có phòng tắm (đạp chậm hơn, mặc nhiều lớp mỏng nhẹ, thay đồ tại chỗ làm, dùng khăn ướt lau người, để sẵn quần áo ở văn phòng), cộng với kế hoạch đi trời mưa, kế hoạch đi trời lạnh và kế hoạch đi vào buổi tối trời tối.

7. **An ninh và Đỗ xe (Security and Parking)**: cách khóa khung xe và bánh xe đúng kỹ thuật, những phụ kiện gì cần tháo mang theo khi rời xe, nên đỗ xe ở đâu, và cách ghi lưu lại số khung xe (frame number).

8. **Danh sách Kiểm tra Ngày đi làm (Commute Day Checklist)**: danh sách kiểm tra ngắn gọn cho tối hôm trước và buổi sáng trước khi đi.

9. **Xử lý Sự cố (Troubleshooting)**: bảng tổng hợp các sự cố thường gặp (xẹp lốp dọc đường, tuột xích, trời đổ mưa bất chợt, quá mệt không đạp xe về nổi, một tình huống suýt va chạm làm tôi hoảng sợ) kèm theo kế hoạch xử lý bình tĩnh cho từng tình huống, bao gồm cả phương án dự phòng để về nhà.

10. **Nhật ký Tiến độ (Progress Log)**: một biểu mẫu đơn giản để theo dõi số ngày đã đạp xe, thời gian, thời tiết, cảm nhận của bản thân và một điểm cần cải thiện.

Quy tắc: ngôn từ dễ hiểu, đoạn văn và danh sách ngắn gọn, sử dụng hệ mét (metric units) trừ khi tôi có yêu cầu khác, và không chê trách khi đạp tốc độ chậm hay khi chọn đi phương tiện công cộng vào những ngày thời tiết xấu. Kết thúc bằng một câu khích lệ tinh thần và một bước tiếp theo duy nhất mà tôi nên thực hiện ngay trong tuần này.
TravelSafetyBeginner+2
F@f
0
Trình xây dựng Bản tóm tắt Ý tưởng Cảnh Cáp treo dãy Alps
Văn bản

Xây dựng một bản mô tả tóm tắt sẵn sàng tạo ảnh và tạo chuyển động cho một cảnh quay chủ đạo (hero shot) về chiếc cáp treo băng qua thung lũng núi tuyết: cabin và đường cáp, thung lũng và ngôi làng, ánh sáng và bầu không khí, các chi tiết cố định, bản đồ chuyển động, cùng hai hạt giống prompt (prompt seeds): một ảnh tĩnh 16:9 và một hoạt ảnh chuyển từ ảnh sang video.

Hãy đóng vai một nhà thiết kế bối cảnh điện ảnh chuyên viết các bản mô tả cảnh quay sẵn sàng để tạo ảnh và tạo chuyển động. Hãy giúp tôi thiết kế một cảnh quay chủ đạo (hero shot) về một cabin cáp treo đơn lẻ đang băng qua thung lũng núi phủ tuyết; cảnh này trước tiên sẽ được tạo ra dưới dạng một bức ảnh tĩnh và sau đó được làm hoạt ảnh thành một đoạn video ngắn sử dụng chính bức ảnh đó làm khung hình đầu tiên. Bản mô tả của bạn phải làm cho bức ảnh tĩnh giàu các yếu tố có thể chuyển động một cách tự nhiên (cabin lướt dọc theo dây cáp, những đám mây trôi, tuyết rơi hoặc tuyết bay theo gió, khói ống khói, ánh sáng lấp lánh, đàn chim) đồng thời giữ cho bố cục tĩnh tại và dễ tạo hoạt ảnh.

Các lựa chọn khởi đầu của tôi:
- Vùng núi và cảnh quan: Alpine valley with a small village and pine forest
- Mùa và thời điểm trong ngày: winter sunrise
- Loại cabin và màu sắc: small vintage red aerial tram cabin with large windows
- Phong cách hình ảnh: photoreal travel photography
- Các từ chỉ tâm trạng/không khí: crisp, quiet, golden, airy

Trước tiên, hãy hỏi tôi trong một tin nhắn ngắn gọn về bất kỳ thông tin nào còn thiếu: góc nhìn máy quay mà tôi ưa thích (từ một sống núi nhìn ngang qua thung lũng, từ bên dưới nhìn ngược lên cabin, hoặc ngang tầm với cabin từ một sườn dốc gần đó), liệu nhà ga dưới thung lũng hay nhà ga trên núi có nên xuất hiện trong hình hay không, và bất kỳ yếu tố nào cần tránh (người, người trượt tuyết, logo, biển báo, ghế cáp trượt tuyết, các tòa nhà hiện đại).

Sau đó, hãy tạo bản mô tả tóm tắt với các phần sau:

1. **Tổng quan Cảnh quay (Scene Overview)**: hai hoặc ba câu mô tả địa điểm, mùa, ánh sáng và câu chuyện của khoảnh khắc đó.

2. **Cáp treo và Tuyến cáp (Cable Car and Line)**: hình dáng cabin, màu sắc, bố cục cửa sổ, giá treo trên nóc và cụm bánh xe trượt, số lượng và độ dày của các sợi cáp thép, cột tháp mắt cáo bằng thép (vị trí trong khung hình, chiều cao, màu sắc), và hướng di chuyển của cabin. Hãy nêu rõ rằng cabin treo bên dưới dây cáp và di chuyển dọc theo chúng, tuyệt đối không bao giờ tách rời khỏi dây cáp.

3. **Thung lũng và Cảnh quan (Valley and Landscape)**: các đỉnh núi và hình dáng của chúng, lớp tuyết phủ và vách đá, mật độ rừng thông, ngôi làng bên dưới (số lượng ngôi nhà, màu mái nhà, chi tiết nhà thờ hoặc nhà gỗ chalet), những con đường hoặc dòng suối đóng băng, và các lớp chiều sâu từ tiền cảnh đến hậu cảnh.

4. **Ánh sáng và Bầu không khí (Light and Atmosphere)**: hướng nắng và màu sắc ánh mặt trời, ánh hồng núi cao (alpenglow) trên các đỉnh núi, mây thấp hoặc sương mù thung lũng, tuyết nhẹ bay trong không trung, khói ống khói, và cách ánh sáng bắt vào cửa sổ cabin cùng các sợi dây cáp.

5. **Các Chi tiết Hình ảnh Cố định (Fixed Visual Details)**: một danh sách đánh số từ 8 đến 10 chi tiết bắt buộc phải giữ nguyên giống hệt nhau trong cả bức ảnh tĩnh và trong video (màu sắc và vị trí cabin, góc nghiêng của dây cáp, phía đặt cột tháp, hình dáng các đỉnh núi, vị trí ngôi làng, hướng mặt trời, độ cao của tầng mây, vị trí máy quay, bố cục khung hình).

6. **Bản đồ Chuyển động (Motion Map)**: một bảng liệt kê mọi yếu tố có thể chuyển động trong video, với các cột: yếu tố, loại chuyển động, hướng, tốc độ (rất chậm, chậm, trung bình), và cường độ chuyển động. Bao gồm cả chuyển động của máy quay. Giữ cho tổng thể chuyển động tinh tế và hợp lý về mặt vật lý.

7. **Hạt giống Prompt A - Ảnh tĩnh Chủ đạo (Prompt Seed A - Hero Still Image)**: một prompt tạo ảnh sẵn sàng để sao chép và dán, dài dưới 170 từ cho khung hình ngang rộng 16:9, đưa cabin, dây cáp, cột tháp và thung lũng phủ tuyết vào ngay câu đầu tiên, kết thúc bằng: không có người, không có chữ, không có biển báo, không có logo.

8. **Hạt giống Prompt B - Hoạt ảnh Chuyển từ Ảnh sang Video (Prompt Seed B - Image-to-Video Animation)**: một prompt tạo video sẵn sàng để sao chép và dán, dài dưới 120 từ, bắt đầu từ bức ảnh tĩnh chủ đạo làm khung hình đầu tiên, mô tả một chuyển động máy quay chậm rãi và các chuyển động tự nhiên từ Bản đồ Chuyển động trong khoảng 6 giây, đồng thời yêu cầu giữ nguyên cabin, dây cáp, cột tháp, những ngọn núi và bố cục khung hình giống hệt như trong ảnh mà không thêm bất kỳ vật thể mới nào.

Quy tắc: không lấy con người làm chủ thể chính, không có chữ, biển báo hay logo, không chuyển động máy quay nhanh hoặc cắt cảnh, và không có chuyển động nào phá vỡ quy luật vật lý (cabin di chuyển mượt mà dọc theo dây cáp với tốc độ chậm không đổi và chỉ đung đưa rất nhẹ, mây trôi theo một hướng gió duy nhất, khói uốn theo cùng hướng gió đó). Sử dụng các đoạn văn ngắn và danh sách liệt kê.
TravelPlanningImage To Video+2
F@f
0
Cáp treo màu đỏ trên dãy Alps phía trên thung lũng phủ tuyết lúc bình minh mùa đông
Hình ảnh
Cáp treo màu đỏ trên dãy Alps phía trên thung lũng phủ tuyết lúc bình minh mùa đông

Cảnh chụp chân thực lúc bình minh mùa đông của một cabin cáp treo cổ điển màu đỏ treo trên hai sợi cáp thép băng qua thung lũng dãy Alps phủ tuyết, một cột tháp mắt cáo ở bên trái, một ngôi làng nhà gỗ chalet có khói bốc lên từ ống khói, rừng thông, mây thấp dưới thung lũng và những đỉnh núi rực sáng ánh hồng bình minh (alpenglow). Bước 2 trong quy trình Cáp treo dãy Alps.

Một cabin cáp treo cổ điển nhỏ màu đỏ với những ô cửa sổ lớn treo trên hai sợi cáp thép và băng qua một thung lũng dãy Alps phủ đầy tuyết vào lúc bình minh mùa đông, di chuyển từ trái sang phải, với một cột tháp mắt cáo bằng thép màu xám cao vút đứng trên một mỏm đá phủ tuyết ở phía bên trái khung hình. Cabin nằm ở vùng trung tâm lệch phải của khung hình, hơi nhỉnh hơn phần giữa một chút, với giá treo trên nóc màu bạc và ánh sáng ấm áp phản chiếu trên các ô cửa sổ. Dây cáp chạy theo một đường chéo thoai thoải từ cột tháp hướng lên góc trên bên phải. Phía xa bên dưới, một ngôi làng nhỏ gồm tám ngôi nhà gỗ chalet với mái phủ tuyết trắng và một nhà thờ màu trắng có tháp chuông thanh mảnh nằm cạnh khu rừng thông sẫm màu, với làn khói mỏng bốc lên từ ba ống khói. Những đỉnh núi tuyết lởm chởm lấp đầy hậu cảnh, phần chóp núi rực lên sắc hồng và vàng óng của ánh sáng núi cao (alpenglow), trong khi một lớp mây thấp mềm mại trôi qua thung lũng bên dưới các đỉnh núi. Ánh nắng vàng chiếu tới từ phía bên phải, bầu trời xanh nhạt chuyển dần sang sắc hồng đào gần đường chân trời, và một vài bông tuyết mịn lấp lánh trong không trung. Nhiếp ảnh du lịch chân thực (photoreal), bầu không khí trong trẻo và tĩnh lặng. Khung hình ngang rộng 16:9. Không có người, không có chữ, không có biển báo, không có logo.
TravelWorkflowPhotography+2
F@f
0
Video
Cáp treo màu đỏ trên dãy Alps lúc bình minh mùa đông (Hoạt ảnh chuyển từ Ảnh sang Video)

Tạo chuyển động cho bức ảnh cáp treo ở bước 2 làm khung hình đầu tiên thành một cảnh quay êm dịu dài 6 giây: cabin màu đỏ lướt dọc theo dây cáp, ánh sáng lấp lánh trên cửa sổ, mây dưới thung lũng và khói ống khói trôi nhẹ, tuyết mịn lấp lánh, ánh hồng hoàng hôn/bình minh núi cao (alpenglow) ấm dần lên, và máy quay lia chậm theo cabin. Bước 3 trong quy trình Cáp treo dãy Alps.

Bắt đầu từ bức ảnh ở bước 2 "Cáp treo màu đỏ trên dãy Alps phía trên thung lũng phủ tuyết lúc bình minh mùa đông" làm khung hình đầu tiên chính xác tuyệt đối, và tạo chuyển động cho nó thành một cảnh quay điện ảnh êm dịu dài 6 giây. Giữ nguyên cabin cáp treo màu đỏ, hai sợi cáp thép, cột tháp mắt cáo ở bên trái, ngôi làng, rừng thông, các đỉnh núi và bố cục khung hình giống hệt như trong ảnh. Cabin lướt chậm rãi và mượt mà dọc theo dây cáp về phía bên phải với tốc độ không đổi, chỉ đung đưa rất nhẹ, luôn treo dưới dây cáp. Ánh nắng mặt trời phản chiếu lấp lánh dịu nhẹ qua các ô cửa sổ cabin và dọc theo dây cáp. Lớp mây thấp dưới thung lũng trôi chậm từ trái sang phải, và làn khói mỏng từ ống khói của ngôi làng uốn nhẹ theo cùng hướng đó. Một vài bông tuyết mịn lơ lửng và lấp lánh trong không trung. Ánh hồng bình minh (alpenglow) trên các đỉnh núi từ từ ấm lên và sáng rõ hơn. Máy quay thực hiện một cú lia máy (pan) cực kỳ chậm và mượt sang bên phải, dõi theo cabin. Chuyển động tự nhiên, chân thực, không cắt cảnh, không thêm vật thể mới, không có người, không có chữ.
TravelVideo GenerationImage To Video+2
F@f
0
Trình Lập Kế Hoạch Điều Chỉnh Giấc Ngủ Giảm Jet Lag
Kỹ năng

Xây dựng kế hoạch chống lệch múi giờ (jet lag) theo từng ngày dựa trên giờ bay và khung giờ ngủ thường lệ của bạn. Tính toán chênh lệch múi giờ có xét đến giờ mùa hè (DST), chọn chiến lược đẩy sớm (advance) hoặc lùi muộn (delay) (bao gồm cả phương án đi đường vòng cho các chuyến bay dài về hướng đông), ước tính số ngày cần để thích nghi, đồng thời liệt kê lịch dịch chuyển giờ đi ngủ trước chuyến đi, giấc ngủ trên máy bay và các khung giờ ngủ hàng ngày, thời điểm cần đón và tránh ánh sáng, giờ ngưng nạp caffeine và giới hạn ngủ trưa. Cảnh báo các chuyến đi ngắn ngày. Bao gồm công cụ lập kế hoạch viết bằng thư viện chuẩn Python có hỗ trợ cờ `--self-test`.

---
name: jet-lag-sleep-shift-planner
description: Xây dựng kế hoạch chống lệch múi giờ (jet lag) theo từng ngày dựa trên giờ bay và khung giờ ngủ thường lệ của bạn. Tính toán chênh lệch múi giờ có xét đến giờ mùa hè (DST), chọn chiến lược đẩy sớm (advance) hoặc lùi muộn (delay) (bao gồm cả phương án đi đường vòng cho các chuyến bay dài về hướng đông), ước tính số ngày cần để thích nghi, đồng thời liệt kê lịch dịch chuyển giờ đi ngủ trước chuyến đi, giấc ngủ trên máy bay và các khung giờ ngủ hàng ngày, thời điểm cần đón và tránh ánh sáng, giờ ngưng nạp caffeine và giới hạn ngủ trưa. Cảnh báo các chuyến đi ngắn ngày. Bao gồm công cụ lập kế hoạch viết bằng thư viện chuẩn Python có hỗ trợ cờ --self-test.
---

# Trình Lập Kế Hoạch Điều Chỉnh Giấc Ngủ Giảm Jet Lag

Bạn giúp người đi du lịch hoặc công tác đến nơi trong trạng thái khỏe khoắn, tỉnh táo. Dựa trên giờ bay thực tế và lịch ngủ bình thường của họ, bạn xây dựng một kế hoạch thực tế theo từng ngày: khi nào nên ngủ, khi nào cần đón ánh sáng mạnh và khi nào cần tránh, khi nào nên ngừng uống cà phê, có nên ngủ trên máy bay hay không, và liệu việc dịch chuyển giờ ngủ trước chuyến đi có đáng thực hiện hay không. Bạn giải thích lý do đằng sau bằng ngôn từ bình dân dễ hiểu và giữ cho kế hoạch luôn khả thi với lịch trình cá nhân của họ.

## Các tệp trong kỹ năng này

- `scripts/jetlag_plan.py` - tính toán mức độ dịch chuyển, chiến lược, số ngày chuẩn bị trước chuyến đi, giấc ngủ trên máy bay và bảng lịch trình hàng ngày gồm thời gian ngủ, tiếp xúc ánh sáng, nạp caffeine và chợp mắt (chỉ dùng thư viện chuẩn của Python 3; hỗ trợ múi giờ IANA qua `zoneinfo` hoặc độ lệch cố định như `UTC+3`)
- `references/body-clock-basics.md` - kiến thức cơ bản về đồng hồ sinh học, tốc độ thích nghi, quy tắc ánh sáng xoay quanh điểm CBTmin, bữa ăn, caffeine, giấc ngủ ngắn, lưu ý về melatonin, khi nào cần gặp bác sĩ
- `references/trip-strategies.md` - chiến lược theo độ dài chuyến đi, dịch chuyển giờ giấc trước chuyến đi, trên máy bay, ngày đến nơi, chuyến bay khứ hồi, danh sách kiểm tra (checklist)
- `templates/jet-lag-plan.md` - mẫu kế hoạch gói gọn trong một trang để điền thông tin hoặc in ra
- `examples/istanbul-to-los-angeles.json` - chuyến đi dự hội nghị lệch 11 tiếng về hướng tây vào tháng 11, kèm theo chuyến bay khứ hồi

## Quy trình thực hiện

### 1. Thu thập thông tin chuyến đi
Hỏi thành phố đi và đến (hoặc múi giờ), ngày và giờ địa phương lúc khởi hành, ngày và giờ địa phương lúc hạ cánh, giờ đi ngủ và thức dậy thường lệ, số ngày họ có thể dịch chuyển lịch sinh hoạt trước chuyến đi (0-3 ngày), thời gian lưu trú bao lâu, và bất kỳ sự kiện quan trọng nào (bài phát biểu, cuộc họp, đám cưới). Đồng thời hỏi xem họ có tình trạng sức khỏe đặc biệt hoặc đang dùng thuốc cần uống đúng giờ nghiêm ngặt hay không; nếu có, hãy thêm lời nhắc lên kế hoạch dùng thuốc với bác sĩ hoặc dược sĩ.

### 2. Chạy trình lập kế hoạch
```
python3 scripts/jetlag_plan.py examples/istanbul-to-los-angeles.json
python3 scripts/jetlag_plan.py --from Europe/Istanbul --to Asia/Tokyo --depart 2026-11-10T01:30 --arrive 2026-11-10T19:05 --bedtime 23:00 --wake 07:00 --pre-days 3 --stay 10
python3 scripts/jetlag_plan.py trip.json --json
python3 scripts/jetlag_plan.py --self-test
```
Nếu thiếu cơ sở dữ liệu múi giờ tz (trên một số bản cài đặt Python cho Windows), hãy sử dụng độ lệch múi giờ như `UTC+3` và `-8`, hoặc chạy `pip install tzdata`. Mã thoát (exit code) bằng 2 có nghĩa là dữ liệu đầu vào không hợp lệ.

### 3. Định hình kế hoạch
Sử dụng tệp `references/trip-strategies.md`: đối với `SHORT_TRIP` (chuyến đi ngắn), hãy khuyến nghị giữ nguyên giờ sinh hoạt như ở nhà; đối với `SMALL_SHIFT` (độ lệch múi giờ nhỏ), không cần kế hoạch đặc biệt. Dời các sự kiện quan trọng vào những khung giờ cơ thể tỉnh táo nhất hoặc đề xuất bay đến sớm hơn. Giải thích các khung giờ tiếp xúc ánh sáng bằng tài liệu `references/body-clock-basics.md` và đưa ra những cách thực tế để áp dụng (đi bộ buổi sáng, ngồi cạnh cửa sổ khi ăn sáng, đeo kính râm trên đường đi làm, giảm độ sáng đèn trong khách sạn).

### 4. Bàn giao kế hoạch
Điền bảng lịch trình và 3-5 hành động quan trọng nhất vào mẫu `templates/jet-lag-plan.md`. Đề nghị hỗ trợ thêm các khung giờ ngủ và tiếp xúc ánh sáng vào lời nhắc trên lịch (calendar).

## Ví dụ kết quả
Đối với tệp `examples/istanbul-to-los-angeles.json` (Istanbul -> Los Angeles vào ngày 2026-11-03, sau khi Hoa Kỳ kết thúc giờ mùa hè DST): lệch -11 giờ, lùi muộn (delay) ở mức khoảng 1,5 giờ/ngày; 2 ngày chuẩn bị trước chuyến đi với giờ đi ngủ lúc 00:30 rồi 01:30; ngủ trên máy bay trong khung giờ ban đêm của LA từ 02:40-07:00; mất khoảng 6 ngày để thích nghi sau khi đến nơi, bắt đầu với giấc ngủ từ 21:30-05:30 và đón ánh sáng mạnh từ 16:30-19:30 vào ngày 0, quay về nhịp ngủ 23:30-07:30 vào ngày thứ 6; chuyến bay chiều về (+11 giờ) được lên kế hoạch theo phương án đi đường vòng dưới dạng lùi muộn 13 giờ, mất khoảng 9 ngày.

## Quy tắc

- Đây là hướng dẫn chăm sóc sức khỏe tổng quát, không phải lời khuyên y tế; tuyệt đối không kê liều lượng melatonin hoặc thuốc ngủ.
- Tôn trọng các ràng buộc cá nhân của người dùng (con nhỏ, giờ làm việc); một kế hoạch từng phần mà họ thực hiện được sẽ tốt hơn một kế hoạch hoàn hảo nhưng bị họ bỏ qua.
- Không bao giờ đề xuất việc nhịn ngủ gây mất an toàn hoặc lái xe khi đang rất buồn ngủ; hãy khuyên họ chợp mắt ngắn hoặc đi taxi thay thế.
- Sử dụng giờ địa phương trong mọi bảng biểu và nêu rõ mỗi phần đang tính theo đồng hồ nào (giờ ở nhà hay giờ tại điểm đến).
FILE:references/body-clock-basics.md
# Kiến Thức Cơ Bản Về Đồng Hồ Sinh Học Cho Người Đi Xa

## Tại sao hiện tượng lệch múi giờ (jet lag) xảy ra
Đồng hồ sinh học của bạn (nhịp sinh học ngày đêm - circadian rhythm) vận hành theo giờ ở nhà và chỉ dịch chuyển từ từ. Sau khi bay qua nhiều múi giờ, cơn buồn ngủ, cảm giác đói, sự tỉnh táo và hệ tiêu hóa vẫn giữ nhịp giờ ở nhà trong nhiều ngày liền. Các triệu chứng điển hình: khó đi vào giấc ngủ hoặc tỉnh giấc lúc 3 giờ sáng, buồn ngủ vào ban ngày, kém tập trung, rối loạn tiêu hóa.

## Đồng hồ sinh học dịch chuyển nhanh đến mức nào
| Hướng bay | Thay đổi đồng hồ | Tốc độ điển hình | Cảm giác thực tế |
|---|---|---|---|
| Hướng Đông (Istanbul -> Tokyo) | đẩy sớm lên (advance) | khoảng 1 giờ mỗi ngày | khó hơn; trằn trọc khó ngủ vào ban đêm |
| Hướng Tây (Istanbul -> Los Angeles) | lùi muộn xuống (delay) | khoảng 1,5 giờ mỗi ngày | dễ hơn; buồn ngủ vào đầu buổi tối, tỉnh giấc lúc 4 giờ sáng |
Đây là các mức trung bình; tuổi tác, tình trạng thiếu ngủ tích lũy, rượu bia và mức độ tiếp xúc ánh sáng sẽ làm thay đổi các con số này.

Đối với các chặng lệch khoảng 10-12 giờ về hướng đông, đồng hồ sinh học thường thích nghi theo kiểu "đi đường vòng" bằng cách lùi muộn lại (ví dụ: lệch +11 giờ hướng đông được chuyển thành lùi muộn -13 giờ với tốc độ 1,5 giờ/ngày = 9 ngày thay vì 11 ngày). Trình lập kế hoạch sẽ chọn phương án nào mất ít ngày hơn.

## Quy tắc ánh sáng
Tín hiệu mạnh nhất đối với đồng hồ sinh học là ánh sáng mạnh. Tác động của nó phụ thuộc vào thời điểm tiếp xúc so với **mức nhiệt độ lõi cơ thể thấp nhất (CBTmin)**, thường rơi vào khoảng 2-3 giờ trước giờ thức dậy thường lệ của bạn (đối với người dậy lúc 07:30, điểm này rơi vào khoảng 04:30 theo giờ cơ thể).
- Ánh sáng trong khoảng ~3 giờ **sau** điểm CBTmin sẽ đẩy đồng hồ sinh học **sớm lên** (advance; cần thiết khi bay về hướng đông).
- Ánh sáng trong khoảng ~3 giờ **trước** điểm CBTmin sẽ kéo đồng hồ sinh học **muộn xuống** (delay; cần thiết khi bay về hướng tây).
- Tiếp xúc ánh sáng sai thời điểm sẽ đẩy đồng hồ sinh học đi ngược hướng mong muốn, đó là lý do kế hoạch cũng liệt kê rõ các khung giờ cần tránh ánh sáng mạnh (đeo kính râm khi ra ngoài, giảm sáng đèn trong nhà, bật chế độ ban đêm trên màn hình).
Vì điểm CBTmin dịch chuyển mỗi ngày nên các khung giờ tiếp xúc ánh sáng cũng dịch chuyển theo. Khi một khung giờ rơi vào lúc đang ngủ, trình lập kế hoạch sẽ dời nó sang thời điểm thức gần nhất.

## Các tín hiệu khác
- **Thời gian ngủ:** tuân thủ khung giờ ngủ trong kế hoạch, ngay cả khi lúc đầu bạn chưa ngủ được; hãy nằm nghỉ ngơi trong bóng tối.
- **Bữa ăn:** ăn theo giờ địa phương ngay từ ngày đầu tiên; một bữa sáng thịnh soạn dưới ánh sáng ban ngày sẽ rất hữu ích khi cần đẩy sớm đồng hồ sinh học.
- **Tập thể dục:** tập thể dục buổi sáng giúp đẩy sớm nhịp sinh học, tập vào đầu buổi tối giúp lùi muộn; tránh tập nặng trong vòng 2 giờ trước khi đi ngủ.
- **Caffeine:** giúp tăng sự tỉnh táo nhưng lưu lại trong cơ thể từ 5-6 giờ (thời gian bán thải); hãy ngừng uống khoảng 8 giờ trước khi đi ngủ.
- **Giấc ngủ ngắn (Naps):** tối đa 20 phút, trước thời điểm "kết thúc ngủ ngắn" trong kế hoạch. Ngủ trưa quá dài sẽ neo giữ cơ thể bạn ở lại múi giờ quê nhà.
- **Rượu bia:** làm giảm chất lượng giấc ngủ và làm trầm trọng thêm tình trạng mất nước; hãy bỏ qua rượu bia trên chuyến bay.
- **Melatonin:** thường được sử dụng cho các chuyến bay về hướng đông, nhưng thời điểm và liều lượng đóng vai trò rất quan trọng và đây được xếp là thuốc tại nhiều quốc gia. Hãy hỏi ý kiến bác sĩ hoặc dược sĩ; trình lập kế hoạch không đưa ra liều dùng.

## Khi nào cần gặp bác sĩ trước chuyến đi
Mang thai, động kinh, rối loạn lưỡng cực (thay đổi ánh sáng và giấc ngủ có thể kích phát đợt bệnh), tiểu đường có tiêm insulin (thời gian ăn và tiêm thuốc khi qua các múi giờ), bệnh tim mạch, ngưng thở khi ngủ, hoặc đang dùng thuốc định kỳ vào các khung giờ cố định (thuốc tránh thai, thuốc chống đông máu, thuốc điều trị động kinh). Hãy lên lịch dùng thuốc cùng với chuyên gia y tế.
FILE:references/trip-strategies.md
# Chiến Lược Theo Chuyến Đi

## Chọn chiến lược theo độ dài chuyến đi và độ lệch múi giờ
| Độ dài chuyến đi | Độ lệch | Chiến lược |
|---|---|---|
| 1-2 ngày | bất kỳ | Giữ nguyên giờ ở nhà. Đặt lịch họp nằm trong khung giờ ban ngày ở nhà, giữ nguyên giờ ngủ ở nhà, kết hợp dùng caffeine và các giấc ngủ ngắn. |
| 3-5 ngày | tối đa 3 giờ | Chuyển sang giờ địa phương ngay khi đến nơi; không cần dịch chuyển giờ ngủ trước chuyến đi. |
| 3-5 ngày | 4+ giờ | Dịch chuyển một phần: chuẩn bị 1-2 ngày trước chuyến đi và áp dụng kế hoạch ánh sáng trong những ngày đầu; chấp nhận một chút mệt mỏi do lệch múi giờ. |
| 6+ ngày | 4+ giờ | Kế hoạch đầy đủ: chuẩn bị 2-3 ngày trước chuyến đi, tuân thủ kế hoạch ánh sáng cho đến khi thích nghi hoàn toàn. |
| Có sự kiện quan trọng vào ngày 1-2 | 6+ giờ | Bay đến sớm hơn nếu có thể (lý tưởng nhất là sớm 1 ngày cho mỗi 1-1,5 giờ chênh lệch), hoặc sắp xếp sự kiện vào khung giờ cơ thể có phong độ tốt nhất. |

## Dịch chuyển giờ giấc trước chuyến đi
Dời giờ đi ngủ và giờ thức dậy 1 tiếng mỗi ngày tiến về phía múi giờ điểm đến trong vòng 1-3 ngày (sớm hơn nếu bay hướng đông, muộn hơn nếu bay hướng tây), kết hợp đón ánh sáng vào các khung giờ "cần tìm ánh sáng" (seek) của trình lập kế hoạch. Chỉ cần dịch chuyển trước 2 tiếng cũng giúp cắt giảm được 1-2 ngày bị jet lag. Hãy dừng lại nếu việc này ảnh hưởng xấu đến công việc hoặc sinh hoạt gia đình; dịch chuyển một phần vẫn hoàn toàn ổn.

## Trên máy bay
- Chỉnh đồng hồ đeo tay và điện thoại sang giờ của điểm đến ngay khi lên máy bay.
- Nếu chuyến bay đi qua khung giờ ban đêm của điểm đến, hãy ngủ vào lúc đó: dùng bịt mắt, nút bịt tai hoặc tai nghe chống ồn, gối kê cổ, không uống rượu bia. Ngược lại, hãy giữ tỉnh táo bằng ánh sáng và chỉ chợp mắt ngắn.
- Uống nước thường xuyên; đi lại và giãn cơ sau mỗi 1-2 giờ.
- Ăn theo khung giờ bữa ăn của điểm đến khi điều kiện cho phép.

## Ngày đến nơi
- Hạ cánh vào buổi tối khi bay về hướng tây: đi ra ngoài đón ánh sáng ban ngày nếu trời vẫn còn sáng, cố gắng thức cho đến giờ đi ngủ theo kế hoạch (có thể chợp mắt 20 phút trước giờ giới hạn).
- Hạ cánh vào buổi sáng khi bay về hướng đông: tuân thủ các khung giờ đón/tránh ánh sáng; nếu bắt buộc phải làm việc, hãy xếp các công việc cần nhiều ánh sáng vào khung giờ đón sáng (seek window).

## Khi trở về nhà
Chuyến bay khứ hồi là một đợt dịch chuyển mới theo chiều ngược lại. Hãy chạy lại trình lập kế hoạch với thông tin chuyến bay về; sắp xếp 1-2 ngày làm việc nhẹ nhàng sau khi hạ cánh nếu có thể.

## Danh sách kiểm tra cho người đi công tác
- [ ] Đã chạy trình lập kế hoạch với giờ bay thực tế
- [ ] Lịch làm việc: không xếp các cuộc họp quan trọng vào khung giờ ban đêm của cơ thể
- [ ] Khách sạn: có rèm cản sáng (blackout curtains) hoặc mang theo bịt mắt; yêu cầu phòng yên tĩnh
- [ ] Ánh sáng: kính râm cho các khung giờ cần tránh sáng, đi bộ ngoài trời hoặc dùng đèn trị liệu (light box) cho các khung giờ cần đón sáng
- [ ] Đã kiểm tra lịch uống thuốc cùng dược sĩ
FILE:templates/jet-lag-plan.md
# Kế Hoạch Giảm Jet Lag - <traveler> - <origin> đến <destination>

**Chuyến bay:** <depart local> -> <arrive local> (<hours> giờ)  **Chênh lệch múi giờ:** <+/- h>  **Chiến lược:** <advance / delay / stay on home time>
**Giờ ngủ thường lệ:** <bedtime>-<wake>  **Dịch chuyển trước chuyến đi:** <h>  **Số ngày dự kiến để thích nghi:** <n>

## Trước chuyến đi
| Ngày | Giấc ngủ | Đón ánh sáng mạnh | Tránh ánh sáng | Ghi chú |
|---|---|---|---|---|
| | | | | |

## Trên chuyến bay
- Ngủ trên máy bay: <times or "stay awake">
- Bữa ăn: <destination times>
- Đã chỉnh đồng hồ sang giờ điểm đến: [ ]

## Tại điểm đến
| Ngày | Giấc ngủ | Đón ánh sáng mạnh | Tránh ánh sáng | Dùng caffeine đến | Ngừng ngủ ngắn trước | Sự kiện chính |
|---|---|---|---|---|---|---|
| | | | | | | |

## Hành lý mang theo
- [ ] Bịt mắt và nút bịt tai  - [ ] Kính râm  - [ ] Bình nước  - [ ] Lịch dùng thuốc (đã kiểm tra với chuyên gia y tế)

## Chuyến về
- Độ lệch: <h>, mất khoảng <n> ngày để thích nghi lại; những ngày làm việc nhẹ nhàng đã lên lịch: <dates>
FILE:examples/istanbul-to-los-angeles.json
{
  "traveler": "conference trip, usual sleep 23:30-07:30",
  "from_tz": "Europe/Istanbul",
  "to_tz": "America/Los_Angeles",
  "depart": "2026-11-03T13:40",
  "arrive": "2026-11-03T17:25",
  "bedtime": "23:30",
  "wake": "07:30",
  "pre_trip_days": 2,
  "stay_days": 8,
  "return_trip": true
}
FILE:scripts/jetlag_plan.py
#!/usr/bin/env python3
"""Jet lag sleep shift planner (Python 3 standard library only).

Input: a trip JSON file (or the same fields as command-line flags):
  {"from_tz": "Europe/Istanbul", "to_tz": "America/Los_Angeles",
   "depart": "2026-11-03T13:40", "arrive": "2026-11-03T17:25",
   "bedtime": "23:30", "wake": "07:30", "pre_trip_days": 2, "stay_days": 8}
Time zones: IANA names (zoneinfo, DST-aware; needs the system tz database or the tzdata
package) or fixed offsets like "UTC+3", "+05:30", "-8".  depart is local time at the origin,
arrive is local time at the destination.

Model (rules of thumb used by sleep clinics, not a medical device):
  - shift = destination offset - origin offset, normalized to -12..+12 h (+ = east).
  - the body clock moves about 1 h/day when advancing (eastward) and 1.5 h/day when
    delaying (westward); for big eastward shifts the planner picks the direction that
    takes fewer days (often delaying "the long way round").
  - optional pre-trip shift: 1 h/day for pre_trip_days, toward the destination.
  - core body temperature minimum (CBTmin) ~3 h before usual wake time. Light in the 3 h
    after CBTmin advances the clock, light in the 3 h before it delays the clock.
  - planned sleep is a compromise: target local bedtime moved toward body time by
    min(2 h, half the remaining gap). Caffeine stops 8 h and naps (max 20 min) end 7 h
    before planned bedtime.
Usage:
  python3 jetlag_plan.py trip.json
  python3 jetlag_plan.py --from Europe/Istanbul --to Asia/Tokyo --depart 2026-11-10T01:30 \
      --arrive 2026-11-10T19:05 --bedtime 23:00 --wake 07:00 --pre-days 3 --stay 10
  python3 jetlag_plan.py trip.json --json
  python3 jetlag_plan.py --self-test
Exit code: 0 OK, 2 bad input.
"""
import argparse
import datetime as dt
import json
import math
import re
import sys

ADVANCE_RATE = 1.0
DELAY_RATE = 1.5


class TripError(ValueError):
    pass


def parse_tz(name):
    s = str(name).strip()
    m = re.fullmatch(r"(?:UTC|GMT)?\s*([+-])(\d{1,2})(?::?(\d{2}))?", s, re.I)
    if m:
        sign = 1 if m.group(1) == "+" else -1
        mins = int(m.group(2)) * 60 + int(m.group(3) or 0)
        if mins > 14 * 60:
            raise TripError(f"offset out of range: {s!r}")
        return dt.timezone(dt.timedelta(minutes=sign * mins), s)
    if s.upper() in ("UTC", "GMT", "Z"):
        return dt.timezone.utc
    try:
        from zoneinfo import ZoneInfo
        return ZoneInfo(s)
    except Exception:
        raise TripError(f"unknown time zone {s!r}; use an IANA name like Europe/Istanbul or an offset like UTC+3")


def parse_hm(s, field):
    m = re.fullmatch(r"(\d{1,2}):(\d{2})", str(s).strip())
    if not m or int(m.group(1)) > 23 or int(m.group(2)) > 59:
        raise TripError(f"{field} must be HH:MM, got {s!r}")
    return int(m.group(1)) * 60 + int(m.group(2))


def parse_local(s, tz, field):
    try:
        t = dt.datetime.fromisoformat(str(s).strip())
    except ValueError:
        raise TripError(f"{field} must be YYYY-MM-DDTHH:MM, got {s!r}")
    if t.tzinfo is not None:
        t = t.replace(tzinfo=None)
    return t.replace(tzinfo=tz)


def hm(mins):
    mins = round(mins) % 1440
    return f"{mins // 60:02d}:{mins % 60:02d}"


def offset_h(t):
    return t.utcoffset().total_seconds() / 3600


def choose_direction(shift):
    """shift in -12..12 (east positive). Return (signed hours to move the body, rate, label)."""
    if shift == 0:
        return 0.0, ADVANCE_RATE, "none"
    if shift > 0:
        adv_days = math.ceil(shift / ADVANCE_RATE)
        alt = shift - 24
        del_days = math.ceil(-alt / DELAY_RATE)
        if del_days < adv_days:
            return alt, DELAY_RATE, "delay (long way round)"
        return shift, ADVANCE_RATE, "advance"
    del_days = math.ceil(-shift / DELAY_RATE)
    alt = shift + 24
    adv_days = math.ceil(alt / ADVANCE_RATE)
    if adv_days < del_days:
        return alt, ADVANCE_RATE, "advance (long way round)"
    return shift, DELAY_RATE, "delay"


def night_overlap(start_utc, end_utc, tz, night_start=22 * 60, night_end=7 * 60):
    """Return list of (start_local, end_local) pieces of the flight inside destination nights."""
    pieces = []
    t = start_utc
    step = dt.timedelta(minutes=5)
    cur = None
    while t < end_utc:
        loc = t.astimezone(tz)
        m = loc.hour * 60 + loc.minute
        is_night = m >= night_start or m < night_end
        if is_night and cur is None:
            cur = loc
        if not is_night and cur is not None:
            pieces.append((cur, loc))
            cur = None
        t += step
    if cur is not None:
        pieces.append((cur, end_utc.astimezone(tz)))
    return pieces


def overlap(a0, a1, b0, b1):
    """Minutes of overlap between [a0, a1) and [b0, b1) on a 24 h circle."""
    best = 0
    for k in (-1440, 0, 1440):
        best += max(0, min(a1, b1 + k) - max(a0, b0 + k))
    return best


def light_windows(cbt, sign, sleep_start, sleep_len):
    """Seek/avoid windows around CBTmin, moved or clipped to waking hours.
    sign > 0 (advance): seek 3 h after CBTmin, avoid 3 h before; sign < 0 (delay): the reverse.
    A seek window that falls into planned sleep moves to the nearest waking edge (after wake
    when advancing, before bedtime when delaying). Avoid windows are clipped to waking time."""
    sleep_end = sleep_start + sleep_len
    if sign > 0:
        seek, avoid = (cbt, cbt + 180), (cbt - 180, cbt)
        if overlap(seek[0], seek[1], sleep_start, sleep_end):
            seek = (sleep_end, sleep_end + 180)
    else:
        seek, avoid = (cbt - 180, cbt), (cbt, cbt + 180)
        if overlap(seek[0], seek[1], sleep_start, sleep_end):
            seek = (sleep_start - 180, sleep_start)
    ov = overlap(avoid[0], avoid[1], sleep_start, sleep_end)
    if ov >= 180:
        avoid_s = "asleep"
    elif ov:
        # keep the waking part of the avoid window
        a0, a1 = avoid
        if overlap(a0, a0 + 1, sleep_start, sleep_end):
            a0 = a1 - (180 - ov)
        else:
            a1 = a0 + (180 - ov)
        avoid_s = f"{hm(a0)}-{hm(a1)}"
    else:
        avoid_s = f"{hm(avoid[0])}-{hm(avoid[1])}"
    return f"{hm(seek[0])}-{hm(seek[1])}", avoid_s


def plan(trip):
    for k in ("from_tz", "to_tz", "depart", "arrive"):
        if not trip.get(k):
            raise TripError(f"missing {k}")
    ftz, ttz = parse_tz(trip["from_tz"]), parse_tz(trip["to_tz"])
    dep = parse_local(trip["depart"], ftz, "depart")
    arr = parse_local(trip["arrive"], ttz, "arrive")
    if arr.astimezone(dt.timezone.utc) <= dep.astimezone(dt.timezone.utc):
        raise TripError("arrive must be after depart (check the dates and time zones)")
    bed = parse_hm(trip.get("bedtime", "23:00"), "bedtime")
    wake = parse_hm(trip.get("wake", "07:00"), "wake")
    sleep_len = (wake - bed) % 1440
    if not 4 * 60 <= sleep_len <= 12 * 60:
        raise TripError("bedtime to wake must be 4-12 hours")
    pre = int(trip.get("pre_trip_days", 0))
    stay = int(trip.get("stay_days", 7))
    if pre < 0 or pre > 4 or stay < 1:
        raise TripError("pre_trip_days must be 0-4 and stay_days at least 1")
    shift = offset_h(arr) - offset_h(dep.astimezone(ftz))
    shift = ((shift + 12) % 24) - 12 if abs(shift) > 12 else shift
    if shift == -12:
        shift = 12.0
    move, rate, direction = choose_direction(shift)
    sign = 1 if move > 0 else -1
    flags = []
    if abs(shift) <= 2:
        flags.append("SMALL_SHIFT: 2 h or less; most people adapt within a day, keep usual habits on local time")
    if stay <= 2 and abs(shift) >= 3:
        flags.append("SHORT_TRIP: 2 days or fewer; consider staying on home time and scheduling meetings inside your home daytime")
    if "long way round" in direction:
        flags.append(f"LONG_WAY_ROUND: a {shift:+g} h shift is planned as {move:+g} h, which usually takes fewer days")
    pre_used = min(pre, int(abs(move))) if move else 0
    pre_days = []
    for i in range(1, pre_used + 1):
        b = bed - sign * 60 * i
        cbt = wake - 180 - sign * 60 * i
        seek_s, avoid_s = light_windows(cbt, sign, b, sleep_len)
        pre_days.append({"day": f"pre {i - pre_used - 1}", "date": str((dep.date() - dt.timedelta(days=pre_used - i + 1))),
                         "sleep": f"{hm(b)}-{hm(b + sleep_len)}", "seek_light": seek_s,
                         "avoid_light": avoid_s, "clock": "home time"})
    body = sign * pre_used  # hours already moved toward destination
    total = abs(move)
    days_needed = math.ceil(max(0.0, total - pre_used) / rate) if move else 0
    days = []
    d = 0
    while True:
        remaining = move - body  # signed hours the body is still away from local time
        gap = abs(remaining)
        comp = min(120, gap * 60 / 2)
        # remaining > 0: body clock is behind local time, so it wants to sleep later (and vice versa)
        b = bed + (comp if remaining > 0 else -comp) if gap else bed
        cbt_local = (wake - 180) + remaining * 60
        if gap < 0.5:
            seek_s, avoid_s = "daylight as usual", "-"
        else:
            seek_s, avoid_s = light_windows(cbt_local, sign, b, sleep_len)
        if remaining > 0:
            status = f"{gap:g} h behind local time"
        elif remaining < 0:
            status = f"{gap:g} h ahead of local time"
        else:
            status = "adjusted"
        days.append({"day": d, "date": str(arr.date() + dt.timedelta(days=d)), "body_clock": status,
                     "sleep": f"{hm(b)}-{hm(b + sleep_len)}", "seek_light": seek_s, "avoid_light": avoid_s,
                     "caffeine_until": hm(b - 480), "naps_end_by": hm(b - 420)})
        if gap == 0 or d + 1 >= stay:
            break
        body = body + sign * min(rate, gap)
        d += 1
    flight_h = (arr.astimezone(dt.timezone.utc) - dep.astimezone(dt.timezone.utc)).total_seconds() / 3600
    nights = night_overlap(dep.astimezone(dt.timezone.utc), arr.astimezone(dt.timezone.utc), ttz)
    nights = [(a, b) for a, b in nights if (b - a).total_seconds() >= 3600]
    if nights:
        inflight = "sleep during destination night: " + "; ".join(f"{a:%a %H:%M}-{b:%H:%M}" for a, b in nights)
    else:
        inflight = "flight is during destination daytime: stay awake, get daylight/screen light, at most a 20-minute nap"
    res = {"from_tz": str(trip["from_tz"]), "to_tz": str(trip["to_tz"]), "shift_h": shift, "plan_move_h": move,
           "direction": direction, "rate_h_per_day": rate, "pre_trip_shift_h": pre_used,
           "days_to_adjust_after_arrival": days_needed, "flight_h": round(flight_h, 2),
           "arrive_local": arr.strftime("%Y-%m-%d %H:%M"), "in_flight": inflight, "flags": flags,
           "pre_trip": pre_days, "days": days}
    if trip.get("return_trip"):
        back, brate, bdir = choose_direction(-shift)
        res["return"] = {"shift_h": -shift, "direction": bdir,
                         "days_to_adjust": math.ceil(abs(back) / brate) if back else 0}
    return res


def to_markdown(r):
    out = [f"# Jet lag plan: {r['from_tz']} -> {r['to_tz']}", "",
           f"- Time difference: {r['shift_h']:+g} h ({'east' if r['shift_h'] > 0 else 'west' if r['shift_h'] < 0 else 'none'}); "
           f"plan: {r['direction']} {abs(r['plan_move_h']):g} h at about {r['rate_h_per_day']:g} h/day",
           f"- Pre-trip shift: {r['pre_trip_shift_h']} h; about {r['days_to_adjust_after_arrival']} day(s) to adjust after arrival",
           f"- Flight: {r['flight_h']:g} h, arriving {r['arrive_local']} local; {r['in_flight']}"]
    if "return" in r:
        out.append(f"- Return trip: {r['return']['shift_h']:+g} h, {r['return']['direction']}, about {r['return']['days_to_adjust']} day(s) to readjust")
    for f in r["flags"]:
        out.append(f"- **{f.split(':')[0]}**:{f.split(':', 1)[1]}")
    if r["pre_trip"]:
        out += ["", "## Before you fly (home time)", "| Day | Date | Sleep | Seek bright light | Avoid bright light |", "|---|---|---|---|---|"]
        for p in r["pre_trip"]:
            out.append(f"| {p['day']} | {p['date']} | {p['sleep']} | {p['seek_light']} | {p['avoid_light']} |")
    out += ["", "## At the destination (local time)",
            "| Day | Date | Body clock | Sleep | Seek bright light | Avoid bright light | Caffeine until | Naps end by |",
            "|---|---|---|---|---|---|---|---|"]
    for d in r["days"]:
        out.append(f"| {d['day']} | {d['date']} | {d['body_clock']} | {d['sleep']} | {d['seek_light']} | {d['avoid_light']} | {d['caffeine_until']} | {d['naps_end_by']} |")
    out += ["", "Light windows that fall inside your sleep time can be skipped; use sunglasses outdoors during 'avoid' windows.",
            "Rules of thumb only. Ask a doctor or pharmacist before using melatonin or sleep medication."]
    return "\n".join(out)


def self_test():
    cases = []

    def ok(name, cond):
        cases.append((name, bool(cond)))

    base = {"from_tz": "Europe/Istanbul", "to_tz": "America/Los_Angeles", "depart": "2026-11-03T13:40",
            "arrive": "2026-11-03T17:25", "bedtime": "23:30", "wake": "07:30", "pre_trip_days": 2, "stay_days": 10}
    ok("fixed offset parse", parse_tz("UTC+3").utcoffset(None) == dt.timedelta(hours=3) and parse_tz("+05:30").utcoffset(None) == dt.timedelta(hours=5, minutes=30))
    ok("negative offset parse", parse_tz("-8").utcoffset(None) == dt.timedelta(hours=-8))
    r = plan(base)
    ok("IST->LA after US DST ends is -11 h", r["shift_h"] == -11)
    ok("westward plan delays", r["direction"] == "delay" and r["plan_move_h"] == -11)
    ok("pre-trip 2 h used", r["pre_trip_shift_h"] == 2 and len(r["pre_trip"]) == 2)
    ok("days to adjust ceil(9/1.5)=6", r["days_to_adjust_after_arrival"] == 6)
    ok("pre-trip bedtime later for westward", r["pre_trip"][0]["sleep"].startswith("00:30") and r["pre_trip"][1]["sleep"].startswith("01:30"))
    ok("day 0 body 9 h ahead", r["days"][0]["body_clock"] == "9 h ahead of local time")
    ok("day 0 compromise bedtime 21:30", r["days"][0]["sleep"] == "21:30-05:30")
    ok("delay: seek light before CBTmin", r["days"][0]["seek_light"] == "16:30-19:30")
    ok("delay: avoid window clipped at bedtime", r["days"][0]["avoid_light"] == "19:30-21:30")
    ok("delay: seek window moved before bedtime", r["days"][3]["seek_light"] == "18:30-21:30" and r["days"][3]["avoid_light"] == "asleep")
    ok("pre-trip delay light in the evening", r["pre_trip"][0]["seek_light"] == "21:30-00:30")
    ok("overlap on circle", overlap(1380, 1500, 0, 60) == 60 and overlap(600, 700, 0, 60) == 0)
    ok("plan ends adjusted", r["days"][-1]["body_clock"] == "adjusted" and r["days"][-1]["sleep"] == "23:30-07:30")
    ok("plan length 7 days (0..6)", len(r["days"]) == 7)
    ok("flight of 14.75 h", r["flight_h"] == 14.75)
    r2 = plan(dict(base, to_tz="America/Los_Angeles", depart="2026-10-20T13:40", arrive="2026-10-20T16:25"))
    ok("IST->LA during US DST is -10 h", r2["shift_h"] == -10)
    r3 = plan(dict(base, to_tz="Asia/Tokyo", depart="2026-11-10T01:30", arrive="2026-11-10T19:05", pre_trip_days=3))
    ok("IST->Tokyo +6 advance", r3["shift_h"] == 6 and r3["direction"] == "advance" and r3["days_to_adjust_after_arrival"] == 3)
    ok("advance: seek light moved to after wake", r3["days"][0]["seek_light"] == "09:00-12:00" and r3["days"][0]["avoid_light"] == "asleep")
    ok("pre-trip bedtime earlier for eastward", r3["pre_trip"][0]["sleep"].startswith("22:30"))
    ok("+11 east goes long way round", choose_direction(11) == (-13, DELAY_RATE, "delay (long way round)"))
    ok("+9 east stays advance", choose_direction(9)[2] == "advance")
    ok("-12 normalized to +12 then delay -12", choose_direction(12)[0] == -12)
    r4 = plan(dict(base, to_tz="Europe/Berlin", depart="2026-11-03T08:00", arrive="2026-11-03T09:00", stay_days=2))
    ok("small shift flag", any(f.startswith("SMALL_SHIFT") for f in r4["flags"]))
    r5 = plan(dict(base, stay_days=2))
    ok("short trip flag", any(f.startswith("SHORT_TRIP") for f in r5["flags"]) and len(r5["days"]) == 2)
    ok("in-flight sleep in LA night 02:40-07:00", r["in_flight"].endswith("Tue 02:40-07:00"))
    ok("Tokyo daytime flight: stay awake", "destination daytime" in r3["in_flight"])
    ok("caffeine 8 h before bed", r["days"][-1]["caffeine_until"] == "15:30" and r["days"][-1]["naps_end_by"] == "16:30")
    for bad, label in ((dict(base, to_tz="Mars/Olympus"), "unknown tz rejected"), (dict(base, bedtime="25:00"), "bad bedtime rejected"),
                       (dict(base, arrive="2026-11-02T10:00"), "arrival before departure rejected"), (dict(base, pre_trip_days=9), "pre-trip >4 rejected")):
        try:
            plan(bad)
            ok(label, False)
        except TripError:
            ok(label, True)
    ok("hm wraps midnight", hm(-30) == "23:30" and hm(1500) == "01:00")
    passed = sum(c for _, c in cases)
    for name, c in cases:
        print(("PASS " if c else "FAIL ") + name)
    print(f"{passed}/{len(cases)} passed")
    return 0 if passed == len(cases) else 1


def main(argv=None):
    ap = argparse.ArgumentParser(description="Plan sleep and light timing to beat jet lag.")
    ap.add_argument("file", nargs="?", help="trip JSON")
    ap.add_argument("--from", dest="from_tz")
    ap.add_argument("--to", dest="to_tz")
    ap.add_argument("--depart")
    ap.add_argument("--arrive")
    ap.add_argument("--bedtime")
    ap.add_argument("--wake")
    ap.add_argument("--pre-days", type=int, dest="pre_trip_days")
    ap.add_argument("--stay", type=int, dest="stay_days")
    ap.add_argument("--json", action="store_true")
    ap.add_argument("--self-test", action="store_true")
    a = ap.parse_args(argv)
    if a.self_test:
        return self_test()
    try:
        trip = json.load(open(a.file, encoding="utf-8")) if a.file else {}
        for k in ("from_tz", "to_tz", "depart", "arrive", "bedtime", "wake", "pre_trip_days", "stay_days"):
            if getattr(a, k) is not None:
                trip[k] = getattr(a, k)
        r = plan(trip)
    except (OSError, TripError, ValueError) as e:
        print(f"error: {e}", file=sys.stderr)
        return 2
    print(json.dumps(r, indent=2) if a.json else to_markdown(r))
    return 0


if __name__ == "__main__":
    sys.exit(main())
TravelPlanningHealth+2
F@f
0
Đàn Chim Hải âu cổ rụt Đại Tây Dương Chân thực trên Vách đá Biển lúc Giờ Vàng
Hình ảnh
Đàn Chim Hải âu cổ rụt Đại Tây Dương Chân thực trên Vách đá Biển lúc Giờ Vàng

Bức ảnh chụp động vật hoang dã bằng ống kính tele chân thực ghi lại đàn chim hải âu cổ rụt Đại Tây Dương (Atlantic puffins) trên vách đá biển phủ cỏ với hoa cẩm chướng biển màu hồng vào giờ vàng, một con đang ngậm cá chình cát, nhiều con khác ở gần cửa hang và đang bay lượn, vách đá sẫm màu, sóng vỗ trắng xóa quanh hai cột đá biển, và làn sương biển dịu nhẹ nơi đường chân trời.

Một bức ảnh chụp động vật hoang dã chân thực (photoreal) ghi lại một đàn nhỏ chim hải âu cổ rụt Đại Tây Dương đang đứng trên rìa vách đá biển phủ cỏ trong ánh nắng chiều ấm áp, với vùng biển Bắc Đại Tây Dương bao la tít sâu bên dưới. Ở tiền cảnh, bốn chú chim hải âu cổ rụt đứng trên một bụi cỏ xanh và hoa cẩm chướng biển (sea thrift) màu hồng; chiếc mỏ sọc đỏ cam rực rỡ và xám đá phiến, khuôn mặt trắng, lưng đen và đôi chân màu cam của chúng hiện lên sắc nét và chi tiết; một chú chim đang ngậm một hàng cá chình cát nhỏ màu bạc ngang mỏ. Phía sau chúng, đỉnh vách đá uốn cong xa dần về bên trái với nhiều chú chim hải âu cổ rụt khác quanh các lối vào hang tổ, trong khi bề mặt vách đá phân lớp sẫm màu đổ dốc thẳng đứng xuống biển. Tít sâu bên dưới, làn nước xanh lam pha lục thẫm vỡ tung thành bọt sóng trắng xóa quanh hai cột đá biển (sea stacks) cao vút, và vài chú chim hải âu cổ rụt đang bay lượn trên mặt nước với những nhịp vỗ cánh nhanh mờ nhoè. Ánh nắng vàng thấp chiếu tới từ phía bên trái, viền lên bộ lông chim một lớp ánh sáng ấm áp, dưới bầu trời mờ sương dịu nhẹ chuyển sắc từ vàng nhạt sang xanh lam nhạt cùng một lớp sương biển mỏng nơi đường chân trời. Chụp bằng ống kính tele, độ sâu trường ảnh nông làm nổi bật những chú chim ở tiền cảnh, màu sắc tự nhiên, kết cấu lông vũ sắc nét, chất lượng chuẩn phim tài liệu thiên nhiên. Khung hình ngang rộng 16:9. Không có người, không có chữ, không hình mờ (watermark), không logo.
TravelPhotographyVisual+1
F@f
0
Trình Xây dựng Bản mô tả Ý tưởng Cảnh Tu viện Bên Vách đá Himalaya
Văn bản

Xây dựng bản mô tả sẵn sàng tạo ảnh và chuyển động cho một cảnh quay chủ đạo (hero shot) về tu viện trên vách núi với cờ cầu nguyện: các tòa nhà và vách đá, các đường dây cờ, hẻm núi và đỉnh núi, ánh sáng và sương mù, các chi tiết cố định, bản đồ chuyển động, cùng hai hạt giống câu lệnh (prompt seeds): một ảnh tĩnh 16:9 và một hoạt ảnh chuyển từ ảnh sang video.

Hãy đóng vai một nhà thiết kế bối cảnh điện ảnh chuyên viết các bản mô tả cảnh quay (scene briefs) sẵn sàng cho việc tạo hình ảnh và chuyển động. Hãy giúp tôi thiết kế một cảnh quay chủ đạo (hero shot) về một tu viện nhỏ bám trên vách núi cùng những dây cờ cầu nguyện; cảnh này trước tiên sẽ được tạo thành một bức ảnh tĩnh rồi sau đó được làm hoạt ảnh thành một đoạn video ngắn sử dụng chính bức ảnh đó làm khung hình đầu tiên. Bản mô tả của bạn phải làm cho bức ảnh tĩnh giàu các yếu tố có thể chuyển động tự nhiên (cờ cầu nguyện tung bay, mây và sương mù trôi lững lờ, khói trầm hương bốc lên, thác nước hoặc dòng sông tít sâu bên dưới, ánh sáng chuyển dịch, vài cánh chim bay xa xa) trong khi vẫn giữ được bố cục tĩnh tại và dễ tạo hoạt ảnh.

Các lựa chọn khởi đầu của tôi:
- Bối cảnh núi non: Himalayan gorge with a river far below and snow peaks behind
- Thời điểm trong ngày và thời tiết: misty dawn after a clear night
- Diện mạo tu viện: small whitewashed buildings with red-brown upper walls, dark roofs, and gold roof ornaments
- Phong cách hình ảnh: photoreal travel and landscape photography
- Các từ khóa tâm trạng (mood): serene, airy, sacred, quiet

Trước tiên, hãy hỏi tôi trong một tin nhắn ngắn gọn về bất kỳ thông tin nào còn thiếu: góc nhìn máy quay mà tôi ưa thích (nhìn từ một sống núi đối diện bên kia hẻm núi, nhìn từ con đường mòn bên dưới ngước lên, hay nhìn từ một gờ đá ngang tầm với tu viện), mức độ hiển thị của dòng sông và đáy hẻm núi, cũng như bất kỳ yếu tố nào cần tránh (con người, nhà sư, khách du lịch, biển hiệu, tòa nhà hiện đại, dây cáp, hoặc một tu viện có thật cụ thể nào đó).

Sau đó, hãy lập bản mô tả với các phần sau:

1. **Tổng quan Cảnh quay (Scene Overview)**: hai hoặc ba câu mô tả địa điểm, thời gian, ánh sáng và cảm xúc của khoảnh khắc đó. Hãy mô tả một tu viện tưởng tượng, không sao chép một tu viện có tên tuổi ngoài đời thực.

2. **Tu viện và Vách đá (Monastery and Cliff)**: số lượng tòa nhà và cách sắp xếp trên các gờ vách đá, màu tường, các hàng cửa sổ, mái nhà và đồ trang trí bằng vàng, bậc thang hoặc cây cầu gỗ, cách các tòa nhà tựa vào đá, kết cấu bề mặt vách đá và thảm thực vật (bách xù, thông, rêu), cùng vị trí của tu viện trong khung hình.

3. **Cờ Cầu nguyện (Prayer Flags)**: số lượng dây cờ, vị trí buộc của từng dây (mái nhà, mũi đá nhọn, cột cờ), hướng căng ngang qua khung hình, thứ tự màu sắc (xanh lam, trắng, đỏ, xanh lục, vàng), kích thước và độ võng của dây cờ. Nêu rõ rằng các lá cờ chuyển động theo gió nhưng các điểm buộc của chúng không bao giờ dịch chuyển.

4. **Hẻm núi và Phong cảnh (Gorge and Landscape)**: dòng sông hoặc thác nước tít sâu bên dưới, các sườn núi phủ rừng, những sống núi hai bên, các đỉnh núi tuyết và các lớp chiều sâu từ tiền cảnh đến hậu cảnh.

5. **Ánh sáng và Bầu không khí (Light and Atmosphere)**: hướng nắng và màu sắc ánh mặt trời, các dải sương mù trong hẻm núi cùng độ cao của chúng, những dải mây mỏng quanh các đỉnh núi, khói trầm hương từ lư hương trên mái nhà, và cách ánh sáng bắt vào những bức tường trắng cùng các chi tiết trang trí bằng vàng.

6. **Các Chi tiết Hình ảnh Cố định (Fixed Visual Details)**: danh sách đánh số từ 8 đến 10 chi tiết bắt buộc phải giữ nguyên giống hệt nhau giữa bức ảnh tĩnh và đoạn video (phía và vị trí của tu viện, số lượng tòa nhà, điểm buộc và hướng của dây cờ, vị trí dòng sông, hình dáng các đỉnh núi, hướng mặt trời, độ cao lớp sương mù, vị trí máy quay, bố cục khung hình).

7. **Bản đồ Chuyển động (Motion Map)**: một bảng liệt kê mọi yếu tố có thể chuyển động trong video, gồm các cột: yếu tố, kiểu chuyển động, hướng, tốc độ (rất chậm, chậm, trung bình) và cường độ chuyển động. Bao gồm cả chuyển động của máy quay. Giữ cho tổng thể chuyển động tinh tế và hợp lý về mặt vật lý, với một hướng gió duy nhất chi phối cả cờ, sương mù và khói.

8. **Hạt giống Câu lệnh A - Ảnh tĩnh Chủ đạo (Prompt Seed A - Hero Still Image)**: một câu lệnh tạo ảnh sẵn sàng để dán (dưới 170 từ) cho khung hình ngang rộng 16:9, đưa tu viện, vách đá, cờ cầu nguyện và hẻm núi vào ngay câu đầu tiên, kết thúc bằng cụm từ: no people, no text, no signs, no logos.

9. **Hạt giống Câu lệnh B - Hoạt ảnh Từ ảnh sang Video (Prompt Seed B - Image-to-Video Animation)**: một câu lệnh tạo video sẵn sàng để dán (dưới 120 từ) bắt đầu từ bức ảnh tĩnh chủ đạo làm khung hình đầu tiên, mô tả một chuyển động máy quay chậm rãi cùng các chuyển động tự nhiên lấy từ Bản đồ Chuyển động trong khoảng 6 giây, đồng thời dặn giữ nguyên tu viện, vách đá, các điểm buộc cờ, núi non và bố cục khung hình y hệt như trong ảnh mà không thêm bất kỳ vật thể mới nào.

Quy tắc: không lấy con người làm chủ thể chính, không có chữ, biển hiệu hay logo, không chuyển động máy quay nhanh hoặc cắt cảnh, và không có chuyển động nào phá vỡ quy luật vật lý (cờ tung bay và gợn sóng nhưng vẫn gắn chặt vào dây, sương mù và khói trôi theo cùng một hướng gió với cờ, nước chảy từ trên cao xuống thấp). Sử dụng các đoạn văn ngắn và danh sách liệt kê.
TravelPlanningImage To Video+2
F@f
0
Tu viện Himalaya Bên Vách đá với Cờ Cầu nguyện Lúc Bình minh Sương mù
Hình ảnh
Tu viện Himalaya Bên Vách đá với Cờ Cầu nguyện Lúc Bình minh Sương mù

Bức ảnh chụp chân thực lúc bình minh sương mù ghi lại một tu viện nhỏ quét vôi trắng trên các gờ vách đá với năm dây cờ cầu nguyện đầy màu sắc căng sang một mũi đá nhọn, dòng sông màu ngọc lam ẩn dưới dải sương mù trong hẻm núi, và những đỉnh núi tuyết rực ánh vàng. Bước 2 trong quy trình Tu viện Bên Vách đá Himalaya.

Một tu viện Himalaya nhỏ quét vôi trắng bám mình trên các gờ của vách đá hoa cương dựng đứng ở phía bên trái khung hình vào lúc bình minh sương mù, với năm dây cờ cầu nguyện dài rực rỡ sắc màu căng từ các mái nhà băng qua hẻm núi tới một mũi đá nhọn cao vút ở tiền cảnh bên phải. Tu viện có bốn tòa nhà xếp tầng lên nhau với phần tường dưới màu trắng, phần tường trên màu nâu đỏ, những hàng cửa sổ nhỏ tối màu, mái bằng viền sẫm và các chi tiết trang trí mái nhỏ bằng vàng đón lấy tia nắng đầu tiên, được nối với nhau bằng những bậc thang đá hẹp và một ban công gỗ ngắn. Làn khói trầm hương mảnh mai bay lên từ một lư hương trên mái nhà. Những lá cờ cầu nguyện lặp lại thứ tự màu xanh lam, trắng, đỏ, xanh lục và vàng, võng xuống nhẹ nhàng tạo thành những đường cong mềm mại. Tít sâu bên dưới, một dòng sông màu ngọc lam uốn lượn qua hẻm núi sâu phủ rừng rậm, ẩn hiện một nửa dưới dải sương mù trắng mịn nằm thấp hơn tu viện. Những đỉnh núi phủ tuyết vươn cao ở hậu cảnh, chóp núi được mặt trời chiếu từ phía bên phải nhuộm sắc vàng nhạt và hồng phấn, dưới bầu trời trong trẻo chuyển dần từ xanh lam dịu sang màu hồng đào ấm áp. Những cây thông sẫm màu và bụi cây bách xù bám chặt vào vách đá. Nhiếp ảnh phong cảnh và du lịch chân thực (photoreal), bầu không khí thanh bình và thoáng đãng. Khung hình ngang rộng 16:9. Không có người, không có chữ, không biển hiệu, không logo.
TravelWorkflowPhotography+2
F@f
0
Video
Tu viện Himalaya Bên Vách đá Lúc Bình minh Sương mù (Hoạt ảnh Từ ảnh sang Video)

Tạo hoạt ảnh từ bức ảnh tu viện ở bước 2 làm khung hình đầu tiên thành một cảnh quay êm dịu dài 6 giây: cờ cầu nguyện tung bay trong làn gió nhẹ, sương mù dưới hẻm núi trôi lững lờ và tan mỏng dần trên mặt sông, khói trầm hương uốn cong theo chiều gió, ánh bình minh sưởi ấm những bức tường và đỉnh núi, còn máy quay từ từ đẩy nhẹ vào gần. Bước 3 trong quy trình Tu viện Bên Vách đá Himalaya.

Bắt đầu từ bức ảnh ở bước 2 "Tu viện Himalaya Bên Vách đá với Cờ Cầu nguyện Lúc Bình minh Sương mù" làm khung hình đầu tiên chính xác tuyệt đối, và tạo hoạt ảnh cho nó thành một cảnh quay điện ảnh êm dịu dài 6 giây. Giữ nguyên hoàn toàn các tòa nhà tu viện trên vách đá bên trái, mũi đá nhọn bên phải, các điểm buộc của mọi dây cờ cầu nguyện, dòng sông, hẻm núi, những đỉnh núi tuyết và bố cục khung hình y hệt như trong ảnh. Những lá cờ cầu nguyện phấp phới và gợn sóng đều đặn trong làn gió nhẹ thổi từ trái sang phải, luôn bám chắc vào dây treo. Dải sương mù trắng dưới hẻm núi trôi chậm rãi từ trái sang phải và nhẹ nhàng tan mỏng ở một vài chỗ, để lộ thêm một chút dòng sông màu ngọc lam. Làn khói trầm hương mảnh mai từ lư hương trên mái nhà bay lên và uốn cong mềm mại theo cùng chiều gió. Ánh nắng vàng từ từ đậm dần trên những bức tường trắng, các chi tiết trang trí mái bằng vàng và những đỉnh núi phủ tuyết. Máy quay thực hiện một chuyển động đẩy vào (push-in) thật chậm rãi, mượt mà hướng về phía tu viện. Chuyển động tự nhiên, chân thực, không cắt cảnh, không thêm vật thể mới, không có người, không có chữ.
TravelVideo GenerationImage To Video+2
F@f
0
Trình Xây Dựng Bản Thiết Kế Ý Tưởng Cảnh Đầu Máy Hơi Nước Trên Cầu Cạn Đá
Văn bản

Xây dựng bản mô tả sẵn sàng tạo ảnh và chuyển động cho một cảnh quay chủ đạo về đoàn tàu hơi nước băng qua cầu cạn đá trên thung lũng sông mùa thu: cầu cạn và đoàn tàu, cột hơi nước, thung lũng và ánh sáng, các chi tiết cố định, bản đồ chuyển động và hai prompt mẫu: ảnh tĩnh 16:9 và hoạt họa ảnh thành video.

Hãy đóng vai một nhà thiết kế bối cảnh điện ảnh chuyên viết các bản mô tả cảnh quay sẵn sàng cho cả việc tạo ảnh tĩnh lẫn hoạt họa chuyển động. Hãy giúp tôi thiết kế một cảnh quay chủ đạo (hero shot) về một đoàn tàu hơi nước cổ điển đang băng qua cây cầu cạn đường sắt cao bằng đá bắc qua thung lũng sông; cảnh này trước tiên sẽ được tạo thành một bức ảnh tĩnh và sau đó được hoạt họa thành một video ngắn sử dụng chính bức ảnh đó làm khung hình đầu tiên. Bản mô tả của bạn phải làm cho bức ảnh tĩnh giàu các yếu tố có thể chuyển động tự nhiên (hơi nước và khói cuồn cuộn, đoàn tàu lăn bánh đều đặn dọc theo cầu cạn, sương mù trôi trên sông, lá cây khẽ lay động trên cành, dòng nước chảy, ánh sáng chuyển dịch dịu nhẹ) đồng thời giữ cho bố cục yên bình, dễ nhìn và dễ hoạt họa.

Các lựa chọn ban đầu của tôi:
- Bối cảnh thung lũng: deep river valley with wooded hillsides and distant hazy hills
- Mùa, thời điểm và thời tiết: autumn, early morning, light river mist, mostly clear sky
- Diện mạo đoàn tàu: black steam locomotive pulling four maroon passenger carriages
- Diện mạo cầu cạn: weathered grey stone viaduct with many tall arches
- Phong cách hình ảnh: photoreal landscape and railway photography
- Các từ khóa tâm trạng: nostalgic, peaceful, golden, timeless

Trước tiên, hãy hỏi tôi trong một tin nhắn ngắn gọn về bất kỳ thông tin nào còn thiếu: góc nhìn máy quay mà tôi muốn (từ sườn đồi phía trên và lệch sang một bên, từ bờ sông nhìn lên, hoặc ngang tầm với mặt cầu), hướng di chuyển của đoàn tàu ngang qua khung hình, mức độ hiển thị của dòng sông và đáy thung lũng, cũng như bất kỳ yếu tố nào cần tránh (con người, chữ viết, biển báo, logo, tàu hiện đại, đường dây điện, hoặc một cây cầu cạn hay tuyến đường sắt có thật cụ thể).

Sau đó, hãy tạo bản mô tả với các phần sau:

1. **Tổng Quan Cảnh Quay**: hai hoặc ba câu mô tả địa điểm, thời gian, ánh sáng và cảm xúc của khoảnh khắc đó. Hãy mô tả một cây cầu cạn và đoàn tàu tưởng tượng, không sao chép một công trình có tên thật ngoài đời.

2. **Cầu Cạn và Đoàn Tàu**: hướng chạy của cầu cạn ngang qua khung hình (thẳng hay cong, điểm đi vào và đi ra khỏi khung hình), số lượng nhịp vòm nhìn thấy được, màu sắc và kết cấu đá, lan can thành cầu; vị trí của đầu máy trên mặt cầu, hướng đầu máy, chi tiết ống khói và nồi hơi, số lượng và màu sắc các toa tàu, và phần diện tích đoàn tàu hiển thị trong hình.

3. **Hơi Nước và Khói**: vị trí cột khói bốc lên, màu sắc (hơi nước trắng, khói xám), kích thước và hướng gió thổi nó bay đi. Nêu rõ rằng cột hơi nước luôn gắn liền với ống khói và trôi theo một hướng gió duy nhất.

4. **Thung Lũng và Phong Cảnh**: dòng sông bên dưới và cách nó uốn lượn dưới các nhịp vòm, cây cối trên sườn đồi và sắc màu mùa thu của chúng, bất kỳ công trình nhỏ nào (ví dụ như một ngôi nhà nông trại bằng đá bên sông), những ngọn đồi phía xa, và các lớp chiều sâu từ tiền cảnh đến hậu cảnh.

5. **Ánh Sáng và Bầu Không Khí**: hướng nắng và màu sắc ánh mặt trời, vị trí ánh sáng ấm áp chiếu vào, lớp sương mù trên mặt nước và độ cao của nó, làn sương mờ trên những ngọn đồi xa, và bầu trời.

6. **Các Chi Tiết Hình Ảnh Cố Định**: danh sách đánh số gồm 8 đến 10 chi tiết phải giữ nguyên tuyệt đối giữa ảnh tĩnh và video (hướng cầu cạn và số lượng vòm, vị trí và hướng đi của đoàn tàu, số lượng và màu sắc toa tàu, hướng dòng sông, vị trí ngôi nhà nông trại, phía mặt trời chiếu, độ cao sương mù, vị trí máy quay, bố cục khung hình).

7. **Bản Đồ Chuyển Động**: một bảng liệt kê mọi yếu tố có thể chuyển động trong video, với các cột: yếu tố, loại chuyển động, hướng, tốc độ (rất chậm, chậm, trung bình) và cường độ chuyển động. Bao gồm cả hành trình di chuyển của đoàn tàu dọc theo mặt cầu và chuyển động của máy quay. Giữ cho tổng thể chuyển động tinh tế và hợp lý về mặt vật lý, với một hướng gió thống nhất cho hơi nước, khói, sương mù và lá cây.

8. **Prompt Mẫu A - Ảnh Tĩnh Chủ Đạo**: một prompt tạo ảnh sẵn sàng để dán, dài dưới 170 từ cho khung hình ngang rộng 16:9, nêu bật đoàn tàu, cầu cạn và thung lũng ngay trong câu đầu tiên, kết thúc bằng: không thấy người, không có chữ, không có biển báo, không có logo.

9. **Prompt Mẫu B - Hoạt Họa Ảnh Thành Video**: một prompt tạo video sẵn sàng để dán, dài dưới 120 từ, bắt đầu từ bức ảnh tĩnh chủ đạo làm khung hình đầu tiên, mô tả đoàn tàu di chuyển đều đặn theo hướng đầu máy đang quay tới, chuyển động của hơi nước và sương mù, một chuyển động máy quay chậm rãi trong khoảng 6 giây, và yêu cầu giữ nguyên cầu cạn, thung lũng, các tòa nhà cùng bố cục khung hình y hệt như trong ảnh mà không thêm vật thể mới.

Quy tắc: không lấy con người làm chủ thể chính, không có chữ viết, biển báo hay logo, không chuyển động máy quay nhanh hoặc cắt cảnh, và không có chuyển động phi vật lý (đoàn tàu chỉ di chuyển dọc theo đường ray theo hướng đầu máy quay tới, các toa tàu luôn nối liền nhau, hơi nước bốc lên từ ống khói và trôi theo chiều gió, nước chảy xuôi dòng). Sử dụng các đoạn văn ngắn và danh sách liệt kê.
TravelPlanningImage To Video+2
F@f
0
Đầu Máy Hơi Nước Băng Qua Cầu Cạn Đá Trên Thung Lũng Sông Mùa Thu
Hình ảnh
Đầu Máy Hơi Nước Băng Qua Cầu Cạn Đá Trên Thung Lũng Sông Mùa Thu

Cảnh chụp chân thực vào sáng sớm của một đầu máy hơi nước màu đen kéo bốn toa tàu màu đỏ sẫm băng qua cây cầu cạn đá cao, cột hơi nước trắng, dòng sông mờ sương uốn lượn dưới các nhịp vòm, ngôi nhà nông trại mái đỏ và những sườn đồi mùa thu dưới ánh nắng thấp. Bước 2 trong quy trình Cầu Cạn Đầu Máy Hơi Nước.

Một đầu máy hơi nước màu đen kéo bốn toa hành khách màu đỏ sẫm băng qua một cây cầu cạn cao bằng đá xám nhuốm màu thời gian bắc qua thung lũng sông sâu mùa thu trong ánh sáng dịu nhẹ của buổi sáng sớm. Cây cầu cạn chạy gần như thẳng ngang qua khung hình, từ mép tiền cảnh bên trái đến khoảng trung cảnh bên phải với độ lùi nhẹ về phía xa, để lộ khoảng mười nhịp vòm tròn cao. Đoàn tàu nằm ở khu vực trung tâm lệch trái của mặt cầu: đầu máy ở đầu bên trái, hướng mặt và di chuyển sang trái, với bốn toa tàu nối đuôi nhau về phía bên phải. Một cột hơi nước trắng lớn bốc lên từ ống khói rồi trôi lên cao và hơi tạt về phía sau trên toa tàu đầu tiên. Bên dưới, một dòng sông mờ sương uốn lượn từ giữa đáy khung hình chảy ra xa dưới các nhịp vòm về phía bên phải, với một dải sương mù dày đặc trên mặt nước. Trên bờ phải ở góc dưới bên phải là một ngôi nhà nông trại nhỏ bằng đá với mái đỏ và hai ống khói. Cả hai sườn đồi đều phủ đầy những hàng cây mùa thu mang sắc cam, đỏ, vàng kim và xanh lá. Ánh nắng dịu chiếu thấp từ bên trái phủ một sắc ấm áp lên phía bên trái của khung cảnh, dưới bầu trời xanh nhạt với vài đám mây mềm mại và những ngọn đồi mờ sương phía xa. Nhiếp ảnh phong cảnh và đường sắt chân thực, màu sắc tự nhiên phong phú, kết cấu đá tinh xảo. Khung hình ngang rộng 16:9. Không thấy người, không có chữ, không có biển báo, không có logo.
TravelWorkflowPhotography+2
F@f
0
Video
Đầu Máy Hơi Nước Băng Qua Cầu Cạn Đá (Hoạt Họa Ảnh Thành Video)

Hoạt họa bức ảnh cầu cạn ở bước 2 làm khung hình đầu tiên thành một cảnh quay 6 giây yên bình: đoàn tàu hơi nước di chuyển đều đặn sang trái dọc theo cầu cạn, hơi nước cuồn cuộn tỏa về phía sau trên các toa tàu, sương mù trên sông xoáy nhẹ, lá cây khẽ lay động và máy quay lia chậm rãi. Bước 3 trong quy trình Cầu Cạn Đầu Máy Hơi Nước.

Bắt đầu từ bức ảnh ở bước 2 "Đầu Máy Hơi Nước Băng Qua Cầu Cạn Đá Trên Thung Lũng Sông Mùa Thu" làm khung hình đầu tiên chính xác, và hoạt họa nó thành một cảnh quay điện ảnh yên bình dài 6 giây. Giữ nguyên cây cầu cạn bằng đá chạy gần như thẳng ngang qua khung hình với các nhịp vòm, dòng sông bên dưới, ngôi nhà nông trại mái đỏ ở góc dưới bên phải, những sườn đồi mùa thu, những ngọn đồi xa xăm và bố cục khung hình y hệt như trong ảnh. Đầu máy màu đen, ở đầu bên trái của đoàn tàu, di chuyển đều đặn sang trái dọc theo mặt cầu cạn, kéo theo bốn toa tàu màu đỏ sẫm phía sau; các toa tàu vẫn nối liền nhau và nằm trên đường ray. Hơi nước trắng đặc và khói tiếp tục cuồn cuộn bốc lên từ ống khói, cuộn lên cao và trôi dạt về phía sau sang bên phải phía trên các toa tàu. Lớp sương mù trên sông trôi chậm rãi và xoáy nhẹ nhàng dưới các nhịp vòm. Lá trên những hàng cây gần đó khẽ lay động trong làn gió nhẹ. Ánh nắng ấm áp chiếu thấp từ bên trái tỏa sáng đều đặn lên mặt đá và cây cối. Máy quay thực hiện một cú lia cực kỳ chậm rãi, mượt mà sang trái để đi theo đoàn tàu. Chuyển động tự nhiên, chân thực, không cắt cảnh, không có vật thể mới, không có người, không có chữ.
TravelVideo GenerationImage To Video+2
F@f
0
Trình xây dựng bản tóm tắt ý tưởng bối cảnh Trạm dừng chân Caravanserai trên sa mạc lúc chạng vạng
Văn bản

Xây dựng bản tóm tắt sẵn sàng tạo ảnh và tạo chuyển động cho một cảnh quay chủ đạo (hero shot) về đoàn lữ hành lạc đà đến trạm dừng chân caravanserai bằng đá sa thạch lúc chạng vạng: kiến trúc, lộ trình đoàn lữ hành, sa mạc và cây cọ, ánh sáng, các chi tiết cố định, sơ đồ chuyển động và hai hạt giống prompt: một ảnh tĩnh 16:9 và một hoạt ảnh chuyển từ hình ảnh sang video.

Hãy đóng vai một nhà thiết kế bối cảnh điện ảnh chuyên viết các bản tóm tắt cảnh quay sẵn sàng để tạo ảnh và tạo chuyển động. Hãy giúp tôi thiết kế một cảnh quay chủ đạo (hero shot) về một trạm dừng chân caravanserai cổ kính trên sa mạc lúc chạng vạng khi có một đoàn lữ hành lạc đà đang tiến đến; cảnh này trước tiên sẽ được tạo thành một bức ảnh tĩnh và sau đó được làm hoạt ảnh thành một video ngắn sử dụng chính bức ảnh đó làm khung hình đầu tiên. Bản tóm tắt của bạn phải làm cho bức ảnh tĩnh giàu các yếu tố có thể chuyển động tự nhiên (lạc đà bước đi với những sải chân đều đặn, ánh đèn lồng lập lòe, tàu lá cọ đung đưa, cát mịn trôi qua những gợn sóng cồn cát, các vì sao xuất hiện khi bầu trời tối dần) đồng thời giữ cho bố cục êm dịu, dễ nhìn và dễ làm hoạt ảnh.

Các lựa chọn ban đầu của tôi:
- Bối cảnh sa mạc: wide sand desert with low rolling dunes and rippled sand
- Thời gian và bầu trời: dusk turning to night, orange glow on the horizon fading up into violet with the first stars
- Diện mạo trạm dừng chân caravanserai: square sandstone fortress with crenellated walls, round corner towers, and one tall arched gateway
- Đoàn lữ hành: a line of five camels with riders arriving toward the gate
- Phong cách hình ảnh: photoreal cinematic travel photography
- Các từ chỉ tâm trạng: calm, timeless, welcoming, quiet

Trước tiên, hãy hỏi tôi trong một tin nhắn ngắn gọn về bất kỳ thông tin nào còn thiếu: góc nhìn máy quay mà tôi ưa thích (thấp và rộng từ mặt cát, từ trên một cồn cát nhìn chếch xuống, hoặc ngang tầm với cổng), đoàn lữ hành nên đi vào từ phía nào và bước đi theo hướng nào, tỷ lệ hiển thị bầu trời so với mặt cát là bao nhiêu, và bất kỳ thứ gì cần tránh (khuôn mặt cận cảnh, chữ viết, biển báo, logo, phương tiện hiện đại, đường dây điện, một tòa nhà hoặc địa điểm có thật cụ thể).

Sau đó, hãy tạo bản tóm tắt với các phần sau:

1. **Tổng quan bối cảnh**: hai hoặc ba câu mô tả địa điểm, thời gian, ánh sáng và cảm xúc của khoảnh khắc đó. Hãy mô tả một trạm dừng chân caravanserai tưởng tượng, không phải bản sao của một công trình có thật và có tên cụ thể.

2. **Kiến trúc Caravanserai**: vị trí của nó trong khung hình, màu sắc và kết cấu tường, các tòa tháp ở góc, lỗ châu mai, những ô cửa sổ nhỏ, hình dáng của cổng vòm (vòm nhọn hoặc vòm móng ngựa), những gì nhìn thấy được qua cổng (các mái vòm bên trong, ánh sáng ấm áp nơi sân trong), và vị trí treo những chiếc đèn lồng.

3. **Đoàn lữ hành và Đường hướng chuyển động**: số lượng lạc đà và người cưỡi, khoảng cách giữa chúng, chúng chiếm phía nào của khung hình, hướng chúng bước đi, lộ trình chúng đi theo để tiến về phía cổng, vải lót yên và màu sắc, cùng bóng của chúng trên cát. Nêu rõ rằng mọi con lạc đà đều quay mặt về đúng hướng mà nó đang bước đi.

4. **Sa mạc và Thảm thực vật**: hình dáng các cồn cát ở gần và ở xa, những gợn sóng cát ở tiền cảnh, những bụi cây khô thưa thớt gần tường thành, và những cây cọ (bao nhiêu cây, ở đâu, cao bao nhiêu), với các lớp chiều sâu từ tiền cảnh đến hậu cảnh.

5. **Ánh sáng và Bầu không khí**: nơi ánh rực cuối ngày nằm trên đường chân trời, dải chuyển màu của bầu trời, những vì sao, ánh đèn lồng ấm áp nơi cổng tương phản với ánh hoàng hôn lạnh giá, những dải mây mỏng, và bất kỳ làn sương mù thấp nào.

6. **Các chi tiết hình ảnh cố định**: danh sách đánh số gồm 8 đến 10 chi tiết phải giữ nguyên hệt nhau trong cả bức ảnh tĩnh lẫn trong video (vị trí và kích thước pháo đài, vị trí cổng, số lượng tháp, vị trí đèn lồng, số lượng và hướng đi của lạc đà, số lượng và vị trí cây cọ, phía chân trời phát sáng, vị trí máy quay, bố cục khung hình).

7. **Sơ đồ chuyển động**: một bảng liệt kê mọi yếu tố có thể chuyển động trong video, với các cột: yếu tố, kiểu chuyển động, hướng, tốc độ (rất chậm, chậm, trung bình), và mức độ chuyển động mạnh hay nhẹ. Bao gồm bước đi của lạc đà, ánh đèn lồng lập lòe, cây cọ, cát bay, các vì sao và chuyển động của máy quay. Giữ cho tổng thể chuyển động tinh tế và hợp lý về mặt vật lý, với cùng một hướng gió cho cả cây cọ và cát.

8. **Hạt giống Prompt A - Ảnh tĩnh chủ đạo**: một prompt tạo ảnh sẵn sàng để dán dưới 170 từ cho khung hình ngang rộng 16:9, với trạm dừng chân caravanserai, đoàn lữ hành lạc đà và bầu trời chạng vạng nằm ngay trong câu đầu tiên, kết thúc bằng: no close-up faces, no text, no signs, no logos (không có khuôn mặt cận cảnh, không có chữ, không có biển báo, không có logo).

9. **Hạt giống Prompt B - Hoạt ảnh từ Hình ảnh sang Video**: một prompt tạo video sẵn sàng để dán dưới 120 từ bắt đầu từ bức ảnh tĩnh chủ đạo làm khung hình đầu tiên, mô tả đàn lạc đà bước đi đều đặn theo hướng mặt của chúng, chuyển động của đèn lồng và cây cọ, một chuyển động máy quay chậm rãi trong khoảng 6 giây, và dặn giữ nguyên pháo đài, các tòa tháp, cây cọ và bố cục khung hình y hệt như trong ảnh mà không thêm vật thể mới.

Quy tắc: con người chỉ xuất hiện như những người cưỡi lạc đà nhỏ bé, không bao giờ là chủ thể chính; không có chữ viết, biển báo hay logo; không có các chuyển động máy quay nhanh hoặc cắt cảnh; và không có chuyển động nào phá vỡ quy luật vật lý (lạc đà chỉ bước về phía trước theo đúng hướng mặt của chúng với chuyển động chân tự nhiên, người cưỡi ngồi yên trên lưng, bóng di chuyển theo lạc đà, tòa nhà không bao giờ biến đổi hình dạng). Hãy sử dụng các đoạn văn ngắn và danh sách.
TravelPlanningImage To Video+2
F@f
0
Trạm dừng chân Caravanserai bằng đá sa thạch với đoàn lữ hành lạc đà trên sa mạc lúc chạng vạng
Hình ảnh
Trạm dừng chân Caravanserai bằng đá sa thạch với đoàn lữ hành lạc đà trên sa mạc lúc chạng vạng

Cảnh chụp chân thực lúc chạng vạng của một trạm dừng chân caravanserai hình vuông bằng đá sa thạch với hai tòa tháp tròn và cổng vòm thắp đèn lồng, năm con lạc đà cùng người cưỡi đang tiến về phía cổng qua mặt cát gợn sóng, ba cây cọ cạnh tòa tháp bên phải, và bầu trời đầy sao chuyển sắc từ cam sang tím. Bước 2 của quy trình Desert Caravanserai.

Một trạm dừng chân caravanserai cổ kính hình vuông bằng đá sa thạch nằm giữa sa mạc cát rộng lớn lúc chạng vạng trong khi một hàng năm con lạc đà cùng những người cưỡi đang ngồi bước về phía cổng. Pháo đài lấp đầy vùng giữa lệch phải của khung hình: bức tường có lỗ châu mai với những ô cửa sổ khe hẹp nằm giữa hai tòa tháp góc hình tròn có lỗ châu mai, và ở chính giữa là một cổng vòm hình móng ngựa nhọn cao vút mở ra những mái vòm bên trong sân được chiếu sáng ấm áp, cùng hai chiếc đèn lồng nhỏ phát sáng treo trên tường ở hai bên cổng. Ở phía bên trái, năm con lạc đà cùng người cưỡi đi thành một hàng dọc sang bên phải băng qua mặt cát gợn sóng về phía cổng vòm, bóng của chúng đổ dài bên cạnh. Ba cây cọ mọc ở phía bên phải cạnh tòa tháp bên phải: hai cây cọ cao dựa vào tòa tháp và một cây cọ thấp hơn nằm dịch sang phải. Bầu trời rực lên sắc cam đậm và hồng đào ở chân trời phía dưới bên trái rồi nhạt dần lên trên thành màu tím và chàm điểm xuyết những ngôi sao đầu tiên, cùng vài dải mây mỏng manh ở bên trái. Những cồn cát thấp nối nhau dọc theo đường chân trời ở cả hai bên. Tiền cảnh là một dải cát rộng gợn sóng vì gió với vài bụi cây khô thưa thớt gần chân tường. Nhiếp ảnh du lịch điện ảnh chân thực, bầu không khí êm đềm và tĩnh lặng khi hoàng hôn chuyển sang đêm tối. Khung hình ngang rộng 16:9. Không có khuôn mặt cận cảnh, không có chữ, không có biển báo, không có logo.
TravelWorkflowPhotography+3
F@f
0
Video
Trạm dừng chân Caravanserai trên sa mạc lúc chạng vạng (Hoạt ảnh từ Hình ảnh sang Video)

Tạo hoạt ảnh từ bức ảnh trạm dừng chân caravanserai ở bước 2 làm khung hình đầu tiên thành một cảnh quay êm dịu dài 6 giây: năm con lạc đà bước sang phải về phía cánh cổng rực sáng, đèn lồngập lòe, tàu lá cọ đung đưa, cát trôi nhẹ, các vì sao hiện lên và máy quay từ từ đẩy vào gần. Bước 3 của quy trình Desert Caravanserai.

Bắt đầu từ hình ảnh ở bước 2 "Trạm dừng chân Caravanserai bằng đá sa thạch với đoàn lữ hành lạc đà trên sa mạc lúc chạng vạng" làm khung hình đầu tiên chính xác, và tạo hoạt ảnh thành một cảnh quay điện ảnh êm dịu dài 6 giây. Giữ nguyên trạm dừng chân caravanserai hình vuông bằng đá sa thạch với hai tòa tháp tròn có lỗ châu mai và cổng vòm cao ở vùng giữa lệch phải, ba cây cọ cạnh tòa tháp bên phải, những cồn cát thấp, bầu trời chuyển sắc từ cam sang tím, và bố cục khung hình y hệt như trong ảnh. Hàng năm con lạc đà cùng những người cưỡi đang ngồi ở phía bên trái bước đi chậm rãi và đều đặn sang bên phải về phía cổng vòm rực sáng, chân chúng chuyển động tự nhiên và bóng của chúng nối theo trên mặt cát gợn sóng; mọi con lạc đà đều giữ hướng mặt sang phải và những người cưỡi vẫn ngồi yên. Hai chiếc đèn lồng bên cạnh cổng lập lòe dịu nhẹ và ánh sáng ấm áp trong sân tỏa sáng ổn định. Một làn gió nhẹ làm đung đưa những tàu lá cọ ở bên phải, và lớp cát mịn trôi là là qua những gợn sóng cồn cát theo cùng một hướng. Ánh sáng rực cam ở chân trời bên trái nhạt dần đi một chút và thêm vài ngôi sao nữa hiện lên trên bầu trời màu tím. Máy quay thực hiện một chuyển động đẩy vào (push-in) chậm rãi, mượt mà về phía cổng vòm. Chuyển động tự nhiên, chân thực, không cắt cảnh, không thêm vật thể mới, không có chữ. Tiếng gió sa mạc tĩnh lặng và tiếng bước chân lạc đà êm ái.
TravelVideo GenerationImage To Video+2
F@f
0
Trình Tạo Bản Mô Tả Ý Tưởng Cảnh Sông Đèn Lồng Hội An Lúc Chập Choạng Tối
Văn bản

Xây dựng bản mô tả sẵn sàng tạo ảnh và tạo chuyển động cho một cảnh quay chủ đạo về dòng sông phố cổ thắp sáng đèn lồng lúc chập choạng tối: dãy nhà phố màu vàng đất, cầu đi bộ bằng gỗ có mái che, đèn hoa đăng bằng giấy, thuyền chèo và người chèo thuyền, ánh sáng, các chi tiết cố định, sơ đồ chuyển động và hai prompt hạt giống: ảnh tĩnh 16:9 và hoạt họa từ ảnh sang video.

Hãy đóng vai một nhà thiết kế bối cảnh điện ảnh chuyên viết các bản mô tả cảnh quay sẵn sàng để tạo ảnh và tạo chuyển động. Hãy giúp tôi thiết kế một cảnh quay chủ đạo (hero shot) về dòng sông thắp sáng đèn lồng chảy qua khu phố cổ lịch sử của Việt Nam lúc chập choạng tối, lấy cảm hứng từ bầu không khí đêm đèn lồng mang phong cách Hội An; cảnh này trước tiên sẽ được tạo thành một bức ảnh tĩnh và sau đó được hoạt họa thành một video ngắn sử dụng chính bức ảnh đó làm khung hình đầu tiên. Bản mô tả của bạn phải làm cho bức ảnh tĩnh giàu các yếu tố có thể chuyển động tự nhiên (đèn hoa đăng bằng giấy trôi nổi và nhấp nhô theo dòng nước, ngọn nến lung linh, bóng phản chiếu lấp lánh, chiếc thuyền gỗ nhỏ lướt đi cùng người chèo thuyền khua một mái chèo dài, đèn lồng treo đung đưa trong làn gió nhẹ, vài người tản bộ trên lối đi ven sông, bầu trời hoàng hôn từ từ sẫm lại) trong khi vẫn giữ cho bố cục hài hòa, rõ ràng và dễ tạo chuyển động.

Các lựa chọn ban đầu của tôi:
- Bối cảnh phố cổ: a calm river lined with yellow ochre two-story shophouses with dark wooden shutters and terracotta tile roofs
- Thời gian và bầu trời: blue hour, deep blue twilight sky with a soft pink-violet glow on the horizon
- Công trình điểm nhấn: a wooden arched footbridge with a small tiled pagoda-style roof spanning the river in the distance
- Đèn lồng: round silk lanterns in red, orange, and yellow along the shopfronts, and many small square paper lanterns with candles floating on the water
- Thuyền: one narrow wooden rowboat with a rower in a conical hat carrying a pile of glowing lanterns
- Phong cách hình ảnh: photoreal cinematic travel photography
- Từ khóa tâm trạng: calm, warm, magical, quiet

Trước tiên, hãy hỏi tôi trong một tin nhắn ngắn gọn về bất kỳ thông tin nào còn thiếu: góc nhìn máy quay tôi muốn (thấp sát mặt nước, từ bờ sông ngang tầm mắt, hay hơi cao từ trên ban công), dãy nhà phố nên nằm dọc bên nào của khung hình, chiếc thuyền nên đặt ở đâu và di chuyển theo hướng nào, mật độ đèn hoa đăng trên mặt nước dày hay thưa, và những gì cần tránh (khuôn mặt cận cảnh, biển hiệu hoặc chữ đọc được, logo, ô tô hoặc xe tay ga hiện đại, đường dây điện, đám đông, sao chép một bức ảnh chụp thực tế cụ thể).

Sau đó, hãy lập bản mô tả với các phần sau:

1. **Tổng quan Cảnh quay (Scene Overview)**: hai hoặc ba câu mô tả địa điểm, thời gian, ánh sáng và cảm xúc của khoảnh khắc. Hãy mô tả một khung cảnh dòng sông phố cổ tưởng tượng mang tinh thần của vùng đất đó, chứ không phải bản sao của một bức ảnh cụ thể.

2. **Kiến trúc Phố cổ (Old Town Architecture)**: dãy nhà phố nằm dọc bờ nào, màu sắc, cửa chớp, ban công và mái nhà của chúng, lối đi dạo ven sông phía trước (bàn cà phê, bờ kè đá thấp), vị trí treo đèn lồng (dọc theo mái hiên hay giăng ngang phố) và những gì có ở bờ bên kia.

3. **Cây cầu và Chiều sâu (Bridge and Depth)**: vị trí của cây cầu đi bộ trong khung hình, vòm cầu và vọng lâu có mái che, cách thắp sáng cầu, bóng phản chiếu của cầu dưới mặt nước, và các lớp chiều sâu từ mặt nước tiền cảnh đến cây cầu và bờ sông phía xa.

4. **Đèn hoa đăng trên Mặt nước (Lanterns on the Water)**: số lượng đèn hoa đăng, hình dáng và màu sắc của chúng, cách chúng trải dài từ tiền cảnh về phía cây cầu, hình ảnh bóng phản chiếu của chúng, và việc tất cả đều trôi theo cùng một hướng dòng chảy nhẹ nhàng.

5. **Thuyền và Người chèo thuyền (Boat and Rower)**: vị trí, góc nghiêng và chiều dài của chiếc thuyền trong khung hình, người chèo thuyền ngồi ở đầu nào, chiếc nón lá và trang phục, mái chèo dài và vị trí nó chạm mặt nước, chồng đèn lồng trên thuyền, và hướng chiếc thuyền sẽ lướt đi.

6. **Ánh sáng và Bầu không khí (Light and Atmosphere)**: dải chuyển màu của bầu trời chập choạng tối, ánh sáng rực lên ở đường chân trời phía sau cây cầu, ánh đèn lồng ấm áp tương phản với sắc xanh lạnh của buổi chiều tà, sự lấp lánh của các bóng phản chiếu và lớp sương mờ nhẹ trên mặt nước.

7. **Các Chi tiết Hình ảnh Cố định (Fixed Visual Details)**: danh sách đánh số từ 8 đến 10 chi tiết phải giữ nguyên hệt nhau trong cả ảnh tĩnh và video (phía bờ có dãy nhà phố, vị trí và hình dáng cây cầu, vọng lâu mái ngói, màu sắc đèn lồng, sự phân bố đèn hoa đăng, vị trí và góc nghiêng của thuyền, người chèo thuyền và mái chèo, vị trí ánh sáng đường chân trời, vị trí máy quay, bố cục khung hình).

8. **Sơ đồ Chuyển động (Motion Map)**: một bảng liệt kê mọi yếu tố có thể chuyển động trong video, với các cột: yếu tố, kiểu chuyển động, hướng, tốc độ (rất chậm, chậm, trung bình) và mức độ chuyển động mạnh hay nhẹ. Bao gồm thuyền và mái chèo, đèn hoa đăng, ánh nến lung linh, bóng phản chiếu, đèn lồng treo, người đi dạo, bầu trời và chuyển động của máy quay. Giữ tổng thể chuyển động tinh tế và hợp lý về mặt vật lý, với một hướng dòng chảy duy nhất cho mặt nước và một hướng gió duy nhất cho những chiếc đèn lồng treo.

9. **Prompt Hạt giống A - Ảnh Tĩnh Chủ đạo (Prompt Seed A - Hero Still Image)**: một prompt tạo ảnh sẵn sàng để dán, dài dưới 170 từ cho khung hình ngang rộng 16:9, đưa dòng sông đèn lồng, dãy nhà phố, cây cầu đi bộ và chiếc thuyền chèo vào ngay câu đầu tiên, kết thúc bằng: không có khuôn mặt cận cảnh, không có chữ, không có biển hiệu, không có logo (no close-up faces, no text, no signs, no logos).

10. **Prompt Hạt giống B - Hoạt họa Từ Ảnh sang Video (Prompt Seed B - Image-to-Video Animation)**: một prompt tạo video sẵn sàng để dán, dài dưới 120 từ, bắt đầu từ bức ảnh tĩnh chủ đạo làm khung hình đầu tiên, mô tả người chèo thuyền kéo mái chèo và chiếc thuyền lướt nhẹ nhàng, đèn hoa đăng trôi và lung linh, đèn lồng treo đung đưa, một chuyển động máy quay chậm trong khoảng 6 giây, và nêu rõ việc giữ nguyên dãy nhà phố, cây cầu, chiếc thuyền cùng bố cục khung hình y hệt như trong ảnh mà không thêm vật thể mới.

Quy tắc: con người chỉ xuất hiện dưới dạng những bóng dáng nhỏ và một người chèo thuyền, không bao giờ là chủ thể chính hoặc có khuôn mặt chi tiết; không có chữ, biển hiệu hay logo; các chi tiết văn hóa chân thực, tôn trọng và không rập khuôn; không chuyển động máy quay nhanh hoặc cắt cảnh; và không có chuyển động nào vi phạm quy luật vật lý (đèn hoa đăng trôi theo dòng nước chứ không bao giờ bay lên hay chìm xuống, thuyền chỉ di chuyển khi mái chèo đẩy và để lại gợn sóng, ngọn lửa lung linh nhưng không bùng lớn, các tòa nhà và cây cầu không bao giờ biến dạng). Sử dụng các đoạn văn ngắn và danh sách liệt kê.
TravelPlanningImage To Video+2
F@f
0
Sông Phố Cổ Thắp Sáng Đèn Lồng Với Cầu Đi Bộ Có Mái Che Và Thuyền Chèo Lúc Chập Choạng Tối
Hình ảnh
Sông Phố Cổ Thắp Sáng Đèn Lồng Với Cầu Đi Bộ Có Mái Che Và Thuyền Chèo Lúc Chập Choạng Tối

Cảnh chụp chân thực vào giờ xanh (blue hour) trên dòng sông phố cổ: dãy nhà phố màu vàng đất treo đèn lồng dưới mái hiên ở bờ trái, cây cầu đi bộ vòm gỗ có vọng lâu mái ngói, nhiều đèn hoa đăng bằng giấy với bóng phản chiếu lấp lánh, và một chiếc thuyền chèo có người đội nón lá chở những chiếc đèn lồng phát sáng. Bước 2 trong quy trình Sông Đèn Lồng Hội An.

Một dòng sông êm đềm chảy qua khu phố cổ lịch sử của Việt Nam vào giờ xanh (blue hour), mặt nước tối phủ đầy những chiếc đèn hoa đăng bằng giấy phát sáng trong khi một chiếc thuyền gỗ nhỏ chở đèn lồng lướt nhẹ ở tiền cảnh. Dọc theo bờ TRÁI là một dãy nhà phố hai tầng màu vàng đất với cửa chớp gỗ sẫm màu và mái ngói đất nung, phía trước có lối đi dạo dài ven sông và bờ kè đá thấp, những chiếc bàn cà phê cùng vài bóng người nhỏ bé đang tản bộ; từng dây đèn lồng lụa tròn phát sáng màu đỏ, cam và vàng treo dọc theo mái hiên trước cửa tiệm. Ở giữa hậu cảnh, một cây cầu đi bộ vòm gỗ có vọng lâu nhỏ mái ngói kiểu chùa ở trên đỉnh bắc qua sông, được thắp sáng bởi đèn lồng, vòm cầu phản chiếu xuống mặt nước. Ở bờ PHẢI phía xa, có thêm những tòa nhà thấp tầng với một hàng đèn lồng dọc theo lối đi dạo phía xa. Nhiều chiếc đèn hoa đăng giấy hình vuông nhỏ phát sáng màu đỏ, cam, vàng và trắng trôi nổi trên mặt nước tĩnh lặng, trải dài từ phía trái tiền cảnh đến tận cây cầu, mỗi chiếc đều có bóng phản chiếu dài lấp lánh. Ở tiền cảnh giữa chếch sang phải, một chiếc thuyền gỗ hẹp sẫm màu nằm chéo, đầu bên trái thấp hơn và gần máy quay hơn; một người chèo thuyền đội nón lá trắng và mặc quần áo sẫm màu ngồi ở đầu bên phải, tay cầm mái chèo gỗ dài chạm xuống mặt nước hướng về phía dưới bên phải, và ở giữa thuyền chở một chồng khoảng mười chiếc đèn lồng giấy đang phát sáng. Bầu trời hoàng hôn xanh thẫm với ánh hồng tím dịu nhẹ nơi đường chân trời phía sau cây cầu, không có sao và không có trăng. Ánh đèn lồng ấm áp nổi bật trên nền trời chập choạng xanh lạnh, nhiếp ảnh du lịch điện ảnh chân thực như ảnh chụp, bầu không khí yên bình và huyền diệu. Khung hình ngang rộng 16:9. Không có khuôn mặt cận cảnh, không có chữ, không có biển hiệu, không có logo.
TravelWorkflowPhotography+3
F@f
0
Video
Sông Đèn Lồng Hội An Lúc Chập Choạng Tối (Hoạt Họa Từ Ảnh Sang Video)

Tạo chuyển động cho bức ảnh sông đèn lồng ở bước 2 làm khung hình đầu tiên thành một cảnh quay êm đềm dài 6 giây: người chèo thuyền kéo mái chèo và chiếc thuyền chở đầy đèn lồng lướt nhẹ về phía dưới bên phải, đèn hoa đăng trôi nổi và lung linh, bóng phản chiếu lấp lánh, đèn lồng dưới mái hiên đung đưa, bầu trời sẫm dần và máy quay từ từ tiến vào. Bước 3 trong quy trình Sông Đèn Lồng Hội An.

Bắt đầu từ bức ảnh ở bước 2 "Sông Phố Cổ Thắp Sáng Đèn Lồng Với Cầu Đi Bộ Có Mái Che Và Thuyền Chèo Lúc Chập Choạng Tối" làm khung hình đầu tiên chính xác, và tạo chuyển động cho nó thành một cảnh quay điện ảnh êm đềm dài 6 giây. Giữ nguyên dãy nhà phố màu vàng đất với mái hiên treo đèn lồng ở bờ trái, cây cầu đi bộ vòm gỗ có vọng lâu mái ngói ở giữa hậu cảnh, bờ phải phía xa, bầu trời hoàng hôn xanh thẫm với ánh hồng tím phía sau cây cầu và bố cục khung hình y hệt như trong ảnh. Ở tiền cảnh giữa chếch sang phải, người chèo thuyền đội nón lá trắng chậm rãi kéo mái chèo gỗ dài và chiếc thuyền gỗ nhỏ hẹp chở chồng đèn lồng giấy phát sáng lướt nhẹ nhàng về phía dưới bên phải, để lại những gợn sóng lan nhẹ trên mặt nước tối; người chèo thuyền vẫn ngồi yên ở đầu bên phải của chiếc thuyền. Nhiều chiếc đèn hoa đăng bằng giấy trôi chậm rãi xuôi dòng và nhấp nhô nhẹ nhàng trên mặt nước, ngọn nến bên trong lung linh và bóng phản chiếu dài của chúng lấp lánh. Những chiếc đèn lồng tròn dọc theo mái hiên nhà phố đung đưa khe khẽ trong làn gió nhẹ, một vài bóng người nhỏ bé tản bộ dọc theo lối đi ven sông và bầu trời chập choạng tối sẫm màu hơn đôi chút. Máy quay thực hiện một chuyển động tiến vào rất chậm và ổn định về phía cây cầu. Chuyển động tự nhiên, chân thực, không cắt cảnh, không thêm vật thể mới, không có chữ. Tiếng nước vỗ êm dịu, tiếng mái chèo khua nước tĩnh lặng và tiếng rì rầm buổi tối vọng lại từ xa.
TravelVideo GenerationImage To Video+2
F@f
0
Kế Hoạch An Toàn Và Thời Điểm Quay Đầu Khi Đi Bộ Đường Dài Trong Ngày (JSON)
Văn bản

Mô tả cung đường mòn, nhóm của bạn và điều kiện thực tế để nhận một kế hoạch đi bộ đường dài trong ngày bằng định dạng JSON nghiêm ngặt: quyết định nên đi (go), thận trọng (caution) hay hủy chuyến (no-go), ước tính tốc độ di chuyển kèm phép tính số học, thời điểm bắt buộc phải quay đầu trước lúc mặt trời lặn, lịch trình theo khung giờ, các điểm ra quyết định, lượng nước và thức ăn, danh sách kiểm tra trang bị theo mùa, lộ trình rút lui sớm, kế hoạch chuyến đi gửi lại cho người ở nhà và hướng dẫn xử lý khẩn cấp.

1{
2 "role": "Người lập kế hoạch đi bộ đường dài trong ngày cẩn thận, giàu kinh nghiệm, chuyên giúp những người đi bộ đường dài không chuyên và trình độ trung bình biến một cung đường đã chọn thành một kế hoạch thực tế, ưu tiên an toàn trên hết cho chuyến đi một ngày, với cách tính thời gian trung thực, thời điểm quay đầu kiên quyết và các quy tắc rõ ràng về thời điểm cần thay đổi kế hoạch",
3 "task": "Chuyển đổi thông tin về cung đường mòn, nhóm và điều kiện của tôi thành một kế hoạch đi bộ đường dài trong ngày dưới dạng JSON nghiêm ngặt duy nhất: đánh giá nên đi hay không (go hoặc no-go), lịch trình có gắn mốc thời gian kèm theo thời điểm bắt buộc phải quay đầu, ước tính tốc độ có tính đến khoảng cách và độ cao, lượng nước và thức ăn, danh sách trang bị phù hợp với mùa, kiểm tra thời tiết và ánh sáng ban ngày, các điểm ra quyết định dọc theo lộ trình, kế hoạch rút lui sớm (bail-out plan), bản kế hoạch chuyến đi để gửi lại cho người ở nhà, và hướng dẫn khẩn cấp ngắn gọn. Tuyệt đối không tự bịa ra thông tin thực tế về đường mòn, khoảng cách, nguồn nước hoặc các quy định mà tôi không cung cấp.",
4 "context": {
5 "trail": "${trail:a loop to a mountain lake and a viewpoint, 14 km round trip, about 750 m of total climb, rocky in the upper section}",
6 "date_and_season": "${date:a Saturday in late October}",
7 "start_location_and_elevation": "${start:trailhead car park at 900 m}",
8 "highest_point": "${high_point:viewpoint at 1600 m}",
9 "group": "${group:three adults, one is a beginner, everyone reasonably fit}",
10 "experience": "${experience:a few easy 8 km hikes, no navigation course}",
...+143 dòng nữa
TravelPlanningSafety+3
F@f
0
Trình Xây Dựng Bản Tóm Tắt Ý Tưởng Cảnh Nhà Thờ Bên Bãi Biển Cát Đen Iceland
Văn bản

Xây dựng bản tóm tắt sẵn sàng tạo ảnh và tạo chuyển động cho một cảnh quay chủ đạo về ngôi nhà thờ trắng mái đỏ trên mũi đất phủ cỏ phía trên bãi biển cát đen Iceland với các cột đá bazan trên biển vào giờ vàng: nhà thờ, bãi biển và sóng vỗ, các cột đá biển, ánh sáng, các chi tiết cố định, bản đồ chuyển động và hai prompt hạt giống: một ảnh tĩnh 16:9 và một hoạt họa từ ảnh sang video.

Hãy đóng vai một nhà thiết kế phong cảnh điện ảnh chuyên viết các bản tóm tắt cảnh quay sẵn sàng tạo ảnh và tạo chuyển động. Hãy giúp tôi thiết kế một cảnh quay chủ đạo (hero shot) về một ngôi nhà thờ gỗ nhỏ màu trắng có mái đỏ nằm trên một mũi đất phủ cỏ phía trên bãi biển cát đen Iceland, với những cột đá bazan tối màu nhô lên từ đại dương vào giờ vàng. Cảnh quay này trước tiên sẽ được tạo dưới dạng một bức ảnh tĩnh và sau đó được hoạt họa thành một đoạn video ngắn sử dụng bức ảnh đó làm khung hình đầu tiên. Bản tóm tắt của bạn phải làm cho bức ảnh tĩnh phong phú về các yếu tố có thể chuyển động tự nhiên (những dải sóng cuộn vào và tràn lên bãi cát đen, bọt nước rút xuống, bọt sóng biển đập tung tóe vào chân các cột đá, mây trôi chậm rãi, ánh sáng ấm áp chuyển dịch đôi chút, cỏ lay động trong gió) trong khi vẫn giữ bố cục tĩnh lặng, dễ nhìn và dễ hoạt họa.

Các lựa chọn ban đầu của tôi:
- Nhà thờ: a small white wooden church with a red gabled roof and a short red steeple
- Mũi đất: a rounded grassy green headland that drops to the beach
- Bãi biển: a long curve of fine black volcanic sand
- Cột đá biển: a few dark basalt sea stacks offshore, one tall and jagged, the others smaller spires and a low rounded rock
- Thời gian và ánh sáng: golden hour with a low sun near the horizon and scattered clouds lit orange, pink, and purple
- Phong cách hình ảnh: photoreal landscape photography, natural colors
- Từ khóa tâm trạng: remote, peaceful, dramatic, warm

Trước tiên hãy hỏi tôi, trong một tin nhắn ngắn gọn, về bất kỳ thông tin nào còn thiếu: vị trí đặt máy quay mà tôi muốn (thấp trên bãi biển ngay mép nước, hơi nâng cao từ các cồn cát, hoặc từ lối mòn trên vách đá), nhà thờ và các cột đá biển nên nằm ở bên nào của khung hình, mặt trời nên ở đâu, mặt biển nên động đến mức nào, và bất kỳ thứ gì cần tránh (người, xe hơi, thiết bị bay không người lái trên bầu trời, chim chóc đòi hỏi phải bay sao cho thuyết phục, văn bản, logo, hoặc sao chép một bức ảnh chụp thực tế cụ thể).

Sau đó hãy tạo bản tóm tắt với các phần sau:

1. **Tổng quan Cảnh quay (Scene Overview)**: hai hoặc ba câu mô tả địa điểm, thời gian, ánh sáng và cảm xúc của khoảnh khắc đó. Hãy mô tả một khung cảnh bờ biển phía nam Iceland tưởng tượng mang đúng tinh thần của vùng đất này, chứ không phải bản sao của một bức ảnh cụ thể hay một nhà thờ có tên tuổi.

2. **Nhà thờ và Mũi đất (Church and Headland)**: vị trí và kích thước của nhà thờ trong khung hình, những bức tường trắng, mái đỏ và tháp chuông, cửa sổ và cửa ra vào, cách mặt trời thấp chiếu sáng ngôi nhà thờ, cũng như hình dáng của mũi đất phủ cỏ bên dưới và nơi nó tiếp giáp với bãi biển.

3. **Bãi biển và Sóng vỗ (Beach and Surf)**: đường cong của bãi cát đen từ tiền cảnh, sự phản chiếu trên lớp cát ướt, có bao nhiêu dải sóng vỗ, hướng sóng cuộn vào, và bọt nước tràn lên xa đến đâu.

4. **Các Cột đá biển và Chiều sâu (Sea Stacks and Depth)**: có bao nhiêu cột đá, hình dáng và chiều cao của chúng, vị trí của chúng từ trái sang phải, nơi bọt nước đập vào chúng, và các lớp chiều sâu từ lớp cát ở tiền cảnh cho đến đường chân trời.

5. **Ánh sáng và Bầu trời (Light and Sky)**: vị trí và độ cao của mặt trời, dải chuyển màu của bầu trời, hình dáng đám mây và cách chúng được chiếu sáng, những bóng đổ dài trên mũi đất và bãi cát, cùng bất kỳ làn sương mù nào trên mặt biển.

6. **Các Chi tiết Hình ảnh Cố định (Fixed Visual Details)**: danh sách đánh số từ 8 đến 10 chi tiết phải giữ nguyên hệt nhau trong cả bức ảnh tĩnh lẫn trong video (vị trí và màu sắc của nhà thờ, hình dáng tháp chuông, đường viền mũi đất, đường cong bãi biển, số lượng và thứ tự của các cột đá biển, vị trí mặt trời, đường chân trời, bố cục đám mây, vị trí máy quay, khung hình).

7. **Bản đồ Chuyển động (Motion Map)**: một bảng liệt kê mọi yếu tố có thể chuyển động trong video, với các cột: yếu tố, loại chuyển động, hướng, tốc độ (rất chậm, chậm, trung bình), và mức độ chuyển động mạnh hay nhẹ. Bao gồm các dải sóng vỗ, bọt nước trên cát, bọt nước tung tóe ở các cột đá, những đám mây, thảm cỏ, ánh sáng và chuyển động của máy quay. Giữ tổng thể chuyển động tinh tế và hợp lý về mặt vật lý, với một hướng sóng và một hướng gió duy nhất.

8. **Prompt Hạt giống A - Ảnh Tĩnh Chủ đạo (Prompt Seed A - Hero Still Image)**: một prompt tạo ảnh sẵn sàng để dán dưới 170 từ cho khung hình ngang rộng 16:9, với nhà thờ trên mũi đất, bãi biển cát đen và các cột đá biển ngay trong câu đầu tiên, kết thúc bằng: không có người, không có văn bản, không có logo.

9. **Prompt Hạt giống B - Hoạt họa Từ Ảnh Sang Video (Prompt Seed B - Image-to-Video Animation)**: một prompt tạo video sẵn sàng để dán dưới 120 từ bắt đầu từ bức ảnh tĩnh chủ đạo làm khung hình đầu tiên, mô tả sóng cuộn vào và tràn lên bãi cát, bọt nước tung tóe ở các cột đá, mây trôi, một chuyển động máy quay rất chậm trong khoảng 6 giây, và yêu cầu giữ nguyên nhà thờ, mũi đất, các cột đá cũng như khung hình y hệt như trong ảnh mà không thêm vật thể mới nào.

Quy tắc: không có người, động vật hoặc phương tiện giao thông làm chủ thể; không có văn bản, biển báo hoặc logo; không có chuyển động máy quay nhanh hoặc cắt cảnh; và không có chuyển động nào vi phạm quy luật vật lý (sóng luôn đến từ biển và vỗ vào bờ, bọt nước trượt ngược xuống dốc, đá và nhà thờ không bao giờ di chuyển hay thay đổi hình dạng, mặt trời không nhảy vị trí). Sử dụng các đoạn văn ngắn và danh sách.
TravelPlanningImage To Video+2
F@f
0
Nhà Thờ Trắng Mái Đỏ Phía Trên Bãi Biển Cát Đen Và Các Cột Đá Bazan Trên Biển Vào Giờ Vàng
Hình ảnh
Nhà Thờ Trắng Mái Đỏ Phía Trên Bãi Biển Cát Đen Và Các Cột Đá Bazan Trên Biển Vào Giờ Vàng

Phong cảnh giờ vàng chân thực như ảnh chụp: một nhà thờ nhỏ màu trắng với mái đỏ và tháp chuông trên mũi đất phủ cỏ ở một phần ba bên trái, một đường cong cát đen bóng loáng, sóng trắng cuộn vào từ bên phải, bốn tảng đá bazan tối màu và các cột đá biển ngoài khơi, mặt trời thấp ở ngoài cùng bên trái cùng những đám mây màu cam, hồng và tím. Bước 2 trong quy trình Nhà Thờ Bên Bãi Biển Cát Đen Iceland.

Một nhà thờ bằng gỗ nhỏ màu trắng với mái đầu hồi màu đỏ và tháp chuông nhọn màu đỏ nằm trên một mũi đất xanh phủ cỏ bo tròn phía trên bãi biển cát đen Iceland vào giờ vàng, với những cột đá bazan tối màu nhô lên từ đại dương ở bên phải. Ngôi nhà thờ nằm ở một phần ba bên trái của khung hình, gần đỉnh mũi đất, những bức tường trắng và cửa sổ nhỏ được chiếu sáng bằng sắc vàng ấm áp bởi mặt trời xuống thấp. Sườn cỏ của mũi đất thoai thoải đổ xuống bãi biển, và một đường cong rộng của lớp cát núi lửa màu đen mịn màng trải dài từ góc dưới bên trái ngang qua tiền cảnh, ướt át và bóng loáng gần mép nước. Những con sóng bọt trắng xóa cuộn vào từ bên phải thành nhiều dải dài và tràn lên bãi cát đen. Trên mặt biển ở nửa bên phải là bốn tảng đá bazan tối màu: một tảng đá thấp bo tròn gần cuối mũi đất, một cột đá biển lởm chởm cao vút ở phía trung tâm bên phải, và hai chóp đá nhọn nhỏ hơn ở xa hơn về bên phải. Mặt trời thấp nằm gần đường chân trời ở ngoài cùng bên trái phía sau mũi đất, tỏa ánh vàng cam rực rỡ, và bầu trời tràn ngập những đám mây rải rác được thắp sáng sắc cam, hồng và tím trên nền xanh dịu. Nhiếp ảnh phong cảnh chân thực, góc rộng, màu sắc tự nhiên, tâm trạng tĩnh lặng và đầy kịch tính. Khung cảnh ngang rộng 16:9. Không có người, không có văn bản, không có logo.
TravelWorkflowPhotography+3
F@f
0
Video
Nhà Thờ Bên Bãi Biển Cát Đen Iceland Vào Giờ Vàng (Hoạt Họa Từ Ảnh Sang Video)

Hoạt họa bức ảnh nhà thờ bên bãi biển cát đen ở bước 2 làm khung hình đầu tiên thành một cảnh quay tĩnh lặng dài 6 giây: sóng vỗ từ bên phải tràn lên lớp cát đen, bọt nước tung tóe vào cột đá biển cao vút, mây trôi trong khi ánh sáng vàng rực rỡ vẫn giữ nguyên, cỏ khẽ lay động và máy quay đẩy nhẹ vào trong. Bước 3 trong quy trình Nhà Thờ Bên Bãi Biển Cát Đen Iceland.

Bắt đầu từ hình ảnh ở bước 2 "Nhà Thờ Trắng Mái Đỏ Phía Trên Bãi Biển Cát Đen Và Các Cột Đá Bazan Trên Biển Vào Giờ Vàng" làm khung hình đầu tiên chính xác, và hoạt họa nó thành một cảnh quay điện ảnh tĩnh lặng dài 6 giây. Giữ nguyên ngôi nhà thờ trắng với mái đỏ và tháp chuông trên mũi đất phủ cỏ ở một phần ba bên trái, đường cong của bãi cát đen, bốn tảng đá bazan và các cột đá biển ở bên phải, mặt trời thấp ở phía ngoài cùng bên trái, đường chân trời và bố cục khung hình y hệt như trong ảnh. Những dải sóng trắng dài cuộn vào từ bên phải hướng về phía bãi biển, tràn lên lớp cát đen thành những lớp bọt mỏng rồi trượt ngược xuống, để lại vẻ bóng ướt lấp lánh. Khoảng giữa cảnh quay, một đợt bọt sóng trắng xóa đập tung tóe vào chân cột đá biển lởm chởm cao vút rồi rơi trở lại mặt nước. Những đám mây màu cam, hồng và tím trôi chậm rãi ngang bầu trời trong khi ánh sáng vàng ấm áp vẫn giữ nguyên ổn định, và lớp cỏ trên mũi đất khẽ lay động nhẹ nhàng trong gió. Máy quay gần như đứng yên, chỉ đẩy vào rất nhẹ và chậm rãi. Chuyển động tự nhiên, chân thực, không cắt cảnh, không có người, không có vật thể mới, không có văn bản. Âm thanh của tiếng sóng cuộn, tiếng gió và tiếng sóng vỗ từ xa.
TravelVideo GenerationImage To Video+2
F@f
0
Trình Lập Kế Hoạch Thời Gian và Nước Uống Cho Tuyến Đi Bộ Đường Dài
Kỹ năng

Lập kế hoạch cho chuyến đi bộ đường dài (day hike) trong ngày theo từng chặng. Ước tính thời gian bằng quy tắc Naismith và các hiệu chỉnh xuống dốc của Langmuir, có điều chỉnh theo địa hình, thể lực, trọng lượng ba lô và thời gian nghỉ giải lao, đưa ra giờ đồng hồ cụ thể cho từng chặng, kiểm tra thời điểm kết thúc so với giờ mặt trời lặn và giờ xuất phát an toàn muộn nhất, đồng thời tính toán lượng nước cần mang theo giữa các điểm tiếp nước và lượng đồ ăn nhẹ cần chuẩn bị. Cảnh báo các trường hợp kết thúc sau khi trời tối, các chặng dài không có điểm tiếp nước và địa hình khó vào cuối ngày. Bao gồm công cụ lập kế hoạch viết bằng thư viện chuẩn Python có hỗ trợ --self-test.

---
name: hiking-route-time-and-water-planner
description: Lập kế hoạch cho chuyến đi bộ đường dài (day hike) trong ngày theo từng chặng. Ước tính thời gian bằng quy tắc Naismith và các hiệu chỉnh xuống dốc của Langmuir, có điều chỉnh theo địa hình, thể lực, trọng lượng ba lô và thời gian nghỉ giải lao, đưa ra giờ đồng hồ cụ thể cho từng chặng, kiểm tra thời điểm kết thúc so với giờ mặt trời lặn và giờ xuất phát an toàn muộn nhất, đồng thời tính toán lượng nước cần mang theo giữa các điểm tiếp nước và lượng đồ ăn nhẹ cần chuẩn bị. Cảnh báo các trường hợp kết thúc sau khi trời tối, các chặng dài không có điểm tiếp nước và địa hình khó vào cuối ngày. Bao gồm công cụ lập kế hoạch viết bằng thư viện chuẩn Python có hỗ trợ --self-test.
---

# Trình Lập Kế Hoạch Thời Gian và Nước Uống Cho Tuyến Đi Bộ Đường Dài

Bạn giúp những người đi bộ đường dài (hikers) biến một tuyến đường thành một lịch trình thực tế: khi nào họ sẽ đến từng điểm, liệu họ có kết thúc chuyến đi khi trời còn sáng hay không, và cần mang theo bao nhiêu nước uống cũng như thức ăn. Bạn chỉ rõ quy tắc đằng sau mỗi con số, ưu tiên các ước tính thận trọng, và luôn chừa khoảng trống dự phòng cho một ngày di chuyển chậm hơn dự kiến. Bạn không phải là sự thay thế cho kiến thức bản địa, bản đồ hay dự báo thời tiết, và bạn luôn nêu rõ điều đó khi cần thiết.

## Các tệp trong kỹ năng này

- `scripts/hike_plan.py` - đọc tệp CSV danh sách các chặng (legs) và in ra lịch trình, kiểm tra ánh sáng ban ngày, lượng nước cho mỗi đoạn, thức ăn và các phát hiện cảnh báo (chỉ dùng thư viện chuẩn Python 3)
- `references/time-rules.md` - quy tắc Naismith, các hiệu chỉnh của Langmuir, các hệ số địa hình/thể lực/trọng lượng ba lô, thời gian nghỉ giải lao và cách hiệu chuẩn chúng
- `references/water-food-and-safety.md` - tốc độ uống nước, lập kế hoạch tiếp nước và xử lý nước, đồ ăn nhẹ, biên độ an toàn trước khi trời tối, thời điểm quay đầu và danh sách kiểm tra an toàn
- `templates/hike-plan.md` - bản kế hoạch để chia sẻ với nhóm và gửi lại cho người liên hệ ở nhà
- `examples/eagle-ridge-loop.csv` - tuyến đường vòng dài 22 km vào cuối tháng 10 có một đoạn leo bám đá (scramble) và một điểm tiếp nước

## Quy trình làm việc

### 1. Chia tuyến đường thành các chặng
Hỏi thông tin về tuyến đường (từ ứng dụng bản đồ hoặc sách hướng dẫn), ngày đi, và thông tin về nhóm: tốc độ di chuyển, thể lực, thành viên nhỏ tuổi nhất hoặc chậm nhất, trọng lượng ba lô. Chia nhỏ tuyến đường tại các đỉnh núi, đèo, trạm nghỉ (huts), ngã rẽ và nguồn nước; đối với mỗi chặng, hãy lấy khoảng cách, độ cao leo lên (ascent) và độ cao xuống dốc (descent) (từ biểu đồ độ cao của ứng dụng) cùng loại địa hình (road - đường nhựa/lâm nghiệp, path - đường mòn tốt, rough - gồ ghề, scramble - leo bám đá, snow - tuyết, bushwhack - băng rừng rậm). Đánh dấu những nơi có thể tiếp thêm nước. Lấy giờ mặt trời lặn của ngày và địa điểm đó, cùng nhiệt độ dự báo.

### 2. Chạy công cụ lập kế hoạch
```
python3 scripts/hike_plan.py examples/eagle-ridge-loop.csv --start 09:30 --sunset 17:20 --temp 24 --fitness 1.1 --pack-kg 9
python3 scripts/hike_plan.py my-route.csv --start 07:00 --sunset 20:45 --temp 31 --break-min 15 --json
python3 scripts/hike_plan.py --self-test
```
Mã thoát (exit code) 1 có nghĩa là có phát hiện mức HIGH (kết thúc sau khi mặt trời lặn), 2 có nghĩa là dữ liệu đầu vào không hợp lệ.

### 3. Điều chỉnh kế hoạch
Đối với AFTER_DARK hoặc SMALL_MARGIN: xuất phát sớm hơn (kịch bản sẽ in ra giờ xuất phát hợp lý muộn nhất), rút ngắn tuyến đường, hoặc chọn một điểm rút lui (bail-out point) và thời điểm bắt buộc quay đầu (turnaround time). Đối với LONG_DRY_STRETCH: thêm điểm tiếp nước, mang thêm dụng cụ chứa nước, hoặc chuyển đoạn leo dốc dài sang buổi sáng mát mẻ. Đối với HARD_TERRAIN_LATE: đảo ngược chiều đi của tuyến đường vòng để đoạn leo bám đá (scramble) được thực hiện trước. Giải thích các công thức từ `references/time-rules.md` khi được hỏi, và gợi ý hiệu chuẩn lại hệ số thể lực sau khi hoàn thành chặng đầu tiên.

### 4. Bàn giao kế hoạch
Điền vào `templates/hike-plan.md`: lịch trình kèm giờ đồng hồ cụ thể, thời điểm bắt buộc quay đầu, danh sách nước uống và thức ăn, các phương án rút lui và thông tin khẩn cấp để gửi lại cho người ở nhà.

## Kết quả ví dụ
Đối với `examples/eagle-ridge-loop.csv` (22.2 km, +1170 m / -1150 m) xuất phát lúc 09:30 với hệ số thể lực 1.1 và nhiệt độ 24 C: 7 giờ 08 phút di chuyển, 8 giờ 19 phút tính cả nghỉ giải lao, kết thúc vào khoảng 17:49, tức là muộn hơn 29 phút so với giờ mặt trời lặn lúc 17:20 (cảnh báo mức HIGH AFTER_DARK; giờ xuất phát hợp lý muộn nhất là 08:01). Bốn chặng đầu tiên không có nguồn nước, vì vậy phải mang theo 4.4 L nước (cảnh báo mức MEDIUM LONG_DRY_STRETCH). Nếu xuất phát lúc 08:00 sẽ kết thúc lúc 16:19, còn dư 61 phút trời sáng; đoạn đường khô hạn vẫn giữ nguyên, do đó kế hoạch bổ sung thêm một túi nước (bladder) 2 L hoặc giấu sẵn một chai nước dự trữ tại Pine Saddle.

## Quy tắc

- Các con số ước tính chỉ là điểm khởi đầu: hãy dặn nhóm so sánh thời gian thực tế ở chặng đầu tiên với kế hoạch và tính toán lại tỷ lệ cho các chặng sau.
- Luôn giữ ít nhất 60 phút dự phòng trước khi trời tối, và mỗi ba lô đều phải có một đèn đội đầu (headlamp) vào mọi thời điểm trong năm.
- Tuyệt đối không gợi ý uống nước chưa qua xử lý; luôn khuyến nghị lọc hoặc xử lý bất kỳ nguồn nước tự nhiên nào.
- Thời tiết, tuyết, việc vượt sông suối và điều kiện thực tế của tuyến đường luôn có quyền ưu tiên cao hơn bất kỳ lịch trình nào: hãy nhắc người dùng kiểm tra dự báo thời tiết và báo cáo thực địa, đồng thời quay đầu ngay khi điều kiện thay đổi xấu đi.
- Không đưa ra lời khuyên y tế vượt quá hướng dẫn cơ bản về bù nước và dinh dưỡng; hãy chỉ dẫn họ tham gia đào tạo sơ cứu và lưu số điện thoại cứu hộ tại địa phương.
FILE:references/time-rules.md
# Quy Tắc Tính Thời Gian

## Quy tắc Naismith (1892)
Dành 1 giờ cho mỗi 5 km trên đường bằng cộng thêm 1 giờ cho mỗi 600 m leo cao (bản gốc là 3 dặm một giờ cộng 1 giờ cho mỗi 2000 ft).
```
moving minutes = distance_km / pace_kmh * 60 + ascent_m / 10
```
Ví dụ: 4.2 km với 380 m leo cao = 50.4 + 38 = 88 phút trước khi áp dụng các hệ số điều chỉnh.

## Các hiệu chỉnh của Langmuir khi xuống dốc
Quy tắc Naismith coi việc xuống dốc giống như đi trên đường bằng. Langmuir đã tinh chỉnh lại như sau:
- dốc xuống thoải, từ 5 đến 12 độ (khoảng 9 đến 21 %): trừ đi 10 phút cho mỗi 300 m xuống dốc
- dốc xuống gắt, trên 12 độ: cộng thêm 10 phút cho mỗi 300 m xuống dốc
- dưới 5 độ: không thay đổi
Kịch bản ước tính góc xuống dốc từ độ cao giảm xuống và tỷ lệ quãng đường đi xuống trong chặng đó. Kịch bản không bao giờ để thời gian đi một chặng giảm xuống thấp hơn một nửa thời gian đi trên đường bằng của chặng đó.

## Các hệ số nhân được kịch bản sử dụng
| Hệ số | Giá trị | Khi nào áp dụng |
|---|---|---|
| Terrain road | 0.9 | Đường trải nhựa hoặc đường lâm nghiệp |
| Terrain path | 1.0 | Đường mòn đi bộ tốt |
| Terrain rough | 1.25 | Đường mòn nhiều đá, rễ cây, đất đá rời rạc hoặc lầy lội |
| Terrain scramble | 1.6 | Cần dùng tay bám, các bậc đá chênh vênh |
| Terrain snow | 1.5 | Tuyết mềm hoặc tuyết cũ chưa cần dùng đinh giày (crampon) |
| Terrain bushwhack | 1.6 | Không có đường mòn, phải vạch cây cối rậm rạp |
| Fitness (Thể lực) | 0.85 / 1.0 / 1.2 / 1.4 | Nhanh và khỏe / trung bình / thong thả hoặc nhóm hỗn hợp / có trẻ nhỏ |
| Pack (Ba lô) | +2 % mỗi kg vượt quá 10 kg | Đi qua đêm hoặc mang vác nặng |
| Breaks (Nghỉ giải lao) | 10 phút mỗi giờ (mặc định) | Dùng 15 đến 20 phút cho các chuyến đi chụp ảnh, gia đình, nhóm đông người |

Hệ số địa hình được nhân cho toàn bộ chặng, bao gồm cả thời gian leo dốc.

## Hiệu chuẩn (Calibrating)
Sau chặng đầu tiên, hãy lấy thời gian thực tế chia cho thời gian dự kiến. Nếu nhóm mất 1 giờ 50 phút cho một chặng dự kiến 1 giờ 37 phút, hệ số chênh lệch là 1.13: hãy chạy lại kịch bản với tham số `--fitness` nhân với hệ số đó và kiểm tra lại giờ kết thúc. Các nhóm luôn di chuyển theo tốc độ của người chậm nhất; hãy lập kế hoạch dựa theo người đó.

## Các quy tắc khác bạn có thể bắt gặp
- Hiệu chỉnh Tranter (Tranter's corrections): bảng tra cứu thể lực và độ mệt mỏi áp dụng thêm trên quy tắc Naismith, được dùng cho những ngày leo núi dài.
- Hàm đi bộ đường dài của Tobler (Tobler's hiking function): tốc độ = 6 * exp(-3.5 * |slope + 0.05|) km/h, được sử dụng trong các công cụ GIS; hàm này cho ra tổng thời gian tương tự trên các tuyến đường hỗn hợp.

## Thời điểm bắt buộc quay đầu (Turnaround time)
Đối với tuyến đường đi và về cùng một lối (out-and-back) hoặc tuyến đường có lối thoát rút lui (bail-out), hãy đặt ra một thời điểm quay đầu cố định: thời gian muộn nhất bạn có thể rời khỏi điểm xa nhất mà vẫn quay về kịp lúc còn một giờ ánh sáng ban ngày. Ví dụ: mặt trời lặn lúc 17:20, giữ dự phòng 60 phút, lượt về mất 3 giờ 10 phút -> bắt buộc phải quay đầu trước 13:10 dù bạn đang ở bất kỳ đâu.
FILE:references/water-food-and-safety.md
# Nước Uống, Thức Ăn và An Toàn

## Tốc độ uống nước được kịch bản sử dụng
| Nhiệt độ | Số lít mỗi giờ (tính trên tổng thời gian) |
|---|---|
| dưới 15 C | 0.4 |
| 15 đến 24 C | 0.5 |
| 25 đến 29 C | 0.75 |
| từ 30 C trở lên | 1.0 |
Cộng thêm 0.1 L cho mỗi 100 m leo cao, vì việc leo dốc khiến bạn đổ mồ hôi nhiều hơn. Nhu cầu thực tế rất khác nhau giữa mỗi người; những người ra nhiều mồ hôi, trẻ em và người ở độ cao lớn có thể cần nhiều nước hơn. Hãy uống từng ngụm nhỏ thường xuyên thay vì uống thật nhiều cùng một lúc, và bổ sung chất điện giải (viên muối, bột pha nước uống hoặc đồ ăn nhẹ có vị mặn) vào những ngày nắng nóng hoặc khi uống nhiều hơn khoảng 3 L nước.

## Lập kế hoạch mang nước
- Điểm xuất phát và mọi chặng được đánh dấu `water_at_end = yes` là các điểm tiếp nước.
- Lượng nước cần mang (Carry) = lượng nước lớn nhất cần dùng giữa hai điểm tiếp nước cộng với 0.5 L dự phòng.
- Mang nhiều hơn 3 L (3 kg) là khá nặng; các phương án xử lý bao gồm giấu sẵn nước dự trữ trên đường, chọn tuyến đường đi qua trạm nghỉ hoặc suối nước, hoặc chuyển đoạn leo dốc nóng bức nhất sang sáng sớm.
- Hãy xác nhận chắc chắn rằng các con suối và trạm nghỉ thực sự có nước vào thời điểm đó trong năm (nhiều trạm nghỉ đóng cửa vào cuối mùa thu; các con suối thường cạn khô vào cuối mùa hè).

## Xử lý nước
Xử lý tất cả các nguồn nước tự nhiên: dùng bộ lọc sợi rỗng (loại bỏ vi khuẩn và động vật nguyên sinh), viên nén chlorine dioxide (diệt được cả vi-rút, cần chờ đủ thời gian tác dụng, thường là 30 phút, và lên đến 4 giờ đối với Cryptosporidium), bút chiếu tia UV cho nước trong, hoặc đun sôi trong 1 phút (3 phút nếu ở độ cao trên 2000 m). Hãy lọc nước đục qua một lớp vải trước khi xử lý.

## Thức ăn
Khoảng 200 đến 300 kcal mỗi giờ khi đang di chuyển sẽ giúp duy trì năng lượng ổn định trong một ngày dài: các loại hạt, thanh năng lượng, trái cây sấy khô, phô mai, bánh mì kẹp. Kịch bản sử dụng mức 250 kcal cho mỗi giờ trên tổng thời gian. Hãy đóng gói dư ra một phần đồ ăn nhẹ cho mỗi người làm nguồn dự phòng khẩn cấp.

## Ánh sáng ban ngày
- Tra cứu giờ mặt trời lặn cho đúng địa điểm và ngày cụ thể (qua ứng dụng thời tiết hoặc thiên văn). Ở vùng núi, ánh nắng mặt trời sẽ khuất khỏi các thung lũng và các sườn dốc hướng đông sớm hơn so với giờ mặt trời lặn chính thức.
- Chạng vạng dân dụng (civil twilight) cung cấp khoảng 20 đến 40 phút ánh sáng có thể nhìn đường sau khi mặt trời lặn ở các vùng vĩ độ trung bình, và ngắn hơn ở vùng nhiệt đới. Tuyệt đối không lập kế hoạch dựa vào khoảng thời gian này.
- Luôn giữ 60 phút ánh sáng ban ngày dự phòng (giá trị `--margin` mặc định). Mọi ba lô đều phải trang bị một đèn đội đầu có pin đã sạc đầy.

## Danh sách kiểm tra an toàn
- Đã kiểm tra dự báo thời tiết vào tối hôm trước và sáng ngày khởi hành (giông bão, sức gió trên sống núi, độ cao đóng băng).
- Đã gửi lại kế hoạch tuyến đường, giờ xuất phát, thời điểm quay đầu và giờ về dự kiến cho một người ở nhà, kèm theo thông tin cần gọi cho ai và vào lúc nào.
- Đã tải bản đồ ngoại tuyến (offline) trên điện thoại, kèm theo sạc dự phòng; mang theo bản đồ giấy và la bàn đối với các tuyến đường hẻo lánh.
- Trang phục mặc nhiều lớp (layers) và áo khoác chống thấm nước, mũ và găng tay khi đi phía trên đường giới hạn cây gỗ (tree line) ngay cả vào mùa hè, cùng đồ chống nắng.
- Bộ sơ cứu nhỏ gọn, băng dán chống phồng rộp, chăn cứu sinh khẩn cấp, còi báo hiệu.
- Nắm rõ số điện thoại khẩn cấp tại địa phương (112 ở Châu Âu, 911 ở Bắc Mỹ) và quy trình gọi cứu hộ đường núi.
- Quy tắc bất di bất dịch: cả nhóm luôn đi cùng nhau và phải quay đầu khi đến giờ bắt buộc quay đầu, ngay khi thấy tia chớp đầu tiên, hoặc khi có bất kỳ ai cảm thấy không khỏe.
FILE:templates/hike-plan.md
# Kế hoạch đi bộ đường dài: <tên tuyến đường>, <ngày>

**Nhóm:** <tên / số lượng thành viên>   **Trưởng nhóm:** <tên, số điện thoại>
**Tuyến đường:** <vòng lặp 22.2 km, +1170 m / -1150 m, liên kết bản đồ>
**Xuất phát:** <08:00 tại bãi đỗ xe Eagle Ridge>   **Dự kiến kết thúc:** <16:19>   **Mặt trời lặn:** <17:20>
**Thời điểm bắt buộc quay đầu:** <13:00 tại đỉnh núi, bất kể tình huống nào>
**Thời hạn báo động muộn nhất cho người liên hệ ở nhà:** <19:00>

## Lịch trình
| Chặng | km | Lên / xuống m | Địa hình | Giờ bắt đầu dự kiến | Giờ kết thúc dự kiến | Tiếp nước |
|---|---|---|---|---|---|---|
| <Bãi đỗ xe đến Pine Saddle> | <4.2> | <+380 / -20> | <path> | <08:00> | <09:53> | <không> |

Các thiết lập đã dùng: <tốc độ 5 km/h, thể lực 1.1, nghỉ 10 phút/giờ, 24 C>. Kiểm tra lại sau chặng đầu tiên và tính lại tỷ lệ.

## Nước uống và thức ăn
- Mang theo từ lúc xuất phát: <4.4 L mỗi người> (không có điểm tiếp nước cho đến <Spring Hut>)
- Tiếp nước tại: <vòi nước ở Spring Hut (mở cửa đến hết tháng 10?), xử lý nước suối>
- Đồ ăn nhẹ: <2100 kcal mỗi người> + một phần dự phòng
- Chất điện giải: <có / không>

## Các phương án rút lui (Bail-out options)
- <Sau Pine Saddle: đi theo đường lâm nghiệp quay lại bãi đỗ xe, 3.5 km, 1 giờ>
- <Bỏ qua đoạn băng qua sống núi: đi xuống theo đường mòn phía bắc từ đỉnh núi>

## Trang bị mang theo (Kit)
- <đèn đội đầu, quần áo nhiều lớp, áo chống thấm, bản đồ ngoại tuyến + sạc dự phòng, bộ sơ cứu, còi, bộ lọc nước hoặc viên khử trùng>

## Thời tiết và điều kiện thực địa
- Dự báo: <đã kiểm tra vào ... : trời khô ráo, 24 C, gió 20 km/h trên sống núi>
- Ghi chú: <đoạn leo bám đá bị ướt sau cơn mưa; tránh đi nếu trời ướt>

## Khẩn cấp
- Số điện thoại khẩn cấp: <112>   Cứu hộ đường núi: <...>
- Người liên hệ ở nhà: <tên, số điện thoại>: nếu không nhận được tin nhắn trước <19:00>, hãy gọi số <số điện thoại> kèm theo bản kế hoạch này.
FILE:examples/eagle-ridge-loop.csv
leg,distance_km,ascent_m,descent_m,terrain,water_at_end
Car park to Pine Saddle,4.2,380,20,path,no
Pine Saddle to Eagle Ridge summit,3.1,520,40,rough,no
Eagle Ridge traverse,1.6,120,150,scramble,no
Ridge down to Spring Hut,3.8,30,560,path,yes
Spring Hut to Blue Lake,4.5,80,210,path,no
Blue Lake back to car park,5.0,40,170,road,yes
FILE:scripts/hike_plan.py
#!/usr/bin/env python3
"""Hiking route time and water planner (Python 3 standard library only).

Reads a CSV of route legs and estimates moving time per leg with Naismith's rule
(5 km/h plus 1 hour per 600 m of ascent) and Langmuir's descent corrections,
adjusted for terrain, fitness and pack weight, then adds breaks, gives clock
times for every leg, checks the finish against sunset, and works out how much
water to carry between refill points and how much food to pack.

CSV columns (header required; ; or , separated):
  leg, distance_km, ascent_m, descent_m, terrain, water_at_end
terrain: road | path | rough | scramble | snow | bushwhack   water_at_end: yes/no

Usage:
  python3 hike_plan.py route.csv --start 08:30 --sunset 17:10 --temp 24
  python3 hike_plan.py route.csv --start 07:00 --fitness 1.2 --pack-kg 14 --json
  python3 hike_plan.py --self-test
Exit codes: 0 = plan fine, 1 = HIGH findings (finish after sunset), 2 = bad input.
"""
import argparse, csv, io, json, math, sys

TERRAIN = {"road": 0.9, "path": 1.0, "trail": 1.0, "rough": 1.25, "scramble": 1.6, "snow": 1.5, "bushwhack": 1.6}
REQUIRED = ["leg", "distance_km", "ascent_m", "descent_m", "terrain", "water_at_end"]
SEV = {"HIGH": 0, "MEDIUM": 1, "LOW": 2}


class InputError(Exception):
    pass


def num(v, field, row):
    try:
        x = float(str(v).strip().replace(",", "."))
    except ValueError:
        raise InputError(f"row {row}: {field} '{v}' is not a number")
    if x < 0:
        raise InputError(f"row {row}: {field} cannot be negative")
    return x


def hm(s):
    try:
        h, m = s.strip().split(":")
        h, m = int(h), int(m)
        assert 0 <= h < 24 and 0 <= m < 60
        return h * 60 + m
    except Exception:
        raise InputError(f"time '{s}' must be HH:MM")


def clock(mins):
    mins = int(round(mins))
    day, rem = divmod(mins, 1440)
    return f"{rem // 60:02d}:{rem % 60:02d}" + (f" (+{day}d)" if day else "")


def dur(mins):
    mins = int(round(mins))
    return f"{mins // 60}h{mins % 60:02d}"


def read_legs(text):
    sample = text[:2000]
    delim = ";" if sample.count(";") > sample.count(",") else ","
    rd = csv.DictReader(io.StringIO(text), delimiter=delim)
    if not rd.fieldnames:
        raise InputError("empty CSV")
    fields = [f.strip().lower() for f in rd.fieldnames]
    missing = [c for c in REQUIRED if c not in fields]
    if missing:
        raise InputError("missing columns: " + ", ".join(missing))
    legs = []
    for i, raw in enumerate(rd, start=2):
        r = {k.strip().lower(): (v or "").strip() for k, v in raw.items() if k}
        if not any(r.values()):
            continue
        t = r["terrain"].lower() or "path"
        if t not in TERRAIN:
            raise InputError(f"row {i}: terrain '{t}' must be one of {', '.join(TERRAIN)}")
        w = r["water_at_end"].lower()
        if w not in ("yes", "no", "y", "n", "1", "0", "true", "false", ""):
            raise InputError(f"row {i}: water_at_end must be yes or no")
        legs.append({"leg": r["leg"] or f"Leg {len(legs) + 1}",
                     "distance_km": num(r["distance_km"], "distance_km", i),
                     "ascent_m": num(r["ascent_m"], "ascent_m", i),
                     "descent_m": num(r["descent_m"], "descent_m", i),
                     "terrain": t, "water_at_end": w in ("yes", "y", "1", "true")})
    if not legs:
        raise InputError("no legs in CSV")
    return legs


def water_rate(temp_c):
    """Litres per hour of total time, before the ascent extra."""
    if temp_c < 15:
        return 0.4
    if temp_c < 25:
        return 0.5
    if temp_c < 30:
        return 0.75
    return 1.0


def leg_minutes(leg, pace_kmh):
    d, up, down = leg["distance_km"], leg["ascent_m"], leg["descent_m"]
    flat = d / pace_kmh * 60
    climb = up / 10.0  # Naismith: 60 min per 600 m
    descent_adj = 0.0
    steep = False
    if down > 0 and d > 0:
        horiz = d * 1000 * (down / (up + down))  # share of the leg spent descending
        angle = math.degrees(math.atan(down / horiz)) if horiz > 0 else 90
        if 5 <= angle <= 12:
            descent_adj = -down / 300 * 10   # Langmuir: gentle descent is faster
        elif angle > 12:
            descent_adj = down / 300 * 10    # steep descent is slower
        steep = angle > 14
    if up > 0 and d > 0:
        horiz_up = d * 1000 * (up / (up + down))
        steep = steep or math.degrees(math.atan(up / horiz_up)) > 14  # about 25 %
    return max(flat + climb + descent_adj, flat * 0.5), steep


def plan(legs, start, sunset=None, pace=5.0, fitness=1.0, pack_kg=8.0, break_min=10.0, temp=18.0, margin=60):
    if pace <= 0 or fitness <= 0:
        raise InputError("pace and fitness must be positive")
    pack_factor = 1.0 + max(0.0, pack_kg - 10) * 0.02  # +2 % per kg above 10 kg
    rate = water_rate(temp)
    t = start
    rows, findings = [], []
    stretch, stretches, stretch_legs = 0.0, [], []
    for leg in legs:
        base, steep = leg_minutes(leg, pace)
        moving = base * TERRAIN[leg["terrain"]] * fitness * pack_factor
        total = moving * (1 + break_min / 60)
        water = total / 60 * rate + leg["ascent_m"] / 100 * 0.1
        t_start, t = t, t + total
        rows.append({**leg, "moving_min": round(moving), "with_breaks_min": round(total),
                     "start": clock(t_start), "end": clock(t), "end_min": t, "water_l": round(water, 2), "steep": steep})
        stretch += water
        stretch_legs.append(leg["leg"])
        if leg["water_at_end"]:
            stretches.append((stretch, stretch_legs)); stretch, stretch_legs = 0.0, []
        if steep:
            findings.append(("LOW", "STEEP_LEG", f"{leg['leg']}: average gradient over 25 %; expect slower going than the formula and take care on the descent"))
    if stretch_legs:
        stretches.append((stretch, stretch_legs))
    moving_total = sum(r["moving_min"] for r in rows)
    total = t - start
    carry = max(s for s, _ in stretches) + 0.5
    for s, names in stretches:
        if s + 0.5 > 3.0:
            findings.append(("MEDIUM", "LONG_DRY_STRETCH", f"{' -> '.join(names)}: {s + 0.5:.1f} L to carry with no refill; add a refill, cache water or start earlier in the cool"))
    summary = {
        "distance_km": round(sum(l["distance_km"] for l in legs), 1),
        "ascent_m": round(sum(l["ascent_m"] for l in legs)),
        "descent_m": round(sum(l["descent_m"] for l in legs)),
        "moving_min": round(moving_total), "total_min": round(total),
        "start": clock(start), "finish": clock(t),
        "water_total_l": round(sum(r["water_l"] for r in rows), 1),
        "carry_max_l": round(carry, 1),
        "food_kcal": int(round(total / 60 * 250, -1)),
        "water_rate_l_per_h": rate, "pack_factor": round(pack_factor, 2),
    }
    if sunset is not None:
        left = sunset - t
        summary["sunset"] = clock(sunset)
        summary["minutes_before_sunset"] = round(left)
        summary["latest_start"] = clock(sunset - margin - total)
        if left < 0:
            findings.append(("HIGH", "AFTER_DARK", f"finish {clock(t)} is {dur(-left)} after sunset {clock(sunset)}; start by {summary['latest_start']}, shorten the route or plan a bail-out"))
        elif left < margin:
            findings.append(("MEDIUM", "SMALL_MARGIN", f"finish {clock(t)} leaves only {round(left)} min before sunset (target {margin}); start by {summary['latest_start']} and carry a headlamp"))
        for r in rows:
            if r["terrain"] in ("scramble", "snow") and r["end_min"] > sunset - 120:
                findings.append(("MEDIUM", "HARD_TERRAIN_LATE", f"{r['leg']} ({r['terrain']}) ends at {r['end']}, within 2 h of sunset; tired legs and fading light on hard ground"))
    if moving_total > 8 * 60:
        findings.append(("LOW", "LONG_DAY", f"{dur(moving_total)} moving time; check that everyone has done a day this long recently"))
    if temp >= 28 and any(l["ascent_m"] >= 300 for l in legs):
        findings.append(("MEDIUM", "HEAT", f"{temp:g} C with big climbs: start at first light, rest in shade, electrolytes with the water"))
    findings.sort(key=lambda f: SEV[f[0]])
    for r in rows:
        r.pop("end_min")
    return {"legs": rows, "summary": summary, "stretches": [{"legs": n, "litres": round(s + 0.5, 1)} for s, n in stretches],
            "findings": [{"severity": a, "code": b, "message": c} for a, b, c in findings]}


def to_markdown(p, args):
    s = p["summary"]
    out = ["# Hike plan", "",
           f"Settings: pace {args.pace:g} km/h, fitness x{args.fitness:g}, pack {args.pack_kg:g} kg (x{s['pack_factor']}), breaks {args.break_min:g} min per hour, {args.temp:g} C",
           "",
           f"Route: {s['distance_km']} km, +{s['ascent_m']} m / -{s['descent_m']} m; moving {dur(s['moving_min'])}, with breaks {dur(s['total_min'])}",
           f"Start {s['start']}, finish about {s['finish']}" + (f"; sunset {s['sunset']}, " + (f"{s['minutes_before_sunset']} min to spare" if s['minutes_before_sunset'] >= 0 else f"{dur(-s['minutes_before_sunset'])} AFTER sunset") + f"; latest sensible start {s['latest_start']}" if "sunset" in s else ""),
           "", "| Leg | km | Up m | Down m | Terrain | Moving | With breaks | Start | End | Water L | Refill at end |",
           "|---|---|---|---|---|---|---|---|---|---|---|"]
    for r in p["legs"]:
        out.append(f"| {r['leg']} | {r['distance_km']:g} | {r['ascent_m']:g} | {r['descent_m']:g} | {r['terrain']} | {dur(r['moving_min'])} | "
                   f"{dur(r['with_breaks_min'])} | {r['start']} | {r['end']} | {r['water_l']:.1f} | {'yes' if r['water_at_end'] else 'no'} |")
    out += ["", "## Water and food",
            f"- Drinking rate {s['water_rate_l_per_h']} L/h at this temperature plus 0.1 L per 100 m of climbing; total about {s['water_total_l']} L",
            f"- Carry at most {s['carry_max_l']} L (largest stretch between refills, incl. 0.5 L reserve); treat stream water"]
    for st in p["stretches"]:
        out.append(f"  - {' -> '.join(st['legs'])}: {st['litres']} L")
    out.append(f"- Food: about {s['food_kcal']} kcal of snacks (about 250 kcal per hour on the move), plus a spare")
    out += ["", "## Findings"]
    out += [f"- {f['severity']} {f['code']}: {f['message']}" for f in p["findings"]] or ["- none"]
    out += ["", "Estimates only: check them against your group's real pace on the first leg and adjust."]
    return "\n".join(out)


def self_test():
    res = []

    def check(name, cond):
        res.append(cond)
        print(("PASS " if cond else "FAIL ") + name)

    def L(d, up, down, terrain="path", water="no", name="x"):
        return {"leg": name, "distance_km": d, "ascent_m": up, "descent_m": down, "terrain": terrain, "water_at_end": water == "yes"}

    check("flat 10 km at 5 km/h = 120 min", round(leg_minutes(L(10, 0, 0), 5)[0]) == 120)
    check("Naismith 600 m climb adds 60 min", round(leg_minutes(L(5, 600, 0), 5)[0]) == 120)
    g = leg_minutes(L(6, 0, 900), 5)[0]  # angle ~8.5 deg: gentle
    check("gentle descent is faster (Langmuir)", round(g) == 72 - 30)
    st = leg_minutes(L(2, 0, 600), 5)  # ~16.7 deg: steep
    check("steep descent is slower and flagged", round(st[0]) == 24 + 20 and st[1])
    check("steep ascent flagged", leg_minutes(L(1, 400, 0), 5)[1])
    check("descent never below half the flat time", leg_minutes(L(10, 0, 1500), 5)[0] >= 60)
    p = plan([L(10, 0, 0)], hm("08:00"), break_min=0)
    check("finish time no breaks", p["summary"]["finish"] == "10:00")
    p = plan([L(10, 0, 0)], hm("08:00"), break_min=10)
    check("10 min break per hour", p["summary"]["total_min"] == 140)
    check("terrain multiplier", plan([L(10, 0, 0, "scramble")], 0, break_min=0)["summary"]["moving_min"] == 192)
    check("fitness multiplier", plan([L(10, 0, 0)], 0, fitness=1.2, break_min=0)["summary"]["moving_min"] == 144)
    check("pack over 10 kg slows", plan([L(10, 0, 0)], 0, pack_kg=15, break_min=0)["summary"]["moving_min"] == 132)
    p = plan([L(10, 0, 0)], hm("15:00"), sunset=hm("16:30"), break_min=0)
    check("AFTER_DARK HIGH", p["findings"][0]["code"] == "AFTER_DARK" and p["findings"][0]["severity"] == "HIGH")
    check("latest start", p["summary"]["latest_start"] == "13:30")
    p = plan([L(10, 0, 0)], hm("14:00"), sunset=hm("16:30"), break_min=0)
    check("SMALL_MARGIN", [f["code"] for f in p["findings"]] == ["SMALL_MARGIN"])
    check("no finding with time to spare", plan([L(10, 0, 0)], hm("08:00"), sunset=hm("18:00"))["findings"] == [])
    check("HARD_TERRAIN_LATE", any(f["code"] == "HARD_TERRAIN_LATE" for f in
          plan([L(3, 0, 0, "scramble")], hm("13:00"), sunset=hm("15:00"))["findings"]))
    check("water rate by temperature", [water_rate(t) for t in (10, 20, 27, 33)] == [0.4, 0.5, 0.75, 1.0])
    p = plan([L(10, 0, 0, water="yes"), L(10, 0, 0)], 0, temp=20, break_min=0)
    check("water per leg", p["legs"][0]["water_l"] == 1.0)
    check("carry = largest stretch + reserve", p["summary"]["carry_max_l"] == 1.5)
    p = plan([L(10, 500, 0), L(10, 0, 500)], 0, temp=31, break_min=0)
    check("LONG_DRY_STRETCH and HEAT", {"LONG_DRY_STRETCH", "HEAT"} <= {f["code"] for f in p["findings"]})
    check("LONG_DAY", any(f["code"] == "LONG_DAY" for f in plan([L(45, 0, 0)], 0)["findings"]))
    check("food kcal", plan([L(10, 0, 0)], 0, break_min=0)["summary"]["food_kcal"] == 500)
    check("clock wraps past midnight", clock(1500) == "01:00 (+1d)")
    legs = read_legs("leg;distance_km;ascent_m;descent_m;terrain;water_at_end\nA;3,5;200;0;Path;yes\n")
    check("semicolon CSV + decimal comma", legs[0]["distance_km"] == 3.5 and legs[0]["water_at_end"])
    for bad, why in [("leg,distance_km\nA,1\n", "missing columns"),
                     ("leg,distance_km,ascent_m,descent_m,terrain,water_at_end\nA,x,0,0,path,no\n", "non-number"),
                     ("leg,distance_km,ascent_m,descent_m,terrain,water_at_end\nA,1,-5,0,path,no\n", "negative"),
                     ("leg,distance_km,ascent_m,descent_m,terrain,water_at_end\nA,1,0,0,lava,no\n", "unknown terrain")]:
        try:
            read_legs(bad); check("rejects " + why, False)
        except InputError:
            check("rejects " + why, True)
    try:
        hm("25:00"); check("rejects bad time", False)
    except InputError:
        check("rejects bad time", True)
    passed = sum(res)
    print(f"{passed}/{len(res)} passed")
    return 0 if passed == len(res) else 1


def main():
    ap = argparse.ArgumentParser(description="Hiking route time and water planner")
    ap.add_argument("csv", nargs="?", help="legs CSV")
    ap.add_argument("--start", help="start time HH:MM")
    ap.add_argument("--sunset", help="sunset time HH:MM")
    ap.add_argument("--pace", type=float, default=5.0, help="flat walking speed km/h (default 5)")
    ap.add_argument("--fitness", type=float, default=1.0, help="time multiplier: 0.85 fast, 1.0 average, 1.2 relaxed, 1.4 with young kids")
    ap.add_argument("--pack-kg", type=float, default=8.0, help="pack weight; +2%% time per kg above 10")
    ap.add_argument("--break-min", type=float, default=10.0, help="break minutes per hour of walking (default 10)")
    ap.add_argument("--temp", type=float, default=18.0, help="expected daytime temperature C")
    ap.add_argument("--margin", type=int, default=60, help="minutes of daylight to keep in hand (default 60)")
    ap.add_argument("--json", action="store_true")
    ap.add_argument("--self-test", action="store_true")
    a = ap.parse_args()
    if a.self_test:
        return self_test()
    if not a.csv or not a.start:
        ap.error("give a CSV and --start, or --self-test")
    try:
        with open(a.csv, encoding="utf-8-sig") as fh:
            legs = read_legs(fh.read())
        p = plan(legs, hm(a.start), hm(a.sunset) if a.sunset else None, a.pace, a.fitness, a.pack_kg, a.break_min, a.temp, a.margin)
    except (OSError, InputError) as e:
        print(f"error: {e}", file=sys.stderr)
        return 2
    print(json.dumps(p, indent=2) if a.json else to_markdown(p, a))
    return 1 if any(f["severity"] == "HIGH" for f in p["findings"]) else 0


if __name__ == "__main__":
    sys.exit(main())
TravelPythonPlanning+2
F@f
0
Kế Hoạch Đếm Ngược Trước Ngày Lên Đường Du Học (YAML)
Văn bản

Chuyển đổi điểm đến, chương trình học và ngày đi của bạn thành kế hoạch đếm ngược du học định dạng YAML: kiểm tra hạn chót giấy tờ và thị thực, kế hoạch theo từng tuần từ 10 tuần trước khi bay, thiết lập tài chính và ngân hàng, các bước chuẩn bị sức khỏe và bảo hiểm, hậu cần nhà ở và khi mới đến, đóng gói hành lý trong giới hạn cân nặng, những việc cần tạm dừng ở quê nhà, lịch trình ngày khởi hành và danh sách việc cần làm trong tuần đầu tiên.

1role: Cố vấn du học có tổ chức, luôn khích lệ tinh thần, chuyên giúp sinh viên biến những tháng ngày hỗn loạn trước khi lên đường đi học một học kỳ hoặc chương trình cấp bằng ở nước ngoài thành một kế hoạch đếm ngược bình tĩnh theo từng tuần để không bỏ sót điều gì quan trọng và tuần đầu tiên khi mới đến diễn ra suôn sẻ
2task: >
3 Chuyển đổi điểm đến, chương trình học, các mốc thời gian và hoàn cảnh của tôi thành một kế hoạch khởi hành hoàn chỉnh dưới dạng YAML:
4 kiểm tra giấy tờ và hạn chót, lịch đếm ngược từng tuần từ 10 tuần trước ngày khởi hành cho đến
5 ngày bay, thiết lập tiền bạc và ngân hàng, các bước về sức khỏe và bảo hiểm, hậu cần nhà ở và khi mới đến,
6 thiết lập điện thoại và kỹ thuật số, kế hoạch đóng gói hành lý theo danh mục kèm giới hạn cân nặng, những việc cần đóng hoặc
7 tạm dừng ở quê nhà, lịch trình chi tiết trong ngày khởi hành, và danh sách kiểm tra cho tuần đầu tiên sau khi đến nơi.
8
9inputs:
10 home_country: ${home_country:Canada}
...+110 dòng nữa
TravelPlanningYAML+3
F@f
0
Trước2 / 3Tiếp